vk: Enable optimization passes for generated SPIRV

This commit is contained in:
kd-11 2020-05-03 15:18:54 +03:00 committed by kd-11
parent f72385b00c
commit a0f63a31e3
1 changed files with 9 additions and 1 deletions

View File

@ -12,6 +12,7 @@
#include "restore_new.h" #include "restore_new.h"
#include "SPIRV/GlslangToSpv.h" #include "SPIRV/GlslangToSpv.h"
#include "define_new_memleakdetect.h" #include "define_new_memleakdetect.h"
#include "spirv-tools/optimizer.hpp"
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(pop) #pragma warning(pop)
#else #else
@ -177,9 +178,16 @@ namespace vk
if (success) if (success)
{ {
glslang::SpvOptions options; glslang::SpvOptions options;
options.disableOptimizer = false; options.disableOptimizer = true;
options.optimizeSize = true; options.optimizeSize = true;
glslang::GlslangToSpv(*program.getIntermediate(lang), spv, &options); glslang::GlslangToSpv(*program.getIntermediate(lang), spv, &options);
// Now we optimize
spvtools::Optimizer optimizer(SPV_ENV_VULKAN_1_0);
optimizer.RegisterPass(spvtools::CreateUnifyConstantPass()); // Remove duplicate constants
optimizer.RegisterPass(spvtools::CreateMergeReturnPass()); // Huge savings in vertex interpreter and likely normal vertex shaders
optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); // Remove dead code
optimizer.Run(spv.data(), spv.size(), &spv);
} }
} }
else else