From 6d89b15bc9658eeb4440a36e534824afed0ed2c8 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 16 Dec 2025 13:32:38 +1300 Subject: [PATCH] Fix D3D validation warning in ResolvePendingIndirectState() D3D12 WARNING: ID3D12Resource3::ID3D12Resource::Unmap: pWrittenRange does not point to an empty D3D12_RANGE and the heap type is D3D12_HEAP_TYPE_READBACK. Readback resources can be written by the CPU but there's not much utility. The rationale is that readback heaps are stuck in COPY_DEST state such that the GPU can never use what the CPU is writing. The range [0, 4194304) should be empty (Begin >= End). [ EXECUTION WARNING #929: UNMAP_RANGE_NOT_EMPTY] --- renderdoc/driver/d3d12/d3d12_state.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_state.cpp b/renderdoc/driver/d3d12/d3d12_state.cpp index 70d9676ea..7971a0a7b 100644 --- a/renderdoc/driver/d3d12/d3d12_state.cpp +++ b/renderdoc/driver/d3d12/d3d12_state.cpp @@ -70,7 +70,7 @@ void D3D12RenderState::ResolvePendingIndirectState(WrappedID3D12Device *device) device->DeviceWaitForIdle(); D3D12_RANGE range = {0, D3D12CommandData::m_IndirectSize}; - byte *mapPtr = NULL; + const byte *mapPtr = NULL; CHECK_HR(device, indirectState.argsBuf->Map(0, &range, (void **)&mapPtr)); if(device->HasFatalError()) @@ -79,7 +79,7 @@ void D3D12RenderState::ResolvePendingIndirectState(WrappedID3D12Device *device) WrappedID3D12CommandSignature *comSig = (WrappedID3D12CommandSignature *)indirectState.comSig; { - byte *data = mapPtr + indirectState.argsOffs; + const byte *data = mapPtr + indirectState.argsOffs; for(uint32_t argIdx = 0; argIdx < indirectState.argsToProcess; argIdx++) { @@ -203,6 +203,7 @@ void D3D12RenderState::ResolvePendingIndirectState(WrappedID3D12Device *device) } } + range.End = 0; indirectState.argsBuf->Unmap(0, &range); indirectState.argsBuf = NULL; indirectState.argsOffs = 0;