From a0f63a31e32be0982c3e1283b1079b3fe93f61b0 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 3 May 2020 15:18:54 +0300 Subject: [PATCH] vk: Enable optimization passes for generated SPIRV --- rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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