|
34 | 34 | #endif |
35 | 35 |
|
36 | 36 | #include "SPIRV/GlslangToSpv.h" |
37 | | -#include "SPIRV/SPVRemapper.h" |
38 | 37 | #include "glslang/Public/ResourceLimits.h" |
39 | 38 |
|
40 | 39 | #if MSL_GCC || MSL_CLANG |
@@ -344,30 +343,26 @@ void Compiler::process(SpirV& spirv, int processOptions) |
344 | 343 | if (processOptions == 0) |
345 | 344 | return; |
346 | 345 |
|
347 | | - std::uint32_t options = 0; |
| 346 | + // NOTE: We have some known invalid code, such as missing bindings. Therefore we need to skip |
| 347 | + // validation. |
| 348 | + spv_optimizer_options options = spvOptimizerOptionsCreate(); |
| 349 | + spvOptimizerOptionsSetRunValidator(options, false); |
| 350 | + spvtools::Optimizer optimizer(SPV_ENV_VULKAN_1_0); |
348 | 351 | if (processOptions & RemapVariables) |
349 | | - options |= spv::spirvbin_t::MAP_ALL; |
| 352 | + optimizer.RegisterPass(spvtools::CreateCanonicalizeIdsPass()); |
350 | 353 | if (processOptions & DeadCodeElimination) |
351 | | - options |= spv::spirvbin_t::DCE_ALL; |
| 354 | + { |
| 355 | + optimizer.RegisterPass(spvtools::CreateEliminateDeadFunctionsPass()); |
| 356 | + optimizer.RegisterPass(spvtools::CreateEliminateDeadConstantPass()); |
| 357 | + } |
352 | 358 | if (processOptions & StripDebug) |
353 | | - options |= spv::spirvbin_t::STRIP; |
354 | | - |
355 | | - spv::spirvbin_t remapper; |
356 | | - remapper.remap(spirv, options); |
357 | | - |
| 359 | + optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass()); |
358 | 360 | if (processOptions & Optimize) |
359 | | - { |
360 | | - // NOTE: We have some known invalid code, such as missing bindings. Therefore we need to |
361 | | - // skip validation. |
362 | | - spv_optimizer_options options = spvOptimizerOptionsCreate(); |
363 | | - spvOptimizerOptionsSetRunValidator(options, false); |
364 | | - spvtools::Optimizer optimizer(SPV_ENV_VULKAN_1_0); |
365 | 361 | optimizer.RegisterPerformancePasses(); |
366 | | - SpirV optimizedSpirV; |
367 | | - if (optimizer.Run(spirv.data(), spirv.size(), &optimizedSpirV, options)) |
368 | | - spirv = std::move(optimizedSpirV); |
369 | | - spvOptimizerOptionsDestroy(options); |
370 | | - } |
| 362 | + SpirV optimizedSpirV; |
| 363 | + if (optimizer.Run(spirv.data(), spirv.size(), &optimizedSpirV, options)) |
| 364 | + spirv = std::move(optimizedSpirV); |
| 365 | + spvOptimizerOptionsDestroy(options); |
371 | 366 | } |
372 | 367 |
|
373 | 368 | } // namespace msl |
0 commit comments