diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2019-11-14 04:14:39 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2019-11-14 04:14:39 +0000 |
| commit | 16da454e746a5d1490eb4a83e0fff8276e397990 (patch) | |
| tree | 54b89216e1f85c4aa9bd8a60383d6de2ecacf03f /Graphics/GLSLTools | |
| parent | Added HLSLSemantic member to LayoutElement struct (API Version 240042) (diff) | |
| download | DiligentCore-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.cpp | 15 |
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); + } } } |
