From 5c0dadae84577343c41849a120067f4112e155b6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 20 Aug 2020 17:09:51 +0100 Subject: [PATCH] Test that RTV descriptor copies in D3D12 are properly recorded mid-frame --- util/test/demos/d3d12/d3d12_parameter_zoo.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/util/test/demos/d3d12/d3d12_parameter_zoo.cpp b/util/test/demos/d3d12/d3d12_parameter_zoo.cpp index cc2c1cdbd..ea8006c55 100644 --- a/util/test/demos/d3d12/d3d12_parameter_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_parameter_zoo.cpp @@ -110,6 +110,10 @@ float4 main() : SV_Target0 SetBufferData(ib, D3D12_RESOURCE_STATE_COMMON, (const byte *)indices, sizeof(indices)); } + ID3D12ResourcePtr rtvtex = MakeTexture(DXGI_FORMAT_R32G32B32A32_FLOAT, 4, 4) + .RTV() + .InitialState(D3D12_RESOURCE_STATE_RENDER_TARGET); + while(Running()) { ID3D12GraphicsCommandListPtr cmd = GetCommandBuffer(); @@ -142,7 +146,22 @@ float4 main() : SV_Target0 RSSetViewport(cmd, {0.0f, 0.0f, (float)screenWidth, (float)screenHeight, 0.0f, 1.0f}); RSSetScissorRect(cmd, {0, 0, screenWidth, screenHeight}); - OMSetRenderTargets(cmd, {rtv}, {}); + // trash slots 3 and 4 + D3D12_CPU_DESCRIPTOR_HANDLE rtv3 = MakeRTV(rtvtex).CreateCPU(3); + D3D12_CPU_DESCRIPTOR_HANDLE rtv4 = MakeRTV(rtvtex).CreateCPU(4); + + // write the proper RTV to slot 3 + MakeRTV(bb).CreateCPU(3); + + // copy to slot 4 + dev->CopyDescriptorsSimple(1, rtv4, rtv3, D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + + // bind from slot 4 + cmd->OMSetRenderTargets(1, &rtv4, FALSE, NULL); + + // trash RTV slots 3 and 4 again + MakeRTV(rtvtex).CreateCPU(3); + MakeRTV(rtvtex).CreateCPU(4); setMarker(cmd, "Color Draw");