From 7d744e67ad23b687a8e52113d151f524467a7ecb Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 19 Jan 2024 17:21:04 -0500 Subject: [PATCH 1/7] [SM68] Add feature flag for SampleCmpBias/Grad. New feature flag ShaderFeatureInfo_SampleCmpGradientOrBias = 0x80000000 was added. It will be set when SampleCmpBias/Grad exists. --- include/dxc/DXIL/DxilConstants.h | 4 +++- include/dxc/DXIL/DxilShaderFlags.h | 10 +++++++++- lib/DXIL/DxilShaderFlags.cpp | 12 ++++++++++-- .../hlsl/objects/Texture/SampleCmpBias.hlsl | 1 + .../hlsl/objects/Texture/SampleCmpGrad.hlsl | 1 + .../hlsl/objects/Texture/has_lod_clmap.hlsl | 13 +++++++++++-- .../hlsl/objects/Texture/no_lod_clmap.hlsl | 16 ++++++++++++---- tools/clang/tools/dxcompiler/dxcdisassembler.cpp | 1 + 8 files changed, 48 insertions(+), 10 deletions(-) diff --git a/include/dxc/DXIL/DxilConstants.h b/include/dxc/DXIL/DxilConstants.h index 8712b0fd9c..137c4322f2 100644 --- a/include/dxc/DXIL/DxilConstants.h +++ b/include/dxc/DXIL/DxilConstants.h @@ -1888,7 +1888,9 @@ const uint64_t ShaderFeatureInfo_WriteableMSAATextures = 0x40000000; // WaveMMA slots in between two SM 6.6 feature bits. const uint64_t ShaderFeatureInfo_WaveMMA = 0x8000000; -const unsigned ShaderFeatureInfoCount = 31; +const uint64_t ShaderFeatureInfo_SampleCmpGradientOrBias = 0x80000000; + +const unsigned ShaderFeatureInfoCount = 32; // DxilSubobjectType must match D3D12_STATE_SUBOBJECT_TYPE, with // certain values reserved, since they cannot be used from Dxil. diff --git a/include/dxc/DXIL/DxilShaderFlags.h b/include/dxc/DXIL/DxilShaderFlags.h index f02ad7062c..3d4c2cd5d0 100644 --- a/include/dxc/DXIL/DxilShaderFlags.h +++ b/include/dxc/DXIL/DxilShaderFlags.h @@ -197,6 +197,13 @@ class ShaderFlags { void SetWaveMMA(bool flag) { m_bWaveMMA = flag; } bool GetWaveMMA() const { return m_bWaveMMA; } + void SetSampleCmpGradientOrBias(bool flag) { + m_bSampleCmpGradientOrBias = flag; + } + bool GetSampleCmpGradientOrBias() const { + return m_bSampleCmpGradientOrBias; + } + private: unsigned m_bDisableOptimizations : 1; // D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION @@ -276,8 +283,9 @@ class ShaderFlags { // SM 6.8+ unsigned m_bWaveMMA : 1; // SHADER_FEATURE_WAVE_MMA + unsigned m_bSampleCmpGradientOrBias : 1; // SHADER_FEATURE_SAMPLE_CMP_GRADIENT_OR_BIAS - uint32_t m_align1 : 27; // align to 64 bit. + uint32_t m_align1 : 26; // align to 64 bit. }; } // namespace hlsl diff --git a/lib/DXIL/DxilShaderFlags.cpp b/lib/DXIL/DxilShaderFlags.cpp index 8a8fbf2598..a5a1ad0dcd 100644 --- a/lib/DXIL/DxilShaderFlags.cpp +++ b/lib/DXIL/DxilShaderFlags.cpp @@ -45,7 +45,7 @@ ShaderFlags::ShaderFlags() m_bSamplerDescriptorHeapIndexing(false), m_bAtomicInt64OnHeapResource(false), m_bResMayNotAlias(false), m_bAdvancedTextureOps(false), m_bWriteableMSAATextures(false), - m_bWaveMMA(false), m_align1(0) { + m_bWaveMMA(false), m_bSampleCmpGradientOrBias(false), m_align1(0) { // Silence unused field warnings (void)m_align1; } @@ -125,6 +125,10 @@ uint64_t ShaderFlags::GetFeatureInfo() const { Flags |= m_bWaveMMA ? hlsl::DXIL::ShaderFeatureInfo_WaveMMA : 0; + Flags |= m_bSampleCmpGradientOrBias + ? hlsl::DXIL::ShaderFeatureInfo_SampleCmpGradientOrBias + : 0; + return Flags; } @@ -185,6 +189,7 @@ uint64_t ShaderFlags::GetShaderFlagsRawForCollection() { Flags.SetAdvancedTextureOps(true); Flags.SetWriteableMSAATextures(true); Flags.SetWaveMMA(true); + Flags.SetSampleCmpGradientOrBias(true); return Flags.GetShaderFlagsRaw(); } @@ -414,6 +419,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, bool hasAdvancedTextureOps = false; bool hasWriteableMSAATextures = false; + bool hasSampleCmpGradientOrBias = false; bool hasWaveMMA = false; @@ -590,6 +596,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, case DXIL::OpCode::SampleCmpGrad: hasAdvancedTextureOps |= hasNonConstantSampleOffsets(CI); hasLodClamp |= hasSampleClamp(CI); + hasSampleCmpGradientOrBias = dxilOp == DXIL::OpCode::SampleCmpGrad; break; case DXIL::OpCode::Sample: case DXIL::OpCode::SampleBias: @@ -597,6 +604,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, case DXIL::OpCode::SampleCmpBias: hasAdvancedTextureOps |= hasNonConstantSampleOffsets(CI); hasLodClamp |= hasSampleClamp(CI); + hasSampleCmpGradientOrBias = dxilOp == DXIL::OpCode::SampleCmpBias; LLVM_FALLTHROUGH; case DXIL::OpCode::DerivFineX: case DXIL::OpCode::DerivFineY: @@ -761,7 +769,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, flag.SetAdvancedTextureOps(hasAdvancedTextureOps); flag.SetWriteableMSAATextures(hasWriteableMSAATextures); flag.SetWaveMMA(hasWaveMMA); - + flag.SetSampleCmpGradientOrBias(hasSampleCmpGradientOrBias); // Only bother setting the flag when there are UAVs. flag.SetResMayNotAlias(canSetResMayNotAlias && hasUAVs && !M->GetResMayAlias()); diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl index 2866a68770..33b5280302 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl @@ -1,5 +1,6 @@ // RUN: %dxc -Tps_6_8 %s | FileCheck %s +// CHECK: SampleCmpGradientOrBias SamplerComparisonState samp1; Texture1D tex1d; Texture1DArray tex1d_array; diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl index cb950f1f42..8deba88c09 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl @@ -1,5 +1,6 @@ // RUN: %dxc -Tps_6_8 %s | FileCheck %s +// CHECK: SampleCmpGradientOrBias SamplerComparisonState samp1; Texture2D tex2d; diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl index 9ea33462dc..38706cf6ff 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl @@ -2,22 +2,31 @@ // RUN: %dxilver 1.8 | %dxc -E test_sampleb -T ps_6_8 %s | FileCheck %s // RUN: %dxilver 1.8 | %dxc -E test_sampleg -T ps_6_8 %s | FileCheck %s // RUN: %dxilver 1.8 | %dxc -E test_samplec -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s +// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG +// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG // LOD clamp requires TiledResources feature // From DXC disassembly comment: // CHECK: Note: shader requires additional functionality: +// CMPBG: Note: shader requires additional functionality: // CHECK-NEXT: Tiled resources +// CMPBG-NEXT: Tiled resources +// CMPBG-NEXT: SampleCmpGradientOrBias // CHECK:define void @[[name:[a-z_]+]]() +// CMPBG:define void @[[name:[a-z_]+]]() // CHECK: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} +// CMPBG: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} // CHECK: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, ![[extAttr:[0-9]+]]} +// CMPBG: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, ![[extAttr:[0-9]+]]} // tag 0: ShaderFlags, 4096 = Tiled resources // CHECK: ![[extAttr]] = !{i32 0, i64 4096} +// tag 0: ShaderFlags, 137438957568 = Tiled resources and SampleCmpGradientOrBias +// CMPBG: ![[extAttr]] = !{i32 0, i64 137438957568} + Texture2D T2D; SamplerState S; diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl index 08dbe15c69..3c53092427 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl @@ -2,27 +2,35 @@ // RUN: %dxilver 1.8 | %dxc -E test_sampleb -T ps_6_8 %s | FileCheck %s // RUN: %dxilver 1.8 | %dxc -E test_sampleg -T ps_6_8 %s | FileCheck %s // RUN: %dxilver 1.8 | %dxc -E test_samplec -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s +// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG +// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG // RUN: %dxilver 1.8 | %dxc -E test_sample_zero -T ps_6_8 %s | FileCheck %s // RUN: %dxilver 1.8 | %dxc -E test_sampleb_zero -T ps_6_8 %s | FileCheck %s // RUN: %dxilver 1.8 | %dxc -E test_sampleg_zero -T ps_6_8 %s | FileCheck %s // RUN: %dxilver 1.8 | %dxc -E test_samplec_zero -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecb_zero -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecg_zero -T ps_6_8 %s | FileCheck %s +// RUN: %dxilver 1.8 | %dxc -E test_samplecb_zero -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG +// RUN: %dxilver 1.8 | %dxc -E test_samplecg_zero -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG // Make sure no tile resources when no lod clamp or clamp is 0. // CHECK-NOT: Tiled resources +// CMPBG-NOT: Tiled resources +// CMPBG: SampleCmpGradientOrBias // CHECK:define void @[[name:[a-z_]+]]() +// CMPBG:define void @[[name:[a-z_]+]]() // CHECK: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} +// CMPBG: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} // CHECK: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, null} +// CMPBG: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, ![[extAttr:[0-9]+]]} // tag 0: ShaderFlags, 4096 = Tiled resources // CHECK-NOT:!{i32 0, i64 4096} +// tag 0: ShaderFlags, 137438953472 = SampleCmpGradientOrBias +// CMPBG: ![[extAttr]] = !{i32 0, i64 137438953472} + Texture2D T2D; SamplerState S; diff --git a/tools/clang/tools/dxcompiler/dxcdisassembler.cpp b/tools/clang/tools/dxcompiler/dxcdisassembler.cpp index f05f97824d..d276cfd4e3 100644 --- a/tools/clang/tools/dxcompiler/dxcdisassembler.cpp +++ b/tools/clang/tools/dxcompiler/dxcdisassembler.cpp @@ -347,6 +347,7 @@ PCSTR g_pFeatureInfoNames[] = { "64-bit Atomics on Heap Resources", "Advanced Texture Ops", "Writeable MSAA Textures", + "SampleCmpGradientOrBias", }; static_assert(_countof(g_pFeatureInfoNames) == ShaderFeatureInfoCount, "g_pFeatureInfoNames needs to be updated"); From 07940548032b37e5aa3b5a51a16862cf9d2ac491 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 19 Jan 2024 17:55:31 -0500 Subject: [PATCH 2/7] Add ExtendedCommandInfo. --- include/dxc/DXIL/DxilConstants.h | 3 ++- include/dxc/DXIL/DxilShaderFlags.h | 7 +++++-- lib/DXIL/DxilShaderFlags.cpp | 14 +++++++++++++- .../no_in_sig_input.hlsl | 6 +++++- tools/clang/tools/dxcompiler/dxcdisassembler.cpp | 1 + 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/include/dxc/DXIL/DxilConstants.h b/include/dxc/DXIL/DxilConstants.h index 137c4322f2..893b5b00c0 100644 --- a/include/dxc/DXIL/DxilConstants.h +++ b/include/dxc/DXIL/DxilConstants.h @@ -1889,8 +1889,9 @@ const uint64_t ShaderFeatureInfo_WriteableMSAATextures = 0x40000000; const uint64_t ShaderFeatureInfo_WaveMMA = 0x8000000; const uint64_t ShaderFeatureInfo_SampleCmpGradientOrBias = 0x80000000; +const uint64_t ShaderFeatureInfo_ExtendedCommandInfo = 0x100000000; -const unsigned ShaderFeatureInfoCount = 32; +const unsigned ShaderFeatureInfoCount = 33; // DxilSubobjectType must match D3D12_STATE_SUBOBJECT_TYPE, with // certain values reserved, since they cannot be used from Dxil. diff --git a/include/dxc/DXIL/DxilShaderFlags.h b/include/dxc/DXIL/DxilShaderFlags.h index 3d4c2cd5d0..917ff261fb 100644 --- a/include/dxc/DXIL/DxilShaderFlags.h +++ b/include/dxc/DXIL/DxilShaderFlags.h @@ -204,6 +204,9 @@ class ShaderFlags { return m_bSampleCmpGradientOrBias; } + void SetExtendedCommandInfo(bool flag) { m_bExtendedCommandInfo = flag; } + bool GetExtendedCommandInfo() const { return m_bExtendedCommandInfo; } + private: unsigned m_bDisableOptimizations : 1; // D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION @@ -284,8 +287,8 @@ class ShaderFlags { // SM 6.8+ unsigned m_bWaveMMA : 1; // SHADER_FEATURE_WAVE_MMA unsigned m_bSampleCmpGradientOrBias : 1; // SHADER_FEATURE_SAMPLE_CMP_GRADIENT_OR_BIAS - - uint32_t m_align1 : 26; // align to 64 bit. + unsigned m_bExtendedCommandInfo : 1; // SHADER_FEATURE_EXTENDED_COMMAND_INFO + uint32_t m_align1 : 25; // align to 64 bit. }; } // namespace hlsl diff --git a/lib/DXIL/DxilShaderFlags.cpp b/lib/DXIL/DxilShaderFlags.cpp index a5a1ad0dcd..4f4d8ec19f 100644 --- a/lib/DXIL/DxilShaderFlags.cpp +++ b/lib/DXIL/DxilShaderFlags.cpp @@ -45,7 +45,8 @@ ShaderFlags::ShaderFlags() m_bSamplerDescriptorHeapIndexing(false), m_bAtomicInt64OnHeapResource(false), m_bResMayNotAlias(false), m_bAdvancedTextureOps(false), m_bWriteableMSAATextures(false), - m_bWaveMMA(false), m_bSampleCmpGradientOrBias(false), m_align1(0) { + m_bWaveMMA(false), m_bSampleCmpGradientOrBias(false), + m_bExtendedCommandInfo(false), m_align1(0) { // Silence unused field warnings (void)m_align1; } @@ -129,6 +130,10 @@ uint64_t ShaderFlags::GetFeatureInfo() const { ? hlsl::DXIL::ShaderFeatureInfo_SampleCmpGradientOrBias : 0; + Flags |= m_bExtendedCommandInfo + ? hlsl::DXIL::ShaderFeatureInfo_ExtendedCommandInfo + : 0; + return Flags; } @@ -190,6 +195,7 @@ uint64_t ShaderFlags::GetShaderFlagsRawForCollection() { Flags.SetWriteableMSAATextures(true); Flags.SetWaveMMA(true); Flags.SetSampleCmpGradientOrBias(true); + Flags.SetExtendedCommandInfo(true); return Flags.GetShaderFlagsRaw(); } @@ -422,6 +428,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, bool hasSampleCmpGradientOrBias = false; bool hasWaveMMA = false; + bool hasExtendedCommandInfo = false; // Try to maintain compatibility with a v1.0 validator if that's what we have. uint32_t valMajor, valMinor; @@ -652,6 +659,10 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, case DXIL::OpCode::WaveMatrix_SumAccumulate: hasWaveMMA = true; break; + case DXIL::OpCode::StartVertexLocation: + case DXIL::OpCode::StartInstanceLocation: + hasExtendedCommandInfo = true; + break; default: // Normal opcodes. break; @@ -773,6 +784,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, // Only bother setting the flag when there are UAVs. flag.SetResMayNotAlias(canSetResMayNotAlias && hasUAVs && !M->GetResMayAlias()); + flag.SetExtendedCommandInfo(hasExtendedCommandInfo); return flag; } diff --git a/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl index 41fc3c346f..4cd3e26252 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl @@ -1,15 +1,19 @@ // RUN: %dxc -E main -T vs_6_8 %s | FileCheck %s +// CHECK: ExtendedCommandInfo // CHECK: @main // CHECK: call i32 @dx.op.startInstanceLocation.i32(i32 257) // CHECK: call i32 @dx.op.startVertexLocation.i32(i32 256) // Make sure no input element is generated for the entry point. -// CHECK: !{void ()* @main, !"main", ![[SIG:[0-9]+]], null, null} +// CHECK: !{void ()* @main, !"main", ![[SIG:[0-9]+]], null, ![[extAttr:[0-9]+]]} // The input should be null // CHECK: ![[SIG]] = !{null, +// tag 0: ShaderFlags, ExtendedCommandInfo = SampleCmpGradientOrBias +// CHECK: ![[extAttr]] = !{i32 0, i64 ExtendedCommandInfo} + float4 main(int loc : SV_StartVertexLocation , uint loc2 : SV_StartInstanceLocation ) : SV_Position diff --git a/tools/clang/tools/dxcompiler/dxcdisassembler.cpp b/tools/clang/tools/dxcompiler/dxcdisassembler.cpp index d276cfd4e3..4e1760d510 100644 --- a/tools/clang/tools/dxcompiler/dxcdisassembler.cpp +++ b/tools/clang/tools/dxcompiler/dxcdisassembler.cpp @@ -348,6 +348,7 @@ PCSTR g_pFeatureInfoNames[] = { "Advanced Texture Ops", "Writeable MSAA Textures", "SampleCmpGradientOrBias", + "ExtendedCommandInfo", }; static_assert(_countof(g_pFeatureInfoNames) == ShaderFeatureInfoCount, "g_pFeatureInfoNames needs to be updated"); From 034a07caf88650c5ac6179beb402c35c9b466c02 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 19 Jan 2024 18:05:12 -0500 Subject: [PATCH 3/7] Fix test. --- .../semantics/ExtendedCommandInformation/no_in_sig_input.hlsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl index 4cd3e26252..8475dc3c8c 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl @@ -11,8 +11,8 @@ // The input should be null // CHECK: ![[SIG]] = !{null, -// tag 0: ShaderFlags, ExtendedCommandInfo = SampleCmpGradientOrBias -// CHECK: ![[extAttr]] = !{i32 0, i64 ExtendedCommandInfo} +// tag 0: ShaderFlags, 274877906944 = SampleCmpGradientOrBias +// CHECK: ![[extAttr]] = !{i32 0, i64 274877906944} float4 main(int loc : SV_StartVertexLocation , uint loc2 : SV_StartInstanceLocation From 5544b2ade6cfa1381af54f1a42ee4f6c4b41d855 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 19 Jan 2024 23:08:01 +0000 Subject: [PATCH 4/7] chore: autopublish 2024-01-19T23:08:01Z --- include/dxc/DXIL/DxilShaderFlags.h | 9 ++++----- lib/DXIL/DxilShaderFlags.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/include/dxc/DXIL/DxilShaderFlags.h b/include/dxc/DXIL/DxilShaderFlags.h index 917ff261fb..8d12330ba9 100644 --- a/include/dxc/DXIL/DxilShaderFlags.h +++ b/include/dxc/DXIL/DxilShaderFlags.h @@ -200,9 +200,7 @@ class ShaderFlags { void SetSampleCmpGradientOrBias(bool flag) { m_bSampleCmpGradientOrBias = flag; } - bool GetSampleCmpGradientOrBias() const { - return m_bSampleCmpGradientOrBias; - } + bool GetSampleCmpGradientOrBias() const { return m_bSampleCmpGradientOrBias; } void SetExtendedCommandInfo(bool flag) { m_bExtendedCommandInfo = flag; } bool GetExtendedCommandInfo() const { return m_bExtendedCommandInfo; } @@ -286,9 +284,10 @@ class ShaderFlags { // SM 6.8+ unsigned m_bWaveMMA : 1; // SHADER_FEATURE_WAVE_MMA - unsigned m_bSampleCmpGradientOrBias : 1; // SHADER_FEATURE_SAMPLE_CMP_GRADIENT_OR_BIAS + unsigned + m_bSampleCmpGradientOrBias : 1; // SHADER_FEATURE_SAMPLE_CMP_GRADIENT_OR_BIAS unsigned m_bExtendedCommandInfo : 1; // SHADER_FEATURE_EXTENDED_COMMAND_INFO - uint32_t m_align1 : 25; // align to 64 bit. + uint32_t m_align1 : 25; // align to 64 bit. }; } // namespace hlsl diff --git a/lib/DXIL/DxilShaderFlags.cpp b/lib/DXIL/DxilShaderFlags.cpp index 4f4d8ec19f..81d339f64e 100644 --- a/lib/DXIL/DxilShaderFlags.cpp +++ b/lib/DXIL/DxilShaderFlags.cpp @@ -127,12 +127,12 @@ uint64_t ShaderFlags::GetFeatureInfo() const { Flags |= m_bWaveMMA ? hlsl::DXIL::ShaderFeatureInfo_WaveMMA : 0; Flags |= m_bSampleCmpGradientOrBias - ? hlsl::DXIL::ShaderFeatureInfo_SampleCmpGradientOrBias - : 0; + ? hlsl::DXIL::ShaderFeatureInfo_SampleCmpGradientOrBias + : 0; Flags |= m_bExtendedCommandInfo - ? hlsl::DXIL::ShaderFeatureInfo_ExtendedCommandInfo - : 0; + ? hlsl::DXIL::ShaderFeatureInfo_ExtendedCommandInfo + : 0; return Flags; } From bf52667cc9e3ef2f8636b2953a77ce033443b4bc Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 19 Jan 2024 19:02:25 -0500 Subject: [PATCH 5/7] check-prefixes --- .../hlsl/objects/Texture/has_lod_clmap.hlsl | 19 +++++------- .../hlsl/objects/Texture/no_lod_clmap.hlsl | 31 +++++++++---------- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl index 38706cf6ff..6c62b0050e 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl @@ -1,28 +1,23 @@ -// RUN: %dxilver 1.8 | %dxc -E test_sample -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_sampleb -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_sampleg -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplec -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG -// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG +// RUN: %dxilver 1.8 | %dxc -E test_sample -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_sampleb -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_sampleg -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplec -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -check-prefixes=CMPBG,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s -check-prefixes=CMPBG,CHECK // LOD clamp requires TiledResources feature // From DXC disassembly comment: // CHECK: Note: shader requires additional functionality: -// CMPBG: Note: shader requires additional functionality: // CHECK-NEXT: Tiled resources -// CMPBG-NEXT: Tiled resources // CMPBG-NEXT: SampleCmpGradientOrBias // CHECK:define void @[[name:[a-z_]+]]() -// CMPBG:define void @[[name:[a-z_]+]]() // CHECK: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} -// CMPBG: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} // CHECK: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, ![[extAttr:[0-9]+]]} -// CMPBG: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, ![[extAttr:[0-9]+]]} // tag 0: ShaderFlags, 4096 = Tiled resources -// CHECK: ![[extAttr]] = !{i32 0, i64 4096} +// NRM: ![[extAttr]] = !{i32 0, i64 4096} // tag 0: ShaderFlags, 137438957568 = Tiled resources and SampleCmpGradientOrBias // CMPBG: ![[extAttr]] = !{i32 0, i64 137438957568} diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl index 3c53092427..7d2675c2d2 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl @@ -1,32 +1,29 @@ -// RUN: %dxilver 1.8 | %dxc -E test_sample -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_sampleb -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_sampleg -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplec -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG -// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG -// RUN: %dxilver 1.8 | %dxc -E test_sample_zero -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_sampleb_zero -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_sampleg_zero -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplec_zero -T ps_6_8 %s | FileCheck %s -// RUN: %dxilver 1.8 | %dxc -E test_samplecb_zero -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG -// RUN: %dxilver 1.8 | %dxc -E test_samplecg_zero -T ps_6_8 %s | FileCheck %s -check-prefix=CMPBG +// RUN: %dxilver 1.8 | %dxc -E test_sample -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_sampleb -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_sampleg -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplec -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplecb -T ps_6_8 %s | FileCheck %s -check-prefixes=CMPBG,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s -check-prefixes=CMPBG,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_sample_zero -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_sampleb_zero -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_sampleg_zero -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplec_zero -T ps_6_8 %s | FileCheck %s -check-prefixes=NRM,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplecb_zero -T ps_6_8 %s | FileCheck %s -check-prefixes=CMPBG,CHECK +// RUN: %dxilver 1.8 | %dxc -E test_samplecg_zero -T ps_6_8 %s | FileCheck %s -check-prefixes=CMPBG,CHECK // Make sure no tile resources when no lod clamp or clamp is 0. // CHECK-NOT: Tiled resources -// CMPBG-NOT: Tiled resources // CMPBG: SampleCmpGradientOrBias // CHECK:define void @[[name:[a-z_]+]]() -// CMPBG:define void @[[name:[a-z_]+]]() // CHECK: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} -// CMPBG: !dx.entryPoints = !{![[entryPoints:[0-9]+]]} -// CHECK: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, null} +// NRM: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, null} // CMPBG: ![[entryPoints]] = !{void ()* @[[name]], !"[[name]]", !{{[0-9]+}}, !{{[0-9]+}}, ![[extAttr:[0-9]+]]} // tag 0: ShaderFlags, 4096 = Tiled resources -// CHECK-NOT:!{i32 0, i64 4096} +// NRM-NOT:!{i32 0, i64 4096} // tag 0: ShaderFlags, 137438953472 = SampleCmpGradientOrBias // CMPBG: ![[extAttr]] = !{i32 0, i64 137438953472} From 8f22a43d1c8f7e0e7df86b066cad4eda92b19a97 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 19 Jan 2024 19:58:34 -0500 Subject: [PATCH 6/7] Update dump. --- .../HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl | 2 +- .../HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl | 2 +- .../HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl | 2 +- .../test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl | 2 +- .../semantics/ExtendedCommandInformation/no_in_sig_input.hlsl | 2 +- tools/clang/tools/dxcompiler/dxcdisassembler.cpp | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl index 33b5280302..69a6c2d2f3 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpBias.hlsl @@ -1,6 +1,6 @@ // RUN: %dxc -Tps_6_8 %s | FileCheck %s -// CHECK: SampleCmpGradientOrBias +// CHECK: SampleCmp with gradient or bias SamplerComparisonState samp1; Texture1D tex1d; Texture1DArray tex1d_array; diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl index 8deba88c09..17e958fff9 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/SampleCmpGrad.hlsl @@ -1,6 +1,6 @@ // RUN: %dxc -Tps_6_8 %s | FileCheck %s -// CHECK: SampleCmpGradientOrBias +// CHECK: SampleCmp with gradient or bias SamplerComparisonState samp1; Texture2D tex2d; diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl index 6c62b0050e..1cf8de22f5 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/has_lod_clmap.hlsl @@ -9,7 +9,7 @@ // From DXC disassembly comment: // CHECK: Note: shader requires additional functionality: // CHECK-NEXT: Tiled resources -// CMPBG-NEXT: SampleCmpGradientOrBias +// CMPBG-NEXT: SampleCmp with gradient or bias // CHECK:define void @[[name:[a-z_]+]]() diff --git a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl index 7d2675c2d2..0415284bb4 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/no_lod_clmap.hlsl @@ -14,7 +14,7 @@ // Make sure no tile resources when no lod clamp or clamp is 0. // CHECK-NOT: Tiled resources -// CMPBG: SampleCmpGradientOrBias +// CMPBG: SampleCmp with gradient or bias // CHECK:define void @[[name:[a-z_]+]]() diff --git a/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl b/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl index 8475dc3c8c..aa818c83a8 100644 --- a/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl +++ b/tools/clang/test/HLSLFileCheck/hlsl/semantics/ExtendedCommandInformation/no_in_sig_input.hlsl @@ -1,6 +1,6 @@ // RUN: %dxc -E main -T vs_6_8 %s | FileCheck %s -// CHECK: ExtendedCommandInfo +// CHECK: Extended command info // CHECK: @main // CHECK: call i32 @dx.op.startInstanceLocation.i32(i32 257) diff --git a/tools/clang/tools/dxcompiler/dxcdisassembler.cpp b/tools/clang/tools/dxcompiler/dxcdisassembler.cpp index 4e1760d510..e029379884 100644 --- a/tools/clang/tools/dxcompiler/dxcdisassembler.cpp +++ b/tools/clang/tools/dxcompiler/dxcdisassembler.cpp @@ -347,8 +347,8 @@ PCSTR g_pFeatureInfoNames[] = { "64-bit Atomics on Heap Resources", "Advanced Texture Ops", "Writeable MSAA Textures", - "SampleCmpGradientOrBias", - "ExtendedCommandInfo", + "SampleCmp with gradient or bias", + "Extended command info", }; static_assert(_countof(g_pFeatureInfoNames) == ShaderFeatureInfoCount, "g_pFeatureInfoNames needs to be updated"); From 79d1e17ff8db922eab2dc82e9b30289164a8ff8e Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 19 Jan 2024 21:12:49 -0500 Subject: [PATCH 7/7] Switch order. --- lib/DXIL/DxilShaderFlags.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/DXIL/DxilShaderFlags.cpp b/lib/DXIL/DxilShaderFlags.cpp index 81d339f64e..4f31b7e408 100644 --- a/lib/DXIL/DxilShaderFlags.cpp +++ b/lib/DXIL/DxilShaderFlags.cpp @@ -780,10 +780,10 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F, flag.SetAdvancedTextureOps(hasAdvancedTextureOps); flag.SetWriteableMSAATextures(hasWriteableMSAATextures); flag.SetWaveMMA(hasWaveMMA); - flag.SetSampleCmpGradientOrBias(hasSampleCmpGradientOrBias); // Only bother setting the flag when there are UAVs. flag.SetResMayNotAlias(canSetResMayNotAlias && hasUAVs && !M->GetResMayAlias()); + flag.SetSampleCmpGradientOrBias(hasSampleCmpGradientOrBias); flag.SetExtendedCommandInfo(hasExtendedCommandInfo); return flag;