From 33f1e79c50bb75f496dc3cad0bebbebacd390ab3 Mon Sep 17 00:00:00 2001 From: azhirnov Date: Tue, 8 Sep 2020 22:20:39 +0300 Subject: removed StripReflectInfoPass2 - changes will be added to spirv-tools --- .../GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp index 6ca51b1e..65150c48 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp @@ -39,7 +39,7 @@ #if !DILIGENT_NO_HLSL -# include "SPIRVUtils.hpp" +# include "spirv-tools/optimizer.hpp" #endif namespace Diligent @@ -129,12 +129,25 @@ RenderPassDesc PipelineStateVkImpl::GetImplicitRenderPassDesc( return RPDesc; } -#if DILIGENT_NO_HLSL static std::vector StripReflection(const std::vector& OriginalSPIRV) { +#if DILIGENT_NO_HLSL return OriginalSPIRV; -} +#else + std::vector StrippedSPIRV; + spvtools::Optimizer SpirvOptimizer(SPV_ENV_VULKAN_1_0); + // Decorations defined in SPV_GOOGLE_hlsl_functionality1 are the only instructions + // removed by strip-reflect-info pass. SPIRV offsets become INVALID after this operation. + SpirvOptimizer.RegisterPass(spvtools::CreateStripReflectInfoPass()); + auto res = SpirvOptimizer.Run(OriginalSPIRV.data(), OriginalSPIRV.size(), &StrippedSPIRV); + if (!res) + { + // Optimized SPIRV may be invalid + StrippedSPIRV.clear(); + } + return StrippedSPIRV; #endif +} PipelineStateVkImpl::PipelineStateVkImpl(IReferenceCounters* pRefCounters, RenderDeviceVkImpl* pDeviceVk, -- cgit v1.2.3