From ad5ea9973dc13019c42413d6b9802ad9caa718b6 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 22 Sep 2026 13:31:32 +0100 Subject: [PATCH] D3D12 ApplyState when IB/VB resource is missing set NULL resource - IB is always set to NULL if the application didn't set a valid IB - VB is set to NULL if the application VB resource does not resolve --- renderdoc/driver/d3d12/d3d12_state.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_state.cpp b/renderdoc/driver/d3d12/d3d12_state.cpp index d3d305e9e..9ec2e8e10 100644 --- a/renderdoc/driver/d3d12/d3d12_state.cpp +++ b/renderdoc/driver/d3d12/d3d12_state.cpp @@ -309,6 +309,13 @@ void D3D12RenderState::ApplyState(WrappedID3D12Device *dev, ID3D12GraphicsComman cmd->IASetIndexBuffer(&ib); } + else + { + D3D12_INDEX_BUFFER_VIEW nullIB; + nullIB.BufferLocation = 0; + nullIB.SizeInBytes = 0; + cmd->IASetIndexBuffer(&nullIB); + } for(size_t i = 0; i < vbuffers.size(); i++) { @@ -320,14 +327,17 @@ void D3D12RenderState::ApplyState(WrappedID3D12Device *dev, ID3D12GraphicsComman ID3D12Resource *res = GetResourceManager()->GetResAs(vbuffers[i].buf); if(res) vb.BufferLocation = res->GetGPUVirtualAddress() + vbuffers[i].offs; - else - vb.BufferLocation = 0; vb.StrideInBytes = vbuffers[i].stride; vb.SizeInBytes = vbuffers[i].size; cmd->IASetVertexBuffers((UINT)i, 1, &vb); } + else + { + vb.SizeInBytes = 0; + cmd->IASetVertexBuffers((UINT)i, 1, &vb); + } } if(!rts.empty() || dsv.GetResResourceId() != ResourceId())