From 983d9f0040b021f4fd75dd6a35de237e7ee4aac4 Mon Sep 17 00:00:00 2001 From: jacob Date: Fri, 27 Feb 2026 12:28:49 -0800 Subject: [PATCH] don't transition simultaneous-access rt/dt on discard --- src/gpu/gpu_dx12/gpu_dx12_core.c | 49 +++++++++++++------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/src/gpu/gpu_dx12/gpu_dx12_core.c b/src/gpu/gpu_dx12/gpu_dx12_core.c index f72db1a9..16b96a49 100644 --- a/src/gpu/gpu_dx12/gpu_dx12_core.c +++ b/src/gpu/gpu_dx12/gpu_dx12_core.c @@ -1312,7 +1312,6 @@ G_ResourceHandle G_PushResource(G_ArenaHandle arena_handle, G_CommandListHandle //- Initialize d3d resource desc D3D12_BARRIER_LAYOUT d3d_begin_layout = D3D12_BARRIER_LAYOUT_UNDEFINED; - D3D12_BARRIER_LAYOUT d3d_end_layout = D3D12_BARRIER_LAYOUT_UNDEFINED; D3D12_CLEAR_VALUE clear_value = Zi; D3D12_RESOURCE_DESC1 d3d_desc = Zi; if (is_buffer) @@ -1357,8 +1356,7 @@ G_ResourceHandle G_PushResource(G_ArenaHandle arena_handle, G_CommandListHandle clear_value.Format = d3d_desc.Format; d3d_begin_layout = G_D12_BarrierLayoutFromLayout(desc.texture.initial_layout); - d3d_end_layout = d3d_begin_layout; - if (!AnyBit(flags, G_ResourceFlag_ZeroMemory)) + if (!AnyBit(flags, G_ResourceFlag_ZeroMemory) && !AnyBit(d3d_desc.Flags, D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS)) { if (AnyBit(d3d_desc.Flags, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)) { @@ -1501,37 +1499,30 @@ G_ResourceHandle G_PushResource(G_ArenaHandle arena_handle, G_CommandListHandle // Queue initial Rtv/Dsv discard if (!AnyBit(flags, G_ResourceFlag_ZeroMemory)) { + if (AnyBit(d3d_desc.Flags, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)) + { + G_D12_Cmd *cmd = G_D12_PushCmd(cl); + cmd->kind = G_D12_CmdKind_Discard; + cmd->discard.resource = resource; + } + if (d3d_begin_layout == D3D12_BARRIER_LAYOUT_RENDER_TARGET) { - { - G_D12_Cmd *cmd = G_D12_PushCmd(cl); - cmd->kind = G_D12_CmdKind_Discard; - cmd->discard.resource = resource; - } - { - G_MemoryLayoutSync( - cl_handle, G_D12_MakeHandle(G_ResourceHandle, resource), - G_Stage_RenderTarget, G_Access_RenderTargetWrite, - G_Stage_All, G_Access_All, - desc.texture.initial_layout - ); - } + G_MemoryLayoutSync( + cl_handle, G_D12_MakeHandle(G_ResourceHandle, resource), + G_Stage_RenderTarget, G_Access_RenderTargetWrite, + G_Stage_All, G_Access_All, + desc.texture.initial_layout + ); } else if (d3d_begin_layout == D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE) { - { - G_D12_Cmd *cmd = G_D12_PushCmd(cl); - cmd->kind = G_D12_CmdKind_Discard; - cmd->discard.resource = resource; - } - { - G_MemoryLayoutSync( - cl_handle, G_D12_MakeHandle(G_ResourceHandle, resource), - G_Stage_DepthStencil, G_Access_DepthStencilWrite, - G_Stage_All, G_Access_All, - desc.texture.initial_layout - ); - } + G_MemoryLayoutSync( + cl_handle, G_D12_MakeHandle(G_ResourceHandle, resource), + G_Stage_DepthStencil, G_Access_DepthStencilWrite, + G_Stage_All, G_Access_All, + desc.texture.initial_layout + ); } }