From 7ded578285caf55198f855bed196f2845921f21b Mon Sep 17 00:00:00 2001 From: Deric Cheung Date: Thu, 18 Jun 2026 11:37:43 -0700 Subject: [PATCH] Set sampler feedback shader flag for DXIL ops Detect sampler feedback DXIL ops when collecting shader flags and gate the SamplerFeedback requirement by validator version >= 1.9. Add an HLSL FileCheck test covering both enabled and gated behavior. Assisted-by: Claude Opus 4.8 --- lib/DXIL/DxilShaderFlags.cpp | 7 +++++++ .../FeedbackTexture/feedback_shader_flag.hlsl | 20 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 tools/clang/test/HLSLFileCheck/hlsl/objects/FeedbackTexture/feedback_shader_flag.hlsl diff --git a/lib/DXIL/DxilShaderFlags.cpp b/lib/DXIL/DxilShaderFlags.cpp index 71c7305b68..90b7d033b5 100644 --- a/lib/DXIL/DxilShaderFlags.cpp +++ b/lib/DXIL/DxilShaderFlags.cpp @@ -586,6 +586,8 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, continue; if (hlsl::OP::IsDxilOpWave(dxilOp)) hasWaveOps = true; + if (hlsl::OP::IsDxilOpFeedback(dxilOp)) + hasSamplerFeedback = true; switch (dxilOp) { case DXIL::OpCode::CheckAccessFullyMapped: hasCheckAccessFully = true; @@ -821,6 +823,11 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, // Before validator version 1.8, RequiresGroup flag did not exist. requiresGroup = false; } + if (hasSamplerFeedback && + DXIL::CompareVersions(valMajor, valMinor, 1, 9) < 0) { + // Before validator version 1.9, SamplerFeedback flag was not set. + hasSamplerFeedback = false; + } flag.SetEnableDoublePrecision(hasDouble); flag.SetStencilRef(hasStencilRef); diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/FeedbackTexture/feedback_shader_flag.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/FeedbackTexture/feedback_shader_flag.hlsl new file mode 100644 index 0000000000..e3c7378a6b --- /dev/null +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/FeedbackTexture/feedback_shader_flag.hlsl @@ -0,0 +1,20 @@ +// RUN: %dxc -E main -T ps_6_5 %s | FileCheck %s -check-prefix=FLAG +// RUN: %dxc -E main -T ps_6_5 -validator-version 1.8 %s | FileCheck %s -check-prefix=NOFLAG + +// Verify that the Sampler feedback shader feature flag is set when any +// sampler feedback instruction is used, and that it is gated off for +// validator versions before 1.9. + +// FLAG: Note: shader requires additional functionality: +// FLAG: Sampler feedback + +// NOFLAG-NOT: Sampler feedback + +FeedbackTexture2D feedbackMinMip; +Texture2D texture2D; +SamplerState samp; + +float main() : SV_Target { + feedbackMinMip.WriteSamplerFeedback(texture2D, samp, (float2)0); + return 0; +}