// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cpp.cpp
// Function: spirv_cross::CompilerCPP::emit_header()
void CompilerCPP::emit_header()
{
	auto &execution = get_entry_point();

	statement("// This C++ shader is autogenerated by spirv-cross.");
	statement("#include \"spirv_cross/internal_interface.hpp\"");
	statement("#include \"spirv_cross/external_interface.h\"");
	// Needed to properly implement GLSL-style arrays.
	statement("#include <array>");
	statement("#include <stdint.h>");
	statement("");
	statement("using namespace spirv_cross;");
	statement("using namespace glm;");
	statement("");

	statement("namespace Impl");
	begin_scope();

	switch (execution.model)
	{
	case ExecutionModelGeometry:
	case ExecutionModelTessellationControl:
	case ExecutionModelTessellationEvaluation:
	case ExecutionModelGLCompute:
	case ExecutionModelFragment:
	case ExecutionModelVertex:
		statement("struct Shader");
		begin_scope();
		break;

	default:
		SPIRV_CROSS_THROW("Unsupported execution model.");
	}

	switch (execution.model)
	{
	case ExecutionModelGeometry:
		impl_type = "GeometryShader<Impl::Shader, Impl::Shader::Resources>";
		resource_type = "GeometryResources";
		break;

	case ExecutionModelVertex:
		impl_type = "VertexShader<Impl::Shader, Impl::Shader::Resources>";
		resource_type = "VertexResources";
		break;

	case ExecutionModelFragment:
		impl_type = "FragmentShader<Impl::Shader, Impl::Shader::Resources>";
		resource_type = "FragmentResources";
		break;

	case ExecutionModelGLCompute:
		impl_type = join("ComputeShader<Impl::Shader, Impl::Shader::Resources, ", execution.workgroup_size.x, ", ",
		                 execution.workgroup_size.y, ", ", execution.workgroup_size.z, ">");
		resource_type = "ComputeResources";
		break;

	case ExecutionModelTessellationControl:
		impl_type = "TessControlShader<Impl::Shader, Impl::Shader::Resources>";
		resource_type = "TessControlResources";
		break;

	case ExecutionModelTessellationEvaluation:
		impl_type = "TessEvaluationShader<Impl::Shader, Impl::Shader::Resources>";
		resource_type = "TessEvaluationResources";
		break;

	default:
		SPIRV_CROSS_THROW("Unsupported execution model.");
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
callq 0x16254
movq %rax, %r14
leaq 0xab56f(%rip), %rsi     # 0xb55cf
movq %rbx, %rdi
callq 0xc9da
leaq 0xab594(%rip), %rsi     # 0xb5603
movq %rbx, %rdi
callq 0xcae0
leaq 0xab5b3(%rip), %rsi     # 0xb5631
movq %rbx, %rdi
callq 0xcbe6
leaq 0xab5d0(%rip), %rsi     # 0xb565d
movq %rbx, %rdi
callq 0xccec
leaq 0xab5d2(%rip), %rsi     # 0xb566e
movq %rbx, %rdi
callq 0xc486
leaq 0xab804(%rip), %r15     # 0xb58af
movq %rbx, %rdi
movq %r15, %rsi
callq 0xa700
leaq 0xab5c5(%rip), %rsi     # 0xb5682
movq %rbx, %rdi
callq 0xcdf2
leaq 0xab5d3(%rip), %rsi     # 0xb569f
movq %rbx, %rdi
callq 0xcef8
movq %rbx, %rdi
movq %r15, %rsi
callq 0xa700
leaq 0xab5ce(%rip), %rsi     # 0xb56b4
movq %rbx, %rdi
callq 0xcffe
movq %rbx, %rdi
callq 0x28804
cmpl $0x5, 0xb8(%r14)
ja 0xa320
leaq 0xab5b8(%rip), %rsi     # 0xb56c3
movq %rbx, %rdi
callq 0xd104
movq %rbx, %rdi
callq 0x28804
movl 0xb8(%r14), %eax
cmpq $0x5, %rax
ja 0xa386
leaq 0xab069(%rip), %rcx     # 0xb519c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xab5e5(%rip), %rcx     # 0xb5736
movl $0x33, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xab5f7(%rip), %rcx     # 0xb576a
movl $0xf, %r8d
jmp 0xa272
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xab5e7(%rip), %rcx     # 0xb577a
movl $0x35, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xab5fb(%rip), %rcx     # 0xb57b0
jmp 0xa22d
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xab68b(%rip), %rcx     # 0xb5857
movl $0x3b, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xab6a5(%rip), %rcx     # 0xb5893
movl $0x17, %r8d
jmp 0xa272
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xab4e3(%rip), %rcx     # 0xb56ee
movl $0x35, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xab4f7(%rip), %rcx     # 0xb5724
movl $0x11, %r8d
jmp 0xa272
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xab5bf(%rip), %rcx     # 0xb5809
movl $0x38, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xab5d6(%rip), %rcx     # 0xb5842
movl $0x14, %r8d
movq %rbx, %rdi
xorl %esi, %esi
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x63f0
leaq 0xa0(%r14), %rdx
leaq 0xa4(%r14), %r8
addq $0xa8, %r14
leaq 0xaaf5a(%rip), %rax     # 0xb51fc
leaq 0xab519(%rip), %rsi     # 0xb57c2
leaq 0xb0e0b(%rip), %rcx     # 0xbb0bb
leaq 0x8(%rsp), %r15
movq %r15, %rdi
movq %rcx, %r9
pushq %rax
pushq %r14
callq 0xd209
addq $0x10, %rsp
leaq 0x7a0(%rbx), %rdi
movq %r15, %rsi
callq 0x6310
movq (%r15), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xa2f0
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xab4f3(%rip), %rcx     # 0xb57f8
movl $0x10, %r8d
movq %rbx, %rdi
xorl %esi, %esi
callq 0x63f0
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0xab394(%rip), %rsi     # 0xb56d1
leaq 0xab3a9(%rip), %rdx     # 0xb56ed
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xf2a33(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xf2a0b(%rip), %rsi     # 0xfcd80
movq 0xf3c5c(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0xa3ea
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0xab32e(%rip), %rsi     # 0xb56d1
leaq 0xab343(%rip), %rdx     # 0xb56ed
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xf29cd(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xf29a5(%rip), %rsi     # 0xfcd80
movq 0xf3bf6(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0xa3ee
jmp 0xa40a
movq %rax, %r14
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0xa410
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0xa410
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0xa41d
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64a0
nop