@@ -2570,8 +2570,7 @@ struct D3D12PixelHistoryDiscardedFragmentsCallback : D3D12PixelHistoryCallback
25702570
25712571 for (uint32_t i = 0 ; i < primIds.size (); i++)
25722572 {
2573- uint32_t queryId = (uint32_t )m_OcclusionQueries.size ();
2574- cmd->BeginQuery (m_OcclusionQueryHeap, D3D12_QUERY_TYPE_OCCLUSION, queryId);
2573+ cmd->BeginQuery (m_OcclusionQueryHeap, D3D12_QUERY_TYPE_OCCLUSION, m_CurQuery);
25752574
25762575 uint32_t primId = primIds[i];
25772576 ActionDescription action = *m_pDevice->GetAction (eid);
@@ -2584,9 +2583,10 @@ struct D3D12PixelHistoryDiscardedFragmentsCallback : D3D12PixelHistoryCallback
25842583 // TODO replay with a dummy index buffer so that all primitives other than the target
25852584 // one are degenerate - that way the vertex index etc is still the same as it should be.
25862585 m_pDevice->ReplayDraw (cmd, action);
2587- cmd->EndQuery (m_OcclusionQueryHeap, D3D12_QUERY_TYPE_OCCLUSION, queryId );
2586+ cmd->EndQuery (m_OcclusionQueryHeap, D3D12_QUERY_TYPE_OCCLUSION, m_CurQuery );
25882587
2589- m_OcclusionQueries[make_rdcpair<uint32_t , uint32_t >(eid, primId)] = queryId;
2588+ m_OcclusionQueries[make_rdcpair<uint32_t , uint32_t >(eid, primId)] = m_CurQuery;
2589+ m_CurQuery++;
25902590 }
25912591
25922592 state = prevState;
@@ -2608,7 +2608,7 @@ struct D3D12PixelHistoryDiscardedFragmentsCallback : D3D12PixelHistoryCallback
26082608 D3D12_RESOURCE_DESC bufDesc;
26092609 bufDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
26102610 bufDesc.Alignment = 0 ;
2611- bufDesc.Width = sizeof (uint64_t ) * m_OcclusionQueries. size () ;
2611+ bufDesc.Width = sizeof (uint64_t ) * m_CurQuery ;
26122612 bufDesc.Height = 1 ;
26132613 bufDesc.DepthOrArraySize = 1 ;
26142614 bufDesc.MipLevels = 1 ;
@@ -2633,8 +2633,8 @@ struct D3D12PixelHistoryDiscardedFragmentsCallback : D3D12PixelHistoryCallback
26332633 if (!list)
26342634 return ;
26352635
2636- list->ResolveQueryData (m_OcclusionQueryHeap, D3D12_QUERY_TYPE_OCCLUSION, 0 ,
2637- (UINT)m_OcclusionQueries. size (), readbackBuf, 0 );
2636+ list->ResolveQueryData (m_OcclusionQueryHeap, D3D12_QUERY_TYPE_OCCLUSION, 0 , m_CurQuery,
2637+ readbackBuf, 0 );
26382638
26392639 list->Close ();
26402640
@@ -2655,7 +2655,7 @@ struct D3D12PixelHistoryDiscardedFragmentsCallback : D3D12PixelHistoryCallback
26552655 return ;
26562656 }
26572657
2658- m_OcclusionResults.resize (m_OcclusionQueries. size () );
2658+ m_OcclusionResults.resize (m_CurQuery );
26592659 for (size_t i = 0 ; i < m_OcclusionResults.size (); ++i)
26602660 m_OcclusionResults[i] = data[i];
26612661
@@ -2728,6 +2728,7 @@ struct D3D12PixelHistoryDiscardedFragmentsCallback : D3D12PixelHistoryCallback
27282728 }
27292729
27302730 std::map<rdcpair<uint32_t , uint32_t >, uint32_t > m_OcclusionQueries;
2731+ uint32_t m_CurQuery = 0 ;
27312732 rdcarray<uint64_t > m_OcclusionResults;
27322733
27332734 rdcarray<ID3D12PipelineState *> m_PSOsToDestroy;
0 commit comments