From f1ea0386d497e68e09f7b088926ad89815563828 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 10 Apr 2026 23:20:32 +0100 Subject: [PATCH] Handle NULL descriptors in D3D12 resinfo shader debugging --- renderdoc/driver/d3d12/d3d12_shaderdebug.cpp | 30 +++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index f361c2d99..992912692 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -670,7 +670,9 @@ ShaderVariable D3D12ShaderDebug::GetResourceInfo(WrappedID3D12Device *device, { ResourceId uavId = descriptor.GetResResourceId(); ID3D12Resource *pResource = rm->GetResAs(uavId); - D3D12_RESOURCE_DESC resDesc = pResource->GetDesc(); + D3D12_RESOURCE_DESC resDesc = {}; + if(pResource) + resDesc = pResource->GetDesc(); D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = descriptor.GetUAV(); if(uavDesc.ViewDimension == D3D12_UAV_DIMENSION_UNKNOWN) @@ -779,7 +781,9 @@ ShaderVariable D3D12ShaderDebug::GetResourceInfo(WrappedID3D12Device *device, { ResourceId srvId = descriptor.GetResResourceId(); ID3D12Resource *pResource = rm->GetResAs(srvId); - D3D12_RESOURCE_DESC resDesc = pResource->GetDesc(); + D3D12_RESOURCE_DESC resDesc = {}; + if(pResource) + resDesc = pResource->GetDesc(); D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = descriptor.GetSRV(); if(srvDesc.ViewDimension == D3D12_SRV_DIMENSION_UNKNOWN) srvDesc = MakeSRVDesc(resDesc); @@ -949,7 +953,9 @@ ShaderVariable D3D12ShaderDebug::GetSampleInfo(WrappedID3D12Device *device, ResourceId srvId = descriptor.GetResResourceId(); ID3D12Resource *pResource = rm->GetResAs(srvId); - D3D12_RESOURCE_DESC resDesc = pResource->GetDesc(); + D3D12_RESOURCE_DESC resDesc = {}; + if(pResource) + resDesc = pResource->GetDesc(); D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = descriptor.GetSRV(); if(srvDesc.ViewDimension == D3D12_SRV_DIMENSION_UNKNOWN) srvDesc = MakeSRVDesc(resDesc); @@ -987,7 +993,9 @@ ShaderVariable D3D12ShaderDebug::GetRenderTargetSampleInfo(WrappedID3D12Device * res = rs.rts[0].GetResResourceId(); ID3D12Resource *pResource = rm->GetResAs(res); - D3D12_RESOURCE_DESC resDesc = pResource->GetDesc(); + D3D12_RESOURCE_DESC resDesc = {}; + if(pResource) + resDesc = pResource->GetDesc(); result.value.u32v[0] = resDesc.SampleDesc.Count; result.value.u32v[1] = 0; result.value.u32v[2] = 0; @@ -1004,7 +1012,11 @@ DXGI_FORMAT D3D12ShaderDebug::GetUAVResourceFormat(const D3D12_UNORDERED_ACCESS_ return uavDesc.Format; // Typeless UAV get format from the underlying resource - D3D12_RESOURCE_DESC resDesc = pResource->GetDesc(); + D3D12_RESOURCE_DESC resDesc = {}; + if(pResource) + resDesc = pResource->GetDesc(); + else + RDCERR("Unexpected NULL resource with unknown-format descriptor"); return resDesc.Format; } @@ -1505,7 +1517,9 @@ ShaderVariable D3D12DebugAPIWrapper::GetBufferInfo(DXBCBytecode::OperandType typ type != DXBCBytecode::TYPE_UNORDERED_ACCESS_VIEW) { ID3D12Resource *pResource = rm->GetResAs(descriptor.GetResResourceId()); - D3D12_RESOURCE_DESC resDesc = pResource->GetDesc(); + D3D12_RESOURCE_DESC resDesc = {}; + if(pResource) + resDesc = pResource->GetDesc(); D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = descriptor.GetSRV(); if(srvDesc.ViewDimension == D3D12_SRV_DIMENSION_UNKNOWN) @@ -1522,7 +1536,9 @@ ShaderVariable D3D12DebugAPIWrapper::GetBufferInfo(DXBCBytecode::OperandType typ type == DXBCBytecode::TYPE_UNORDERED_ACCESS_VIEW) { ID3D12Resource *pResource = rm->GetResAs(descriptor.GetResResourceId()); - D3D12_RESOURCE_DESC resDesc = pResource->GetDesc(); + D3D12_RESOURCE_DESC resDesc = {}; + if(pResource) + resDesc = pResource->GetDesc(); D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = descriptor.GetUAV();