MCPcopy Create free account
hub / github.com/ZDoom/gzdoom / Create

Method Create

libraries/ZVulkan/src/vulkanbuilders.cpp:250–323  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

248};
249
250std::unique_ptr<VulkanShader> ShaderBuilder::Create(const char *shadername, VulkanDevice *device)
251{
252 EShLanguage stage = (EShLanguage)this->stage;
253
254 std::vector<const char*> namesC, sourcesC;
255 std::vector<int> lengthsC;
256 for (const auto& s : sources)
257 {
258 namesC.push_back(s.first.c_str());
259 sourcesC.push_back(s.second.c_str());
260 lengthsC.push_back((int)s.second.size());
261 }
262
263 TBuiltInResource resources = DefaultTBuiltInResource;
264
265 glslang::TShader shader(stage);
266 shader.setStringsWithLengthsAndNames(sourcesC.data(), lengthsC.data(), namesC.data(), (int)sources.size());
267 shader.setEnvInput(glslang::EShSourceGlsl, stage, glslang::EShClientVulkan, 100);
268 if (device->Instance->ApiVersion >= VK_API_VERSION_1_2)
269 {
270 shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_2);
271 shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_4);
272 }
273 else
274 {
275 shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_0);
276 shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0);
277 }
278
279 ShaderBuilderIncluderImpl includer(this);
280 bool compileSuccess = shader.parse(&resources, 110, false, EShMsgVulkanRules, includer);
281 if (!compileSuccess)
282 {
283 VulkanError((std::string("Shader compile failed: ") + shader.getInfoLog()).c_str());
284 }
285
286 glslang::TProgram program;
287 program.addShader(&shader);
288 bool linkSuccess = program.link(EShMsgDefault);
289 if (!linkSuccess)
290 {
291 VulkanError((std::string("Shader link failed: ") + program.getInfoLog()).c_str());
292 }
293
294 glslang::TIntermediate *intermediate = program.getIntermediate(stage);
295 if (!intermediate)
296 {
297 VulkanError("Internal shader compiler error");
298 }
299
300 glslang::SpvOptions spvOptions;
301 spvOptions.generateDebugInfo = false;
302 spvOptions.disableOptimizer = false;
303 spvOptions.optimizeSize = true;
304
305 std::vector<unsigned int> spirv;
306 spv::SpvBuildLogger logger;
307 glslang::GlslangToSpv(*intermediate, spirv, &logger, &spvOptions);

Callers 1

ExecuteMethod · 0.45

Calls 15

VulkanErrorFunction · 0.85
GlslangToSpvFunction · 0.85
vmaCreateImageFunction · 0.85
CheckVulkanErrorFunction · 0.85
vmaGetAllocationInfoFunction · 0.85
vmaCreateBufferFunction · 0.85
c_strMethod · 0.80
setEnvInputMethod · 0.80
setEnvClientMethod · 0.80
setEnvTargetMethod · 0.80

Tested by

no test coverage detected