From 16da454e746a5d1490eb4a83e0fff8276e397990 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Wed, 13 Nov 2019 20:14:39 -0800 Subject: Vulkan backend: added SPIRV optimization when compiling from glsl --- Graphics/GLSLTools/src/SPIRVUtils.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'Graphics/GLSLTools') 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 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 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); + } } } -- cgit v1.2.3