From dc1a7c57db7cbe54ee9cc81c97f64744b61bf78d Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Fri, 29 Nov 2024 15:52:19 +0000 Subject: [PATCH] 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 --- .../driver/shaders/dxbc/dxbc_container.cpp | 40 ++++++++++++++++++- .../driver/shaders/dxbc/dxbc_container.h | 13 ++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp index fe6d40da0..f4ac5cd8b 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp @@ -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) { diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.h b/renderdoc/driver/shaders/dxbc/dxbc_container.h index e50487482..1f47c0d46 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.h @@ -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);