From 0e1f6455389c1dded424ac70e5cede8402ee0f60 Mon Sep 17 00:00:00 2001 From: niki Date: Sun, 29 Jan 2023 01:14:06 +0100 Subject: [PATCH] vulkan: clean up glslang objects properly By using smart pointers we don't want to worry about explicitely deleting. --- src/modules/graphics/vulkan/Shader.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/modules/graphics/vulkan/Shader.cpp b/src/modules/graphics/vulkan/Shader.cpp index 4a33e87d7..ee596114c 100644 --- a/src/modules/graphics/vulkan/Shader.cpp +++ b/src/modules/graphics/vulkan/Shader.cpp @@ -734,9 +734,9 @@ void Shader::compileShaders() using namespace glslang; using namespace spirv_cross; - std::vector glslangShaders; + std::vector> glslangShaders; - auto program = new TProgram(); + auto program = std::make_unique(); device = vgfx->getDevice(); @@ -753,7 +753,7 @@ void Shader::compileShaders() isCompute = true; auto glslangShaderStage = getGlslShaderType(stage); - auto tshader = new TShader(glslangShaderStage); + auto tshader = std::make_unique(glslangShaderStage); tshader->setEnvInput(EShSourceGlsl, glslangShaderStage, EShClientVulkan, 450); tshader->setEnvClient(EShClientVulkan, EShTargetVulkan_1_2); @@ -779,14 +779,18 @@ void Shader::compileShaders() if (!tshader->parse(&defaultTBuiltInResource, defaultVersion, defaultProfile, forceDefault, forwardCompat, EShMsgSuppressWarnings)) { - const char *msg1 = tshader->getInfoLog(); - const char *msg2 = tshader->getInfoDebugLog(); + const char *stageName = "unknown"; + ShaderStage::getConstant(stage, stageName); - throw love::Exception("error while parsing shader"); + std::string err = "Error parsing " + std::string(stageName) + " shader:\n\n" + + std::string(tshader->getInfoLog()) + "\n" + + std::string(tshader->getInfoDebugLog()); + + throw love::Exception("%s", err.c_str()); } - program->addShader(tshader); - glslangShaders.push_back(tshader); + program->addShader(tshader.get()); + glslangShaders.push_back(std::move(tshader)); } if (!program->link(EShMsgDefault)) @@ -996,10 +1000,6 @@ void Shader::compileShaders() shaderStages.push_back(shaderStageInfo); } - - delete program; - for (auto shader : glslangShaders) - delete shader; } void Shader::createDescriptorSetLayout()