Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SM68] Add feature flag for SampleCmpBias/Grad and StartInstance/VertexLocation #6164

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion include/dxc/DXIL/DxilConstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
10 changes: 9 additions & 1 deletion include/dxc/DXIL/DxilShaderFlags.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
12 changes: 10 additions & 2 deletions lib/DXIL/DxilShaderFlags.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -185,6 +189,7 @@ uint64_t ShaderFlags::GetShaderFlagsRawForCollection() {
Flags.SetAdvancedTextureOps(true);
Flags.SetWriteableMSAATextures(true);
Flags.SetWaveMMA(true);
Flags.SetSampleCmpGradientOrBias(true);
return Flags.GetShaderFlagsRaw();
}

Expand Down Expand Up @@ -414,6 +419,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,

bool hasAdvancedTextureOps = false;
bool hasWriteableMSAATextures = false;
bool hasSampleCmpGradientOrBias = false;

bool hasWaveMMA = false;

Expand Down Expand Up @@ -590,13 +596,15 @@ 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:
case DXIL::OpCode::SampleCmp:
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:
Expand Down Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// RUN: %dxc -Tps_6_8 %s | FileCheck %s

// CHECK: SampleCmpGradientOrBias
SamplerComparisonState samp1;
Texture1D<float4> tex1d;
Texture1DArray<float4> tex1d_array;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// RUN: %dxc -Tps_6_8 %s | FileCheck %s

// CHECK: SampleCmpGradientOrBias
SamplerComparisonState samp1;

Texture2D<float4> tex2d;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
1 change: 1 addition & 0 deletions tools/clang/tools/dxcompiler/dxcdisassembler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
Loading