summaryrefslogtreecommitdiffstats
path: root/Graphics/GLSLTools
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-11-14 04:14:39 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-11-14 04:14:39 +0000
commit16da454e746a5d1490eb4a83e0fff8276e397990 (patch)
tree54b89216e1f85c4aa9bd8a60383d6de2ecacf03f /Graphics/GLSLTools
parentAdded HLSLSemantic member to LayoutElement struct (API Version 240042) (diff)
downloadDiligentCore-16da454e746a5d1490eb4a83e0fff8276e397990.tar.gz
DiligentCore-16da454e746a5d1490eb4a83e0fff8276e397990.zip
Vulkan backend: added SPIRV optimization when compiling from glsl
Diffstat (limited to 'Graphics/GLSLTools')
-rw-r--r--Graphics/GLSLTools/src/SPIRVUtils.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/Graphics/GLSLTools/src/SPIRVUtils.cpp b/Graphics/GLSLTools/src/SPIRVUtils.cpp
index c7af932b..2fb68209 100644
--- a/Graphics/GLSLTools/src/SPIRVUtils.cpp
+++ b/Graphics/GLSLTools/src/SPIRVUtils.cpp
@@ -518,7 +518,20 @@ std::vector<unsigned int> GLSLtoSPIRV(const SHADER_TYPE ShaderType, const char*
int Lenghts[] = {SourceCodeLen};
Shader.setStringsWithLengths(ShaderStrings, Lenghts, 1);
- return CompileShaderInternal(Shader, messages, nullptr, ShaderSource, SourceCodeLen, ppCompilerOutput);
+ auto SPIRV = CompileShaderInternal(Shader, messages, nullptr, ShaderSource, SourceCodeLen, ppCompilerOutput);
+
+ spvtools::Optimizer SpirvOptimizer(SPV_ENV_VULKAN_1_0);
+ SpirvOptimizer.RegisterPerformancePasses();
+ std::vector<uint32_t> OptimizedSPIRV;
+ if (SpirvOptimizer.Run(SPIRV.data(), SPIRV.size(), &OptimizedSPIRV))
+ {
+ return std::move(OptimizedSPIRV);
+ }
+ else
+ {
+ LOG_ERROR("Failed to optimize SPIR-V.");
+ return std::move(SPIRV);
+ }
}
}