MCPcopy Create free account
hub / github.com/PacktPublishing/3D-Graphics-Rendering-Cookbook / compileShader

Function compileShader

shared/UtilsVulkan.cpp:159–226  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

157static_assert(sizeof(TBuiltInResource) == sizeof(glslang_resource_t));
158
159static size_t compileShader(glslang_stage_t stage, const char* shaderSource, ShaderModule& shaderModule)
160{
161 const glslang_input_t input =
162 {
163 .language = GLSLANG_SOURCE_GLSL,
164 .stage = stage,
165 .client = GLSLANG_CLIENT_VULKAN,
166 .client_version = GLSLANG_TARGET_VULKAN_1_1,
167 .target_language = GLSLANG_TARGET_SPV,
168 .target_language_version = GLSLANG_TARGET_SPV_1_3,
169 .code = shaderSource,
170 .default_version = 100,
171 .default_profile = GLSLANG_NO_PROFILE,
172 .force_default_version_and_profile = false,
173 .forward_compatible = false,
174 .messages = GLSLANG_MSG_DEFAULT_BIT,
175 .resource = (const glslang_resource_t*)&glslang::DefaultTBuiltInResource,
176 };
177
178 glslang_shader_t* shader = glslang_shader_create(&input);
179
180 if (!glslang_shader_preprocess(shader, &input))
181 {
182 fprintf(stderr, "GLSL preprocessing failed\n");
183 fprintf(stderr, "\n%s", glslang_shader_get_info_log(shader));
184 fprintf(stderr, "\n%s", glslang_shader_get_info_debug_log(shader));
185 printShaderSource(input.code);
186 return 0;
187 }
188
189 if (!glslang_shader_parse(shader, &input))
190 {
191 fprintf(stderr, "GLSL parsing failed\n");
192 fprintf(stderr, "\n%s", glslang_shader_get_info_log(shader));
193 fprintf(stderr, "\n%s", glslang_shader_get_info_debug_log(shader));
194 printShaderSource(glslang_shader_get_preprocessed_code(shader));
195 return 0;
196 }
197
198 glslang_program_t* program = glslang_program_create();
199 glslang_program_add_shader(program, shader);
200
201 if (!glslang_program_link(program, GLSLANG_MSG_SPV_RULES_BIT | GLSLANG_MSG_VULKAN_RULES_BIT))
202 {
203 fprintf(stderr, "GLSL linking failed\n");
204 fprintf(stderr, "\n%s", glslang_program_get_info_log(program));
205 fprintf(stderr, "\n%s", glslang_program_get_info_debug_log(program));
206 return 0;
207 }
208
209 glslang_program_SPIRV_generate(program, stage);
210
211 shaderModule.SPIRV.resize(glslang_program_SPIRV_get_size(program));
212 glslang_program_SPIRV_get(program, shaderModule.SPIRV.data());
213
214 {
215 const char* spirv_messages =
216 glslang_program_SPIRV_get_messages(program);

Callers 1

compileShaderFileFunction · 0.85

Calls 1

printShaderSourceFunction · 0.85

Tested by

no test coverage detected