mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 08:08:06 +02:00
swr/rast: Add Builder::GetVectorType()
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
parent
8cb55dae2e
commit
8238c791dc
2 changed files with 45 additions and 0 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue