From 6d18a4030f2a910e341f0121fc9ba0aecf425ce7 Mon Sep 17 00:00:00 2001 From: Steven Perron Date: Tue, 11 Feb 2025 14:14:48 -0500 Subject: [PATCH] [SPIRV] Stop running ReplaceInvalidOpcPass That pass was intended to remove derivative instructions used in non-fragment shaders. Now they are available in more places because of new extensions. In general, it is better practice to issue an error if they are used in an place they are not allowed. Fixes https://github.com/microsoft/DirectXShaderCompiler/issues/7086 --- tools/clang/lib/SPIRV/SpirvEmitter.cpp | 1 - .../CodeGenSPIRV/texture.calculate.lod.compute.linear.hlsl | 3 ++- .../CodeGenSPIRV/texture.calculate.lod.compute.quad.hlsl | 3 ++- .../texture.calculate.lod.unclamped.compute.linear.hlsl | 3 ++- .../texture.calculate.lod.unclamped.compute.quad.hlsl | 3 ++- .../test/CodeGenSPIRV/texture.sample.compute.linear.hlsl | 3 ++- .../test/CodeGenSPIRV/texture.sample.compute.quad.hlsl | 3 ++- .../CodeGenSPIRV/texture.samplebias.compute.linear.hlsl | 7 ++++--- .../test/CodeGenSPIRV/texture.samplebias.compute.quad.hlsl | 3 ++- .../CodeGenSPIRV/texture.samplecmp.compute.linear.hlsl | 3 ++- .../test/CodeGenSPIRV/texture.samplecmp.compute.quad.hlsl | 3 ++- 11 files changed, 22 insertions(+), 13 deletions(-) diff --git a/tools/clang/lib/SPIRV/SpirvEmitter.cpp b/tools/clang/lib/SPIRV/SpirvEmitter.cpp index f48245ac38..825f55d091 100644 --- a/tools/clang/lib/SPIRV/SpirvEmitter.cpp +++ b/tools/clang/lib/SPIRV/SpirvEmitter.cpp @@ -15218,7 +15218,6 @@ bool SpirvEmitter::spirvToolsLegalize(std::vector *mod, optimizer.RegisterPass( spvtools::CreateAggressiveDCEPass(spirvOptions.preserveInterface)); } - optimizer.RegisterPass(spvtools::CreateReplaceInvalidOpcodePass()); optimizer.RegisterPass(spvtools::CreateCompactIdsPass()); optimizer.RegisterPass(spvtools::CreateSpreadVolatileSemanticsPass()); if (spirvOptions.fixFuncCallArguments) { diff --git a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.linear.hlsl b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.linear.hlsl index cb2e8c5916..31d3b2e2cb 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.linear.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.linear.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s --check-prefix=CHECK +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s --check-prefix=CHECK // CHECK: OpCapability ComputeDerivativeGroupLinearKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -19,4 +20,4 @@ void main(uint3 id : SV_GroupThreadID) //CHECK-NEXT: [[query1:%[0-9]+]] = OpImageQueryLod %v2float [[si1]] %float_0_5 //CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1]] 0 o[0] = t1.CalculateLevelOfDetail(ss, 0.5); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.quad.hlsl b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.quad.hlsl index 84cdcdf22a..8b4e41b768 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.quad.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.compute.quad.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupQuadsKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -19,4 +20,4 @@ void main(uint3 id : SV_GroupThreadID) //CHECK-NEXT: [[query1:%[0-9]+]] = OpImageQueryLod %v2float [[si1]] %float_0_5 //CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1]] 0 o[0] = t1.CalculateLevelOfDetail(ss, 0.5); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.linear.hlsl b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.linear.hlsl index efbb0d82a5..12990fbf2f 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.linear.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.linear.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupLinearKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -19,4 +20,4 @@ void main(uint3 id : SV_GroupThreadID) //CHECK-NEXT: [[query1:%[0-9]+]] = OpImageQueryLod %v2float [[si1]] %float_0_5 //CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1]] 1 o[0] = t1.CalculateLevelOfDetailUnclamped(ss, 0.5); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.quad.hlsl b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.quad.hlsl index 10de7c2583..13f3060818 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.quad.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.calculate.lod.unclamped.compute.quad.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupQuadsKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -19,4 +20,4 @@ void main(uint3 id : SV_GroupThreadID) //CHECK-NEXT: [[query1:%[0-9]+]] = OpImageQueryLod %v2float [[si1]] %float_0_5 //CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1]] 1 o[0] = t1.CalculateLevelOfDetailUnclamped(ss, 0.5); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.sample.compute.linear.hlsl b/tools/clang/test/CodeGenSPIRV/texture.sample.compute.linear.hlsl index 0d56a3a904..d15fcda2e9 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.sample.compute.linear.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.sample.compute.linear.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupLinearKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -18,4 +19,4 @@ void main(uint3 id : SV_GroupThreadID) // CHECK-NEXT: [[sampledImg:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1]] [[ss]] // CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg]] %float_1 None o[0] = t1.Sample(ss, 1); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.sample.compute.quad.hlsl b/tools/clang/test/CodeGenSPIRV/texture.sample.compute.quad.hlsl index bbedad9c66..51bcf9c850 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.sample.compute.quad.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.sample.compute.quad.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupQuadsKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -18,4 +19,4 @@ void main(uint3 id : SV_GroupThreadID) // CHECK-NEXT: [[sampledImg:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1]] [[ss]] // CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg]] %float_1 None o[0] = t1.Sample(ss, 1); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.linear.hlsl b/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.linear.hlsl index 2ce02bb9e4..1cd9965a89 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.linear.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.linear.hlsl @@ -1,4 +1,4 @@ -// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupLinearKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -13,9 +13,10 @@ Texture1D t1; [numthreads(8,1,1)] void main(uint3 id : SV_GroupThreadID) { + Texture1D local_texture = t1; // CHECK: [[t1:%[0-9]+]] = OpLoad %type_1d_image %t1 // CHECK-NEXT: [[ss:%[0-9]+]] = OpLoad %type_sampler %ss // CHECK-NEXT: [[sampledImg:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1]] [[ss]] // CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg]] %float_1 Bias %float_0_5 - o[0] = t1.SampleBias(ss, 1, 0.5); -} \ No newline at end of file + o[0] = local_texture.SampleBias(ss, 1, 0.5); +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.quad.hlsl b/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.quad.hlsl index a64e6f84db..aaa8d281ea 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.quad.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.samplebias.compute.quad.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupQuadsKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -18,4 +19,4 @@ void main(uint3 id : SV_GroupThreadID) // CHECK-NEXT: [[sampledImg:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1]] [[ss]] // CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg]] %float_1 Bias %float_0_5 o[0] = t1.SampleBias(ss, 1, 0.5); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.linear.hlsl b/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.linear.hlsl index a5fca1ada7..367a84db45 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.linear.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.linear.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupLinearKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -18,4 +19,4 @@ void main(uint3 id : SV_GroupThreadID) // CHECK-NEXT: [[sampledImg:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1]] [[scs]] // CHECK-NEXT: {{%[0-9]+}} = OpImageSampleDrefImplicitLod %float [[sampledImg]] %float_1 %float_0_5 o[0] = t1.SampleCmp(scs, 1, 0.5); -} \ No newline at end of file +} diff --git a/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.quad.hlsl b/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.quad.hlsl index 550c80f413..96b0c356e5 100644 --- a/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.quad.hlsl +++ b/tools/clang/test/CodeGenSPIRV/texture.samplecmp.compute.quad.hlsl @@ -1,4 +1,5 @@ // RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives -fcgl %s -spirv 2>&1 | FileCheck %s +// RUN: %dxc -T cs_6_6 -E main -fspv-extension=SPV_NV_compute_shader_derivatives %s -spirv 2>&1 | FileCheck %s // CHECK: OpCapability ComputeDerivativeGroupQuadsKHR // CHECK: OpExtension "SPV_NV_compute_shader_derivatives" @@ -18,4 +19,4 @@ void main(uint3 id : SV_GroupThreadID) // CHECK-NEXT: [[sampledImg:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1]] [[scs]] // CHECK-NEXT: {{%[0-9]+}} = OpImageSampleDrefImplicitLod %float [[sampledImg]] %float_1 %float_0_5 o[0] = t1.SampleCmp(scs, 1, 0.5); -} \ No newline at end of file +}