mirror of
https://github.com/love2d/love.git
synced 2026-08-19 20:19:42 +02:00
vulkan: clean up glslang objects properly
By using smart pointers we don't want to worry about explicitely deleting.
This commit is contained in:
@@ -734,9 +734,9 @@ void Shader::compileShaders()
|
|||||||
using namespace glslang;
|
using namespace glslang;
|
||||||
using namespace spirv_cross;
|
using namespace spirv_cross;
|
||||||
|
|
||||||
std::vector<TShader*> glslangShaders;
|
std::vector<std::unique_ptr<TShader>> glslangShaders;
|
||||||
|
|
||||||
auto program = new TProgram();
|
auto program = std::make_unique<TProgram>();
|
||||||
|
|
||||||
device = vgfx->getDevice();
|
device = vgfx->getDevice();
|
||||||
|
|
||||||
@@ -753,7 +753,7 @@ void Shader::compileShaders()
|
|||||||
isCompute = true;
|
isCompute = true;
|
||||||
|
|
||||||
auto glslangShaderStage = getGlslShaderType(stage);
|
auto glslangShaderStage = getGlslShaderType(stage);
|
||||||
auto tshader = new TShader(glslangShaderStage);
|
auto tshader = std::make_unique<TShader>(glslangShaderStage);
|
||||||
|
|
||||||
tshader->setEnvInput(EShSourceGlsl, glslangShaderStage, EShClientVulkan, 450);
|
tshader->setEnvInput(EShSourceGlsl, glslangShaderStage, EShClientVulkan, 450);
|
||||||
tshader->setEnvClient(EShClientVulkan, EShTargetVulkan_1_2);
|
tshader->setEnvClient(EShClientVulkan, EShTargetVulkan_1_2);
|
||||||
@@ -779,14 +779,18 @@ void Shader::compileShaders()
|
|||||||
|
|
||||||
if (!tshader->parse(&defaultTBuiltInResource, defaultVersion, defaultProfile, forceDefault, forwardCompat, EShMsgSuppressWarnings))
|
if (!tshader->parse(&defaultTBuiltInResource, defaultVersion, defaultProfile, forceDefault, forwardCompat, EShMsgSuppressWarnings))
|
||||||
{
|
{
|
||||||
const char *msg1 = tshader->getInfoLog();
|
const char *stageName = "unknown";
|
||||||
const char *msg2 = tshader->getInfoDebugLog();
|
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);
|
program->addShader(tshader.get());
|
||||||
glslangShaders.push_back(tshader);
|
glslangShaders.push_back(std::move(tshader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!program->link(EShMsgDefault))
|
if (!program->link(EShMsgDefault))
|
||||||
@@ -996,10 +1000,6 @@ void Shader::compileShaders()
|
|||||||
|
|
||||||
shaderStages.push_back(shaderStageInfo);
|
shaderStages.push_back(shaderStageInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete program;
|
|
||||||
for (auto shader : glslangShaders)
|
|
||||||
delete shader;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shader::createDescriptorSetLayout()
|
void Shader::createDescriptorSetLayout()
|
||||||
|
|||||||
Reference in New Issue
Block a user