[SM68] Add feature flag for SampleCmpBias/Grad and StartInstance/VertexLocation (#6164)
New feature flag ShaderFeatureInfo_SampleCmpGradientOrBias = 0x80000000 and ShaderFeatureInfo_ExtendedCommandInfo = 0x100000000 were added. They will be set when SampleCmpBias/Grad startInstance/VertexLocation exists. --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Родитель
6d8645f985
Коммит
ae9b762a30
|
@ -1890,7 +1890,10 @@ 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 uint64_t ShaderFeatureInfo_ExtendedCommandInfo = 0x100000000;
|
||||
|
||||
const unsigned ShaderFeatureInfoCount = 33;
|
||||
|
||||
// DxilSubobjectType must match D3D12_STATE_SUBOBJECT_TYPE, with
|
||||
// certain values reserved, since they cannot be used from Dxil.
|
||||
|
|
|
@ -197,6 +197,14 @@ public:
|
|||
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; }
|
||||
|
||||
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
|
||||
|
@ -276,8 +284,10 @@ private:
|
|||
|
||||
// SM 6.8+
|
||||
unsigned m_bWaveMMA : 1; // SHADER_FEATURE_WAVE_MMA
|
||||
|
||||
uint32_t m_align1 : 27; // align to 64 bit.
|
||||
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.
|
||||
};
|
||||
|
||||
} // namespace hlsl
|
||||
|
|
|
@ -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_align1(0) {
|
||||
m_bWaveMMA(false), m_bSampleCmpGradientOrBias(false),
|
||||
m_bExtendedCommandInfo(false), m_align1(0) {
|
||||
// Silence unused field warnings
|
||||
(void)m_align1;
|
||||
}
|
||||
|
@ -125,6 +126,14 @@ uint64_t ShaderFlags::GetFeatureInfo() const {
|
|||
|
||||
Flags |= m_bWaveMMA ? hlsl::DXIL::ShaderFeatureInfo_WaveMMA : 0;
|
||||
|
||||
Flags |= m_bSampleCmpGradientOrBias
|
||||
? hlsl::DXIL::ShaderFeatureInfo_SampleCmpGradientOrBias
|
||||
: 0;
|
||||
|
||||
Flags |= m_bExtendedCommandInfo
|
||||
? hlsl::DXIL::ShaderFeatureInfo_ExtendedCommandInfo
|
||||
: 0;
|
||||
|
||||
return Flags;
|
||||
}
|
||||
|
||||
|
@ -185,6 +194,8 @@ uint64_t ShaderFlags::GetShaderFlagsRawForCollection() {
|
|||
Flags.SetAdvancedTextureOps(true);
|
||||
Flags.SetWriteableMSAATextures(true);
|
||||
Flags.SetWaveMMA(true);
|
||||
Flags.SetSampleCmpGradientOrBias(true);
|
||||
Flags.SetExtendedCommandInfo(true);
|
||||
return Flags.GetShaderFlagsRaw();
|
||||
}
|
||||
|
||||
|
@ -414,8 +425,10 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,
|
|||
|
||||
bool hasAdvancedTextureOps = false;
|
||||
bool hasWriteableMSAATextures = false;
|
||||
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;
|
||||
|
@ -590,6 +603,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 +611,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:
|
||||
|
@ -644,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;
|
||||
|
@ -761,10 +780,11 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,
|
|||
flag.SetAdvancedTextureOps(hasAdvancedTextureOps);
|
||||
flag.SetWriteableMSAATextures(hasWriteableMSAATextures);
|
||||
flag.SetWaveMMA(hasWaveMMA);
|
||||
|
||||
// Only bother setting the flag when there are UAVs.
|
||||
flag.SetResMayNotAlias(canSetResMayNotAlias && hasUAVs &&
|
||||
!M->GetResMayAlias());
|
||||
flag.SetSampleCmpGradientOrBias(hasSampleCmpGradientOrBias);
|
||||
flag.SetExtendedCommandInfo(hasExtendedCommandInfo);
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// RUN: %dxc -Tps_6_8 %s | FileCheck %s
|
||||
|
||||
// CHECK: SampleCmp with gradient or bias
|
||||
SamplerComparisonState samp1;
|
||||
Texture1D<float4> tex1d;
|
||||
Texture1DArray<float4> tex1d_array;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// RUN: %dxc -Tps_6_8 %s | FileCheck %s
|
||||
|
||||
// CHECK: SampleCmp with gradient or bias
|
||||
SamplerComparisonState samp1;
|
||||
|
||||
Texture2D<float4> tex2d;
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
// 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
|
||||
// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s
|
||||
// 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:
|
||||
// CHECK-NEXT: Tiled resources
|
||||
// CMPBG-NEXT: SampleCmp with gradient or bias
|
||||
|
||||
// CHECK:define void @[[name:[a-z_]+]]()
|
||||
|
||||
|
@ -16,7 +17,10 @@
|
|||
// CHECK: ![[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}
|
||||
|
||||
Texture2D T2D;
|
||||
SamplerState S;
|
||||
|
|
|
@ -1,27 +1,32 @@
|
|||
// 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
|
||||
// RUN: %dxilver 1.8 | %dxc -E test_samplecg -T ps_6_8 %s | FileCheck %s
|
||||
// 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_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: SampleCmp with gradient or bias
|
||||
|
||||
// CHECK:define void @[[name:[a-z_]+]]()
|
||||
|
||||
// CHECK: !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}
|
||||
|
||||
Texture2D T2D;
|
||||
SamplerState S;
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
// RUN: %dxc -E main -T vs_6_8 %s | FileCheck %s
|
||||
|
||||
// CHECK: Extended command info
|
||||
// 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, 274877906944 = SampleCmpGradientOrBias
|
||||
// CHECK: ![[extAttr]] = !{i32 0, i64 274877906944}
|
||||
|
||||
float4 main(int loc : SV_StartVertexLocation
|
||||
, uint loc2 : SV_StartInstanceLocation
|
||||
) : SV_Position
|
||||
|
|
|
@ -347,6 +347,8 @@ PCSTR g_pFeatureInfoNames[] = {
|
|||
"64-bit Atomics on Heap Resources",
|
||||
"Advanced Texture Ops",
|
||||
"Writeable MSAA Textures",
|
||||
"SampleCmp with gradient or bias",
|
||||
"Extended command info",
|
||||
};
|
||||
static_assert(_countof(g_pFeatureInfoNames) == ShaderFeatureInfoCount,
|
||||
"g_pFeatureInfoNames needs to be updated");
|
||||
|
|
Загрузка…
Ссылка в новой задаче