From: Jeff Bolz Date: Fri, 7 Jun 2019 19:42:08 +0000 (-0500) Subject: Use spvValidatorOptionsSetBeforeHlslLegalization for pre-legalized HLSL X-Git-Tag: upstream/11.4.0~472^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fd556e32b31ec352641205a52cf8769c3af40413;p=platform%2Fupstream%2Fglslang.git Use spvValidatorOptionsSetBeforeHlslLegalization for pre-legalized HLSL --- diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 7eba1b6..76140a9 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -8090,11 +8090,14 @@ void GlslangToSpv(const TIntermediate& intermediate, std::vector& #if ENABLE_OPT // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan // eg. forward and remove memory writes of opaque types. - if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer) + bool prelegalization = intermediate.getSource() == EShSourceHlsl; + if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer) { SpirvToolsLegalize(intermediate, spirv, logger, options); + prelegalization = false; + } if (options->validate) - SpirvToolsValidate(intermediate, spirv, logger); + SpirvToolsValidate(intermediate, spirv, logger, prelegalization); if (options->disassemble) SpirvToolsDisassemble(std::cout, spirv); diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index db26d59..698f154 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -103,7 +103,7 @@ void SpirvToolsDisassemble(std::ostream& out, const std::vector& s // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger* logger) + spv::SpvBuildLogger* logger, bool prelegalization) { // validate spv_context context = spvContextCreate(MapToSpirvToolsEnv(intermediate.getSpv(), logger)); @@ -111,6 +111,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector< spv_diagnostic diagnostic = nullptr; spv_validator_options options = spvValidatorOptionsCreate(); spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets()); + spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization); spvValidateWithOptions(context, options, &binary, &diagnostic); // report diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 7e49ae0..cf8fc85 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -66,7 +66,7 @@ void SpirvToolsDisassemble(std::ostream& out, const std::vector& s // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger*); + spv::SpvBuildLogger*, bool prelegalization); // Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of // legalizing HLSL SPIR-V. diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out index c9633cd..517b48c 100644 --- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out +++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out @@ -135,7 +135,6 @@ local_size = (256, 1, 1) 0:? 'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer) 0:? 'dispatchId' ( in 3-component vector of uint GlobalInvocationID) -Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 63