From 9b43481234674422abf06eaa1387ab0aef7b322f Mon Sep 17 00:00:00 2001 From: Steve Karolewics Date: Fri, 6 Mar 2020 15:37:50 -0800 Subject: [PATCH] Prevent crash with OMSetRenderTargets in D3D12 --- renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp | 3 ++- util/test/demos/d3d12/d3d12_rendertarget_binds.cpp | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp index d026d401d..84b8f5347 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp @@ -1502,7 +1502,8 @@ void WrappedID3D12GraphicsCommandList::OMSetRenderTargets( m_ListRecord->AddChunk(scope.Get()); if(RTsSingleHandleToDescriptorRange) { - D3D12Descriptor *desc = GetWrapped(pRenderTargetDescriptors[0]); + D3D12Descriptor *desc = + (NumRenderTargetDescriptors == 0) ? NULL : GetWrapped(pRenderTargetDescriptors[0]); for(UINT i = 0; i < NumRenderTargetDescriptors; i++) { m_ListRecord->MarkResourceFrameReferenced(desc->GetHeapResourceId(), eFrameRef_Read); diff --git a/util/test/demos/d3d12/d3d12_rendertarget_binds.cpp b/util/test/demos/d3d12/d3d12_rendertarget_binds.cpp index 7e68faedb..c2e1b73f0 100644 --- a/util/test/demos/d3d12/d3d12_rendertarget_binds.cpp +++ b/util/test/demos/d3d12/d3d12_rendertarget_binds.cpp @@ -123,6 +123,10 @@ void main(out float4 out1 : SV_Target0, out float4 out2 : SV_Target1) Reset(cmd); + // Set null render targets to ensure that these work properly when attached + cmd->OMSetRenderTargets(0, NULL, FALSE, NULL); + cmd->OMSetRenderTargets(0, NULL, TRUE, NULL); + ID3D12ResourcePtr bb = StartUsingBackbuffer(cmd, D3D12_RESOURCE_STATE_RENDER_TARGET); D3D12_CPU_DESCRIPTOR_HANDLE bbrtv =