// File: /workspace/github_cpp_makefile_star2_O2/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 0x12fa4
movq %rax, %r14
leaq 0x867d7(%rip), %rsi     # 0x8f5a7
movq %rbx, %rdi
callq 0xab96
leaq 0x867fc(%rip), %rsi     # 0x8f5db
movq %rbx, %rdi
callq 0xac52
leaq 0x8681b(%rip), %rsi     # 0x8f609
movq %rbx, %rdi
callq 0xad0e
leaq 0x86838(%rip), %rsi     # 0x8f635
movq %rbx, %rdi
callq 0xadca
leaq 0x8683a(%rip), %rsi     # 0x8f646
movq %rbx, %rdi
callq 0xa792
leaq 0x86a6c(%rip), %r15     # 0x8f887
movq %rbx, %rdi
movq %r15, %rsi
callq 0x928e
leaq 0x8682d(%rip), %rsi     # 0x8f65a
movq %rbx, %rdi
callq 0xae86
leaq 0x8683b(%rip), %rsi     # 0x8f677
movq %rbx, %rdi
callq 0xaf42
movq %rbx, %rdi
movq %r15, %rsi
callq 0x928e
leaq 0x86836(%rip), %rsi     # 0x8f68c
movq %rbx, %rdi
callq 0xaffe
movq %rbx, %rdi
callq 0x22d28
cmpl $0x5, 0xb8(%r14)
ja 0x8fe5
leaq 0x86820(%rip), %rsi     # 0x8f69b
movq %rbx, %rdi
callq 0xb0ba
movq %rbx, %rdi
callq 0x22d28
movl 0xb8(%r14), %eax
cmpq $0x5, %rax
ja 0x9030
leaq 0x862d1(%rip), %rcx     # 0x8f174
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x7a0(%rbx), %rdi
leaq 0x86854(%rip), %rsi     # 0x8f70e
callq 0x64e0
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0x86875(%rip), %rsi     # 0x8f742
jmp 0x8f5c
leaq 0x7a0(%rbx), %rdi
leaq 0x86872(%rip), %rsi     # 0x8f752
callq 0x64e0
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0x86895(%rip), %rsi     # 0x8f788
jmp 0x8f5c
leaq 0x7a0(%rbx), %rdi
leaq 0x8692c(%rip), %rsi     # 0x8f82f
callq 0x64e0
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0x86955(%rip), %rsi     # 0x8f86b
jmp 0x8f5c
leaq 0x7a0(%rbx), %rdi
leaq 0x867a0(%rip), %rsi     # 0x8f6c6
callq 0x64e0
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0x867c3(%rip), %rsi     # 0x8f6fc
jmp 0x8f5c
leaq 0x7a0(%rbx), %rdi
leaq 0x86898(%rip), %rsi     # 0x8f7e1
callq 0x64e0
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0x868be(%rip), %rsi     # 0x8f81a
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x64e0
leaq 0xa0(%r14), %rdx
leaq 0xa4(%r14), %r8
addq $0xa8, %r14
leaq 0x8624a(%rip), %rax     # 0x8f1d4
leaq 0x86809(%rip), %rsi     # 0x8f79a
leaq 0x8c0f3(%rip), %rcx     # 0x9508b
leaq 0x8(%rsp), %r15
movq %r15, %rdi
movq %rcx, %r9
pushq %rax
pushq %r14
callq 0xb176
popq %rax
popq %rcx
leaq 0x7a0(%rbx), %rdi
movq %r15, %rsi
callq 0x6320
movq %r15, %rdi
callq 0x6548
addq $0x7c0, %rbx            # imm = 0x7C0
leaq 0x867fe(%rip), %rsi     # 0x8f7d0
movq %rbx, %rdi
callq 0x64e0
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x866b2(%rip), %rsi     # 0x8f6a9
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xddda1(%rip), %rsi     # 0xe6dc0
movq 0xdefba(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x9079
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x86667(%rip), %rsi     # 0x8f6a9
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xddd56(%rip), %rsi     # 0xe6dc0
movq 0xdef6f(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x907d
jmp 0x9091
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x6548
testb %bpl, %bpl
jne 0x9094
jmp 0x909c
movq %rax, %r14
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64b0