Update DXIL Global Shader Flags to latest version SM6.8

For the future display any unknown global shader flags as hex value
Make sure the DXIL debugger line numbers match the disassembly output if there are unknown global shader flags
This commit is contained in:
Jake Turner
2024-12-03 06:20:36 +00:00
parent 8b3a5ee826
commit dc1a7c57db
2 changed files with 52 additions and 1 deletions
@@ -647,6 +647,35 @@ const rdcstr &DXBCContainer::GetDisassembly(bool dxcStyle)
globalFlagsString += commentString + " Raytracing tier 1.1 features\n";
if(m_GlobalFlags & GlobalShaderFlags::SamplerFeedback)
globalFlagsString += commentString + " Sampler feedback\n";
if(m_GlobalFlags & GlobalShaderFlags::AtomicInt64OnTypedResource)
globalFlagsString += commentString + " 64-bit Atomics on Typed Resources\n";
if(m_GlobalFlags & GlobalShaderFlags::AtomicInt64OnGroupShared)
globalFlagsString += commentString + " 64-bit Atomics on Group Shared\n";
if(m_GlobalFlags & GlobalShaderFlags::DerivativesInMeshAndAmpShaders)
globalFlagsString +=
commentString + " Derivatives in mesh and amplification shaders\n";
if(m_GlobalFlags & GlobalShaderFlags::ResourceDescriptorHeapIndexing)
globalFlagsString += commentString + " Resource descriptor heap indexing\n";
if(m_GlobalFlags & GlobalShaderFlags::SamplerDescriptorHeapIndexing)
globalFlagsString += commentString + " Sampler descriptor heap indexing\n";
if(m_GlobalFlags & GlobalShaderFlags::Reserved)
globalFlagsString += commentString + " Wave Matrix\n";
if(m_GlobalFlags & GlobalShaderFlags::AtomicInt64OnHeapResource)
globalFlagsString += commentString + " 64-bit Atomics on Heap Resources\n";
if(m_GlobalFlags & GlobalShaderFlags::AdvancedTextureOps)
globalFlagsString += commentString + " Advanced Texture Ops\n";
if(m_GlobalFlags & GlobalShaderFlags::WriteableMSAATextures)
globalFlagsString += commentString + " Writeable MSAA Textures\n";
if(m_GlobalFlags & GlobalShaderFlags::SampleCmpGradientOrBias)
globalFlagsString += commentString + " SampleCmp with gradient or bias\n";
if(m_GlobalFlags & GlobalShaderFlags::ShaderFeatureInfo_ExtendedCommandInfo)
globalFlagsString += commentString + " Extended command info\n";
if(m_GlobalFlags & ~GlobalShaderFlags::KNOWN_FLAGS_MASK)
globalFlagsString +=
commentString + StringFormat::Fmt(" Unknown shader flags 0x%X\n",
(uint64_t)m_GlobalFlags -
((uint64_t)m_GlobalFlags &
(uint64_t)GlobalShaderFlags::KNOWN_FLAGS_MASK));
globalFlagsString += commentString + "\n";
}
@@ -707,7 +736,16 @@ void DXBCContainer::FillTraceLineInfo(ShaderDebugTrace &trace) const
extraLines++;
if(m_GlobalFlags != GlobalShaderFlags::None)
extraLines += (uint32_t)Bits::CountOnes((uint32_t)m_GlobalFlags) + 2;
{
extraLines += 2;
uint64_t knownFlags = (uint64_t)m_GlobalFlags & (uint64_t)GlobalShaderFlags::KNOWN_FLAGS_MASK;
uint32_t upperBits = knownFlags >> 32;
uint32_t lowerBits = knownFlags & 0xFFFFFFFF;
extraLines += (uint32_t)Bits::CountOnes(upperBits);
extraLines += (uint32_t)Bits::CountOnes(lowerBits);
if(m_GlobalFlags & ~GlobalShaderFlags::KNOWN_FLAGS_MASK)
extraLines += 1;
}
if(m_DXBCByteCode)
{
@@ -133,6 +133,19 @@ enum class GlobalShaderFlags : int64_t
ShadingRate = 0x080000,
Raytracing1_1 = 0x100000,
SamplerFeedback = 0x200000,
AtomicInt64OnTypedResource = 0x400000,
AtomicInt64OnGroupShared = 0x800000,
DerivativesInMeshAndAmpShaders = 0x1000000,
ResourceDescriptorHeapIndexing = 0x2000000,
SamplerDescriptorHeapIndexing = 0x4000000,
Reserved = 0x8000000,
AtomicInt64OnHeapResource = 0x10000000,
AdvancedTextureOps = 0x20000000,
WriteableMSAATextures = 0x40000000,
SampleCmpGradientOrBias = 0x80000000,
ShaderFeatureInfo_ExtendedCommandInfo = 0x100000000,
KNOWN_FLAGS_MASK =
ShaderFeatureInfo_ExtendedCommandInfo + (ShaderFeatureInfo_ExtendedCommandInfo - 1),
};
BITMASK_OPERATORS(GlobalShaderFlags);