mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-23 14:15:42 +00:00
Fix segfault if allocatedPrograms vector is deleted before shutdown
This commit is contained in:
@@ -34,8 +34,8 @@
|
||||
#include "3rdparty/glslang/glslang/Public/ShaderLang.h"
|
||||
|
||||
static bool inited = false;
|
||||
std::vector<glslang::TShader *> allocatedShaders;
|
||||
std::vector<glslang::TProgram *> allocatedPrograms;
|
||||
std::vector<glslang::TShader *> *allocatedShaders = NULL;
|
||||
std::vector<glslang::TProgram *> *allocatedPrograms = NULL;
|
||||
|
||||
void InitSPIRVCompiler()
|
||||
{
|
||||
@@ -43,6 +43,9 @@ void InitSPIRVCompiler()
|
||||
{
|
||||
glslang::InitializeProcess();
|
||||
inited = true;
|
||||
|
||||
allocatedPrograms = new std::vector<glslang::TProgram *>;
|
||||
allocatedShaders = new std::vector<glslang::TShader *>;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,14 +54,17 @@ void ShutdownSPIRVCompiler()
|
||||
if(inited)
|
||||
{
|
||||
// programs must be deleted before shaders
|
||||
for(glslang::TProgram *program : allocatedPrograms)
|
||||
for(glslang::TProgram *program : *allocatedPrograms)
|
||||
delete program;
|
||||
|
||||
for(glslang::TShader *shader : allocatedShaders)
|
||||
for(glslang::TShader *shader : *allocatedShaders)
|
||||
delete shader;
|
||||
|
||||
allocatedPrograms.clear();
|
||||
allocatedShaders.clear();
|
||||
allocatedPrograms->clear();
|
||||
allocatedShaders->clear();
|
||||
|
||||
SAFE_DELETE(allocatedPrograms);
|
||||
SAFE_DELETE(allocatedShaders);
|
||||
|
||||
glslang::FinalizeProcess();
|
||||
}
|
||||
|
||||
@@ -222,8 +222,8 @@ string CompileSPIRV(const SPIRVCompilationSettings &settings,
|
||||
return errors;
|
||||
}
|
||||
|
||||
extern std::vector<glslang::TShader *> allocatedShaders;
|
||||
extern std::vector<glslang::TProgram *> allocatedPrograms;
|
||||
extern std::vector<glslang::TShader *> *allocatedShaders;
|
||||
extern std::vector<glslang::TProgram *> *allocatedPrograms;
|
||||
|
||||
glslang::TShader *CompileShaderForReflection(SPIRVShaderStage stage,
|
||||
const std::vector<std::string> &sources)
|
||||
@@ -241,7 +241,7 @@ glslang::TShader *CompileShaderForReflection(SPIRVShaderStage stage,
|
||||
|
||||
if(shader->parse(&DefaultResources, 100, false, EShMsgRelaxedErrors))
|
||||
{
|
||||
allocatedShaders.push_back(shader);
|
||||
allocatedShaders->push_back(shader);
|
||||
return shader;
|
||||
}
|
||||
else
|
||||
@@ -267,7 +267,7 @@ glslang::TProgram *LinkProgramForReflection(const std::vector<glslang::TShader *
|
||||
program->buildReflection(EShReflectionStrictArraySuffix | EShReflectionBasicArraySuffix |
|
||||
EShReflectionIntermediateIO | EShReflectionSeparateBuffers |
|
||||
EShReflectionAllBlockVariables | EShReflectionUnwrapIOBlocks);
|
||||
allocatedPrograms.push_back(program);
|
||||
allocatedPrograms->push_back(program);
|
||||
return program;
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user