From 75ce866a2e7aefa9d1b314077971ff049afb4c6c Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 5 Mar 2018 12:38:34 +0000 Subject: [PATCH] Clear the whole stream-out buffer on D3D12 not just the first few UINTs * For some reason this seems to be necessary to get accurate counts when fetching mesh output for instanced meshes with multiple counters. --- renderdoc/driver/d3d12/d3d12_postvs.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_postvs.cpp b/renderdoc/driver/d3d12/d3d12_postvs.cpp index e839791d4..f575f0300 100644 --- a/renderdoc/driver/d3d12/d3d12_postvs.cpp +++ b/renderdoc/driver/d3d12/d3d12_postvs.cpp @@ -121,7 +121,7 @@ void D3D12Replay::CreateSOBuffers() counterDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; counterDesc.Format = DXGI_FORMAT_R32_UINT; counterDesc.Buffer.FirstElement = 0; - counterDesc.Buffer.NumElements = 4; + counterDesc.Buffer.NumElements = UINT(m_SOBufferSize / sizeof(UINT)); m_pDevice->CreateUnorderedAccessView(m_SOBuffer, NULL, &counterDesc, GetDebugManager()->GetCPUHandle(STREAM_OUT_UAV)); @@ -915,12 +915,6 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) list->ResourceBarrier(1, &sobarr); - D3D12_UNORDERED_ACCESS_VIEW_DESC counterDesc = {}; - counterDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; - counterDesc.Format = DXGI_FORMAT_R32_UINT; - counterDesc.Buffer.FirstElement = 0; - counterDesc.Buffer.NumElements = 4; - UINT zeroes[4] = {0, 0, 0, 0}; list->ClearUnorderedAccessViewUint(GetDebugManager()->GetGPUHandle(STREAM_OUT_UAV), GetDebugManager()->GetUAVClearHandle(STREAM_OUT_UAV), @@ -1073,12 +1067,6 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) list->DiscardResource(m_SOBuffer, NULL); list->ResourceBarrier(1, &sobarr); - D3D12_UNORDERED_ACCESS_VIEW_DESC counterDesc = {}; - counterDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; - counterDesc.Format = DXGI_FORMAT_R32_UINT; - counterDesc.Buffer.FirstElement = 0; - counterDesc.Buffer.NumElements = 4; - UINT zeroes[4] = {0, 0, 0, 0}; list->ClearUnorderedAccessViewUint(GetDebugManager()->GetGPUHandle(STREAM_OUT_UAV), GetDebugManager()->GetUAVClearHandle(STREAM_OUT_UAV),