+static void
+swr_UpdateStats(HANDLE hPrivateContext, const SWR_STATS *pStats)
+{
+ swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
+
+ if (!pDC)
+ return;
+
+ struct swr_query_result *pqr = pDC->pStats;
+
+ SWR_STATS *pSwrStats = &pqr->core;
+
+ pSwrStats->DepthPassCount += pStats->DepthPassCount;
+ pSwrStats->PsInvocations += pStats->PsInvocations;
+ pSwrStats->CsInvocations += pStats->CsInvocations;
+}
+
+static void
+swr_UpdateStatsFE(HANDLE hPrivateContext, const SWR_STATS_FE *pStats)
+{
+ swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
+
+ if (!pDC)
+ return;
+
+ struct swr_query_result *pqr = pDC->pStats;
+
+ SWR_STATS_FE *pSwrStats = &pqr->coreFE;
+ p_atomic_add(&pSwrStats->IaVertices, pStats->IaVertices);
+ p_atomic_add(&pSwrStats->IaPrimitives, pStats->IaPrimitives);
+ p_atomic_add(&pSwrStats->VsInvocations, pStats->VsInvocations);
+ p_atomic_add(&pSwrStats->HsInvocations, pStats->HsInvocations);
+ p_atomic_add(&pSwrStats->DsInvocations, pStats->DsInvocations);
+ p_atomic_add(&pSwrStats->GsInvocations, pStats->GsInvocations);
+ p_atomic_add(&pSwrStats->CInvocations, pStats->CInvocations);
+ p_atomic_add(&pSwrStats->CPrimitives, pStats->CPrimitives);
+ p_atomic_add(&pSwrStats->GsPrimitives, pStats->GsPrimitives);
+
+ for (unsigned i = 0; i < 4; i++) {
+ p_atomic_add(&pSwrStats->SoPrimStorageNeeded[i],
+ pStats->SoPrimStorageNeeded[i]);
+ p_atomic_add(&pSwrStats->SoNumPrimsWritten[i],
+ pStats->SoNumPrimsWritten[i]);
+ }
+}
+