#include "SPIRV/Logger.h"
#include "SPIRV/SpvTools.h"
+static_assert(sizeof(glslang_spv_options_t) == sizeof(glslang::SpvOptions), "");
+
typedef struct glslang_program_s {
glslang::TProgram* program;
std::vector<unsigned int> spirv;
return EShLangFragment;
case GLSLANG_STAGE_COMPUTE:
return EShLangCompute;
- case GLSLANG_STAGE_RAYGEN_NV:
+ case GLSLANG_STAGE_RAYGEN:
return EShLangRayGen;
- case GLSLANG_STAGE_INTERSECT_NV:
+ case GLSLANG_STAGE_INTERSECT:
return EShLangIntersect;
- case GLSLANG_STAGE_ANYHIT_NV:
+ case GLSLANG_STAGE_ANYHIT:
return EShLangAnyHit;
- case GLSLANG_STAGE_CLOSESTHIT_NV:
+ case GLSLANG_STAGE_CLOSESTHIT:
return EShLangClosestHit;
- case GLSLANG_STAGE_MISS_NV:
+ case GLSLANG_STAGE_MISS:
return EShLangMiss;
- case GLSLANG_STAGE_CALLABLE_NV:
+ case GLSLANG_STAGE_CALLABLE:
return EShLangCallable;
- case GLSLANG_STAGE_TASK_NV:
- return EShLangTaskNV;
- case GLSLANG_STAGE_MESH_NV:
- return EShLangMeshNV;
+ case GLSLANG_STAGE_TASK:
+ return EShLangTask;
+ case GLSLANG_STAGE_MESH:
+ return EShLangMesh;
default:
break;
}
GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
{
+ glslang_spv_options_t spv_options;
+ spv_options.generate_debug_info = false;
+ spv_options.strip_debug_info = false;
+ spv_options.emit_nonsemantic_shader_debug_info = false;
+ spv_options.emit_nonsemantic_shader_debug_source = false;
+ spv_options.disable_optimizer = true;
+ spv_options.optimize_size = false;
+ spv_options.disassemble = false;
+ spv_options.validate = true;
+
+ glslang_program_SPIRV_generate_with_options(program, stage, &spv_options);
+}
+
+GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options) {
spv::SpvBuildLogger logger;
- glslang::SpvOptions spvOptions;
- spvOptions.validate = true;
const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
- glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions);
+ glslang::GlslangToSpv(*intermediate, program->spirv, &logger, reinterpret_cast<glslang::SpvOptions*>(spv_options));
program->loggerMessages = logger.getAllMessages();
}