swr/rast: Be more explicit when fetching next component
authorGeorge Kyriazis <george.kyriazis@intel.com>
Wed, 7 Feb 2018 07:02:00 +0000 (01:02 -0600)
committerGeorge Kyriazis <george.kyriazis@intel.com>
Fri, 16 Feb 2018 16:54:01 +0000 (10:54 -0600)
Use a new function to denote that we want to get offset to next component
and hide the fact that GEP is used underneath.

Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h

index 86fdfca392fa832d834b9a3f334d4a97214d101e..f7d0402a3d411c5a702b54e8b9cecf56011dd328 100644 (file)
@@ -129,6 +129,11 @@ namespace SwrJit
         return vResult;
     }
 
+    Value* Builder::OFFSET_TO_NEXT_COMPONENT(Value* base, Constant *offset)
+    {
+        return GEP(base, offset);
+    }
+
     //////////////////////////////////////////////////////////////////////////
     /// @brief Generate a masked gather operation in LLVM IR.  If not  
     /// supported on the underlying platform, emulate it with loads
@@ -396,7 +401,7 @@ namespace SwrJit
             if (info.numComps > 2)
             {
                 // offset base to the next components(zw) in the vertex to gather
-                pSrcBase = GEP(pSrcBase, C((char)4));
+                pSrcBase = OFFSET_TO_NEXT_COMPONENT(pSrcBase, C((intptr_t)4));
 
                 vGatherResult[1] = GATHERPS(vGatherMaskedVal, pSrcBase, byteOffsets, vMask);
                 // e.g. result of second 8x32bit integer gather for 16bit components
@@ -429,7 +434,7 @@ namespace SwrJit
                 vGatherComponents[swizzleIndex] = GATHERPS(vGatherComponents[swizzleIndex], pSrcBase, byteOffsets, vMask);
 
                 // offset base to the next component to gather
-                pSrcBase = GEP(pSrcBase, C((char)4));
+                pSrcBase = OFFSET_TO_NEXT_COMPONENT(pSrcBase, C((intptr_t)4));
             }
         }
         break;
@@ -474,7 +479,7 @@ namespace SwrJit
             if (info.numComps > 2)
             {
                 // offset base to the next components(zw) in the vertex to gather
-                pSrcBase = GEP(pSrcBase, C((char)4));
+                pSrcBase = OFFSET_TO_NEXT_COMPONENT(pSrcBase, C((intptr_t)4));
 
                 vGatherResult[1] = GATHERDD(vGatherMaskedVal, pSrcBase, byteOffsets, vMask);
                 // e.g. result of second 8x32bit integer gather for 16bit components
@@ -508,7 +513,7 @@ namespace SwrJit
                 vGatherComponents[swizzleIndex] = GATHERDD(vGatherComponents[swizzleIndex], pSrcBase, byteOffsets, vMask);
 
                 // offset base to the next component to gather
-                pSrcBase = GEP(pSrcBase, C((char)4));
+                pSrcBase = OFFSET_TO_NEXT_COMPONENT(pSrcBase, C((intptr_t)4));
             }
         }
         break;
index f31cb4abae08f9a7af5d168479b9882cb78a7240..4e78098022fd4ff342aae91a6fbbe941b6a65b01 100644 (file)
@@ -44,6 +44,8 @@ Value *MASKLOADD(Value* src, Value* mask);
 void Gather4(const SWR_FORMAT format, Value* pSrcBase, Value* byteOffsets,
     Value* mask, Value* vGatherComponents[], bool bPackedOutput);
 
+virtual Value* OFFSET_TO_NEXT_COMPONENT(Value* base, Constant *offset);
+
 virtual Value *GATHERPS(Value *src, Value *pBase, Value *indices, Value *mask, uint8_t scale = 1);
 Value *GATHERPS_16(Value *src, Value *pBase, Value *indices, Value *mask, uint8_t scale = 1);