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.
This commit is contained in:
baldurk
2018-03-05 12:38:34 +00:00
parent 6c6d136d14
commit 75ce866a2e
+1 -13
View File
@@ -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),