diff --git a/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp b/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp index 9630dd6bae..e30ccdb86d 100644 --- a/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp +++ b/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp @@ -12,6 +12,7 @@ #include "restore_new.h" #include "SPIRV/GlslangToSpv.h" #include "define_new_memleakdetect.h" +#include "spirv-tools/optimizer.hpp" #ifdef _MSC_VER #pragma warning(pop) #else @@ -177,9 +178,16 @@ namespace vk if (success) { glslang::SpvOptions options; - options.disableOptimizer = false; + options.disableOptimizer = true; options.optimizeSize = true; 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