swr: [rasterizer core] Cleanup state ring arena after last draw that references it...
[mesa.git] / src / gallium / drivers / swr / rasterizer / core / threads.cpp
index ce8646fb28d0eb87c5746213efee4b4cbaf1dba7..521a306b96e0995f7e0dfc64c74313320eb44ae6 100644 (file)
@@ -287,11 +287,15 @@ INLINE void CompleteDrawContext(SWR_CONTEXT* pContext, DRAW_CONTEXT* pDC)
 
     if (result == 0)
     {
-        _ReadWriteBarrier();
-
         // Cleanup memory allocations
         pDC->pArena->Reset(true);
         pDC->pTileMgr->initialize();
+        if (pDC->cleanupState)
+        {
+            pDC->pState->pArena->Reset(true);
+        }
+
+        _ReadWriteBarrier();
 
         pContext->dcRing.Dequeue();  // Remove from tail
     }