// File: /workspace/github_cpp_makefile_star2_O3/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 0x15f76
movq %rax, %r14
leaq 0xaa5a7(%rip), %rsi     # 0xb45cf
movq %rbx, %rdi
callq 0xc99a
leaq 0xaa5cc(%rip), %rsi     # 0xb4603
movq %rbx, %rdi
callq 0xcaa0
leaq 0xaa5eb(%rip), %rsi     # 0xb4631
movq %rbx, %rdi
callq 0xcba6
leaq 0xaa608(%rip), %rsi     # 0xb465d
movq %rbx, %rdi
callq 0xccac
leaq 0xaa60a(%rip), %rsi     # 0xb466e
movq %rbx, %rdi
callq 0xc446
leaq 0xaa83c(%rip), %r15     # 0xb48af
movq %rbx, %rdi
movq %r15, %rsi
callq 0xa6c4
leaq 0xaa5fd(%rip), %rsi     # 0xb4682
movq %rbx, %rdi
callq 0xcdb2
leaq 0xaa60b(%rip), %rsi     # 0xb469f
movq %rbx, %rdi
callq 0xceb8
movq %rbx, %rdi
movq %r15, %rsi
callq 0xa6c4
leaq 0xaa606(%rip), %rsi     # 0xb46b4
movq %rbx, %rdi
callq 0xcfbe
movq %rbx, %rdi
callq 0x281d8
cmpl $0x5, 0xb8(%r14)
ja 0xa2e8
leaq 0xaa5f0(%rip), %rsi     # 0xb46c3
movq %rbx, %rdi
callq 0xd0c4
movq %rbx, %rdi
callq 0x281d8
movl 0xb8(%r14), %eax
cmpq $0x5, %rax
ja 0xa34e
leaq 0xaa0a1(%rip), %rcx     # 0xb419c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xaa61d(%rip), %rcx     # 0xb4736
movl $0x33, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xaa62f(%rip), %rcx     # 0xb476a
movl $0xf, %r8d
jmp 0xa23a
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xaa61f(%rip), %rcx     # 0xb477a
movl $0x35, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xaa633(%rip), %rcx     # 0xb47b0
jmp 0xa1f5
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xaa6c3(%rip), %rcx     # 0xb4857
movl $0x3b, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xaa6dd(%rip), %rcx     # 0xb4893
movl $0x17, %r8d
jmp 0xa23a
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xaa51b(%rip), %rcx     # 0xb46ee
movl $0x35, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xaa52f(%rip), %rcx     # 0xb4724
movl $0x11, %r8d
jmp 0xa23a
leaq 0x7a0(%rbx), %rdi
movq 0x7a8(%rbx), %rdx
leaq 0xaa5f7(%rip), %rcx     # 0xb4809
movl $0x38, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xaa60e(%rip), %rcx     # 0xb4842
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 0xa9f92(%rip), %rax     # 0xb41fc
leaq 0xaa551(%rip), %rsi     # 0xb47c2
leaq 0xafe33(%rip), %rcx     # 0xba0ab
leaq 0x8(%rsp), %r15
movq %r15, %rdi
movq %rcx, %r9
pushq %rax
pushq %r14
callq 0xd1c9
addq $0x10, %rsp
leaq 0x7a0(%rbx), %rdi
movq %r15, %rsi
callq 0x6310
movq (%r15), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xa2b8
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x7c8(%rbx), %rdx
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0xaa52b(%rip), %rcx     # 0xb47f8
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 0xaa3cc(%rip), %rsi     # 0xb46d1
leaq 0xaa3e1(%rip), %rdx     # 0xb46ed
leaq 0x8(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xf1a9b(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xf1a73(%rip), %rsi     # 0xfbdb0
movq 0xf2c94(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0xa3b2
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0xaa366(%rip), %rsi     # 0xb46d1
leaq 0xaa37b(%rip), %rdx     # 0xb46ed
leaq 0x8(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xf1a35(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xf1a0d(%rip), %rsi     # 0xfbdb0
movq 0xf2c2e(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0xa3b6
jmp 0xa3d7
movq %rax, %r14
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0xa3d0
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
testb %bpl, %bpl
jne 0xa3da
jmp 0xa3e2
movq %rax, %r14
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64a0