swr/rast: Binner fixes for viewport index offset handling
authorTim Rowley <timothy.o.rowley@intel.com>
Wed, 29 Nov 2017 16:46:49 +0000 (10:46 -0600)
committerTim Rowley <timothy.o.rowley@intel.com>
Fri, 15 Dec 2017 16:55:19 +0000 (10:55 -0600)
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/rasterizer/core/binner.cpp
src/gallium/drivers/swr/rasterizer/core/clip.h

index 9d1f0d8799482711fd1fef108211d01138870b9a..52375f8956c634963d402043dc6f2642ca47dc97 100644 (file)
@@ -470,6 +470,10 @@ void SIMDCALL BinTrianglesImpl(
         typename SIMD_T::Integer vClearMask = SIMD_T::cmplt_epi32(vpai, vNumViewports);
         viewportIdx = SIMD_T::and_si(vClearMask, vpai);
     }
+    else
+    {
+        viewportIdx = vpai;
+    }
 
     if (feState.vpTransformDisable)
     {
@@ -1326,6 +1330,10 @@ void BinPointsImpl(
         typename SIMD_T::Integer vClearMask = SIMD_T::cmplt_epi32(vpai, vNumViewports);
         viewportIdx = SIMD_T::and_si(vClearMask, vpai);
     }
+    else
+    {
+        viewportIdx = vpai;
+    }
 
     if (!feState.vpTransformDisable)
     {
@@ -1647,7 +1655,6 @@ void SIMDCALL BinLinesImpl(
     if (state.backendState.readViewportArrayIndex)
     {
         pa.Assemble(VERTEX_SGV_SLOT, vpiAttrib);
-
         vpai = SIMD_T::castps_si(vpiAttrib[0][VERTEX_SGV_VAI_COMP]);
     }
 
index 0d3d78057ff29df57d445cc33df878203aa07f71..9d8bbc19e63d1d243eca37a54ae439b93a4b5e54 100644 (file)
@@ -694,7 +694,6 @@ public:
         if (state.backendState.readViewportArrayIndex)
         {
             pa.Assemble(VERTEX_SGV_SLOT, vpiAttrib);
-
             vpai = SIMD_T::castps_si(vpiAttrib[0][VERTEX_SGV_VAI_COMP]);
         }
 
@@ -707,6 +706,10 @@ public:
             typename SIMD_T::Integer vClearMask = SIMD_T::cmplt_epi32(vpai, vNumViewports);
             viewportIdx = SIMD_T::and_si(vClearMask, vpai);
         }
+        else
+        {
+            viewportIdx = vpai;
+        }
 
         ComputeClipCodes(prim, viewportIdx);