swr/rasterizer: do not mark tiles dirty until actually rendered
[mesa.git] / src / gallium / drivers / swr / rasterizer / core / backend_sample.cpp
index 04e5e3d58bc23454f438d862a2ae4bb58a39cd32..39e078bf401726d12c7cc7900d7cea242e013d44 100644 (file)
@@ -65,6 +65,8 @@ void BackendSampleRate(DRAW_CONTEXT*        pDC,
                        state.colorHottileEnable,
                        renderBuffers);
 
+    bool isTileDirty = false;
+
     RDTSC_END(pDC->pContext->pBucketMgr, BESetup, 0);
 
     psContext.vY.UL     = _simd_add_ps(vULOffsetsY, _simd_set1_ps(static_cast<float>(y)));
@@ -211,6 +213,11 @@ void BackendSampleRate(DRAW_CONTEXT*        pDC,
 
                     vCoverageMask = _simd_castsi_ps(psContext.activeMask);
 
+                    if (_simd_movemask_ps(vCoverageMask))
+                    {
+                        isTileDirty = true;
+                    }
+
                     // late-Z
                     if (!T::bCanEarlyZ)
                     {
@@ -319,6 +326,11 @@ void BackendSampleRate(DRAW_CONTEXT*        pDC,
         psContext.vY.center = _simd_add_ps(psContext.vY.center, dy);
     }
 
+    if (isTileDirty)
+    {
+        SetRenderHotTilesDirty(pDC, renderBuffers);
+    }
+
     RDTSC_END(pDC->pContext->pBucketMgr, BESampleRateBackend, 0);
 }