[Mesa-dev] [PATCH 08/11] swr: [rasterizer core] centroid correction

Tim Rowley timothy.o.rowley at intel.com
Mon Jul 18 17:10:17 UTC 2016


---
 .../drivers/swr/rasterizer/core/backend.cpp        | 26 ++++++++++++++--------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/swr/rasterizer/core/backend.cpp b/src/gallium/drivers/swr/rasterizer/core/backend.cpp
index b492810..5d83baf 100644
--- a/src/gallium/drivers/swr/rasterizer/core/backend.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/backend.cpp
@@ -513,15 +513,12 @@ void BackendSingleSample(DRAW_CONTEXT *pDC, uint32_t workerId, uint32_t x, uint3
                 RDTSC_START(BEBarycentric);
                 CalcPixelBarycentrics(coeffs, psContext);
 
-                if(T::bCentroidPos)
-                {
-                    // for 1x case, centroid is pixel center
-                    psContext.vX.centroid = psContext.vX.center;
-                    psContext.vY.centroid = psContext.vY.center;
-                    psContext.vI.centroid = psContext.vI.center;
-                    psContext.vJ.centroid = psContext.vJ.center;
-                    psContext.vOneOverW.centroid = psContext.vOneOverW.center;
-                }
+                // for 1x case, centroid is pixel center
+                psContext.vX.centroid = psContext.vX.center;
+                psContext.vY.centroid = psContext.vY.center;
+                psContext.vI.centroid = psContext.vI.center;
+                psContext.vJ.centroid = psContext.vJ.center;
+                psContext.vOneOverW.centroid = psContext.vOneOverW.center;
 
                 // interpolate and quantize z
                 psContext.vZ = vplaneps(coeffs.vZa, coeffs.vZb, coeffs.vZc, psContext.vI.center, psContext.vJ.center);
@@ -715,6 +712,11 @@ void BackendSampleRate(DRAW_CONTEXT *pDC, uint32_t workerId, uint32_t x, uint32_
                 CalcCentroidBarycentrics(coeffs, psContext, psContext.vX.UL, psContext.vY.UL);
                 RDTSC_STOP(BEBarycentric, 0, 0);
             }
+            else
+            {
+                psContext.vX.centroid = psContext.vX.sample;
+                psContext.vY.centroid = psContext.vY.sample;
+            }
 
             for(uint32_t sample = 0; sample < T::MultisampleT::numSamples; sample++)
             {
@@ -925,9 +927,15 @@ void BackendPixelRate(DRAW_CONTEXT *pDC, uint32_t workerId, uint32_t x, uint32_t
                     psContext.vX.centroid = _simd_add_ps(psContext.vX.UL, _simd_set1_ps(0.5f));
                     psContext.vY.centroid = _simd_add_ps(psContext.vY.UL, _simd_set1_ps(0.5f));
                 }
+
                 CalcCentroidBarycentrics(coeffs, psContext, psContext.vX.UL, psContext.vY.UL);
                 RDTSC_STOP(BEBarycentric, 0, 0);
             }
+            else
+            {
+                psContext.vX.centroid = _simd_add_ps(psContext.vX.UL, _simd_set1_ps(0.5f));
+                psContext.vY.centroid = _simd_add_ps(psContext.vY.UL, _simd_set1_ps(0.5f));
+            }
 
             if(T::bForcedSampleCount)
             {
-- 
1.9.1



More information about the mesa-dev mailing list