Mesa (master): swr/rast: Add Builder::GetVectorType()

George Kyriazis gkyriazis at kemper.freedesktop.org
Fri May 11 16:28:42 UTC 2018


Module: Mesa
Branch: master
Commit: 8238c791dcd244c5d242b0e61cbc744ed64e5e23
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8238c791dcd244c5d242b0e61cbc744ed64e5e23

Author: George Kyriazis <george.kyriazis at intel.com>
Date:   Tue May  1 16:33:19 2018 -0500

swr/rast: Add Builder::GetVectorType()

Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com>

---

 .../drivers/swr/rasterizer/jitter/builder.cpp      | 44 ++++++++++++++++++++++
 .../drivers/swr/rasterizer/jitter/builder.h        |  1 +
 2 files changed, 45 insertions(+)

diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp
index 32487353f8..e1c5d80c80 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp
@@ -170,4 +170,48 @@ namespace SwrJit
         return (pGenIntrin->getMetadata("is_evaluate") != nullptr);
     }
 
+    //////////////////////////////////////////////////////////////////////////
+    /// @brief Packetizes the type. Assumes SOA conversion.
+    Type* Builder::GetVectorType(Type* pType)
+    {
+        if (pType->isVectorTy())
+        {
+            return pType;
+        }
+
+        // [N x float] should packetize to [N x <8 x float>]
+        if (pType->isArrayTy())
+        {
+            uint32_t arraySize = pType->getArrayNumElements();
+            Type* pArrayType = pType->getArrayElementType();
+            Type* pVecArrayType = GetVectorType(pArrayType);
+            Type* pVecType = ArrayType::get(pVecArrayType, arraySize);
+            return pVecType;
+        }
+
+        // {float,int} should packetize to {<8 x float>, <8 x int>}
+        if (pType->isAggregateType())
+        {
+            uint32_t numElems = pType->getStructNumElements();
+            SmallVector<Type*, 8> vecTypes;
+            for (uint32_t i = 0; i < numElems; ++i)
+            {
+                Type* pElemType = pType->getStructElementType(i);
+                Type* pVecElemType = GetVectorType(pElemType);
+                vecTypes.push_back(pVecElemType);
+            }
+            Type* pVecType = StructType::get(JM()->mContext, vecTypes);
+            return pVecType;
+        }
+
+        // [N x float]* should packetize to [N x <8 x float>]*
+        if (pType->isPointerTy() && pType->getPointerElementType()->isArrayTy())
+        {
+            return PointerType::get(GetVectorType(pType->getPointerElementType()), pType->getPointerAddressSpace());
+        }
+
+        // <ty> should packetize to <8 x <ty>>
+        Type* vecType = VectorType::get(pType, JM()->mVWidth);
+        return vecType;
+    }
 }
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder.h b/src/gallium/drivers/swr/rasterizer/jitter/builder.h
index 82c5f8cde2..6ca128d38f 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder.h
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder.h
@@ -123,6 +123,7 @@ namespace SwrJit
         bool IsTempAlloca(Value* inst);
         bool SetTexelMaskEvaluate(Instruction* inst);
         bool IsTexelMaskEvaluate(Instruction* inst);
+        Type* GetVectorType(Type* pType);
 
 #include "gen_builder.hpp"
 #include "gen_builder_meta.hpp"




More information about the mesa-commit mailing list