mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 03:28:09 +02:00
tgsi/ureg: allow ureg_dst to have dimension indices
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Roland Scheidegger <sroland@vmware.com> Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
ec67d73a73
commit
dfc3bced2c
2 changed files with 75 additions and 8 deletions
|
|
@ -914,8 +914,8 @@ void
|
|||
ureg_emit_dst( struct ureg_program *ureg,
|
||||
struct ureg_dst dst )
|
||||
{
|
||||
unsigned size = (1 +
|
||||
(dst.Indirect ? 1 : 0));
|
||||
unsigned size = 1 + (dst.Indirect ? 1 : 0) +
|
||||
(dst.Dimension ? (dst.DimIndirect ? 2 : 1) : 0);
|
||||
|
||||
union tgsi_any_token *out = get_tokens( ureg, DOMAIN_INSN, size );
|
||||
unsigned n = 0;
|
||||
|
|
@ -944,6 +944,26 @@ ureg_emit_dst( struct ureg_program *ureg,
|
|||
n++;
|
||||
}
|
||||
|
||||
if (dst.Dimension) {
|
||||
out[0].dst.Dimension = 1;
|
||||
out[n].dim.Dimension = 0;
|
||||
out[n].dim.Padding = 0;
|
||||
if (dst.DimIndirect) {
|
||||
out[n].dim.Indirect = 1;
|
||||
out[n].dim.Index = dst.DimensionIndex;
|
||||
n++;
|
||||
out[n].value = 0;
|
||||
out[n].ind.File = dst.DimIndFile;
|
||||
out[n].ind.Swizzle = dst.DimIndSwizzle;
|
||||
out[n].ind.Index = dst.DimIndIndex;
|
||||
out[n].ind.ArrayID = dst.ArrayID;
|
||||
} else {
|
||||
out[n].dim.Indirect = 0;
|
||||
out[n].dim.Index = dst.DimensionIndex;
|
||||
}
|
||||
n++;
|
||||
}
|
||||
|
||||
assert(n == size);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ struct ureg_dst
|
|||
unsigned File : 4; /* TGSI_FILE_ */
|
||||
unsigned WriteMask : 4; /* TGSI_WRITEMASK_ */
|
||||
unsigned Indirect : 1; /* BOOL */
|
||||
unsigned DimIndirect : 1; /* BOOL */
|
||||
unsigned Dimension : 1; /* BOOL */
|
||||
unsigned Saturate : 1; /* BOOL */
|
||||
unsigned Predicate : 1;
|
||||
unsigned PredNegate : 1; /* BOOL */
|
||||
|
|
@ -86,6 +88,10 @@ struct ureg_dst
|
|||
int IndirectIndex : 16; /* SINT */
|
||||
unsigned IndirectFile : 4; /* TGSI_FILE_ */
|
||||
int IndirectSwizzle : 2; /* TGSI_SWIZZLE_ */
|
||||
unsigned DimIndFile : 4; /* TGSI_FILE_ */
|
||||
unsigned DimIndSwizzle : 2; /* TGSI_SWIZZLE_ */
|
||||
int DimensionIndex : 16; /* SINT */
|
||||
int DimIndIndex : 16; /* SINT */
|
||||
unsigned ArrayID : 10; /* UINT */
|
||||
};
|
||||
|
||||
|
|
@ -1108,6 +1114,16 @@ ureg_src_indirect( struct ureg_src reg, struct ureg_src addr )
|
|||
return reg;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_dst
|
||||
ureg_dst_dimension( struct ureg_dst reg, int index )
|
||||
{
|
||||
assert(reg.File != TGSI_FILE_NULL);
|
||||
reg.Dimension = 1;
|
||||
reg.DimIndirect = 0;
|
||||
reg.DimensionIndex = index;
|
||||
return reg;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_src
|
||||
ureg_src_dimension( struct ureg_src reg, int index )
|
||||
{
|
||||
|
|
@ -1118,6 +1134,19 @@ ureg_src_dimension( struct ureg_src reg, int index )
|
|||
return reg;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_dst
|
||||
ureg_dst_dimension_indirect( struct ureg_dst reg, struct ureg_src addr,
|
||||
int index )
|
||||
{
|
||||
assert(reg.File != TGSI_FILE_NULL);
|
||||
reg.Dimension = 1;
|
||||
reg.DimIndirect = 1;
|
||||
reg.DimensionIndex = index;
|
||||
reg.DimIndFile = addr.File;
|
||||
reg.DimIndIndex = addr.Index;
|
||||
reg.DimIndSwizzle = addr.SwizzleX;
|
||||
return reg;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_src
|
||||
ureg_src_dimension_indirect( struct ureg_src reg, struct ureg_src addr,
|
||||
|
|
@ -1161,6 +1190,12 @@ ureg_dst_register( unsigned file,
|
|||
dst.PredSwizzleZ = TGSI_SWIZZLE_Z;
|
||||
dst.PredSwizzleW = TGSI_SWIZZLE_W;
|
||||
dst.Index = index;
|
||||
dst.Dimension = 0;
|
||||
dst.DimensionIndex = 0;
|
||||
dst.DimIndirect = 0;
|
||||
dst.DimIndFile = TGSI_FILE_NULL;
|
||||
dst.DimIndIndex = 0;
|
||||
dst.DimIndSwizzle = 0;
|
||||
dst.ArrayID = 0;
|
||||
|
||||
return dst;
|
||||
|
|
@ -1189,6 +1224,12 @@ ureg_dst( struct ureg_src src )
|
|||
dst.PredSwizzleZ = TGSI_SWIZZLE_Z;
|
||||
dst.PredSwizzleW = TGSI_SWIZZLE_W;
|
||||
dst.Index = src.Index;
|
||||
dst.Dimension = src.Dimension;
|
||||
dst.DimensionIndex = src.DimensionIndex;
|
||||
dst.DimIndirect = src.DimIndirect;
|
||||
dst.DimIndFile = src.DimIndFile;
|
||||
dst.DimIndIndex = src.DimIndIndex;
|
||||
dst.DimIndSwizzle = src.DimIndSwizzle;
|
||||
dst.ArrayID = src.ArrayID;
|
||||
|
||||
return dst;
|
||||
|
|
@ -1240,12 +1281,12 @@ ureg_src( struct ureg_dst dst )
|
|||
src.Absolute = 0;
|
||||
src.Index = dst.Index;
|
||||
src.Negate = 0;
|
||||
src.Dimension = 0;
|
||||
src.DimensionIndex = 0;
|
||||
src.DimIndirect = 0;
|
||||
src.DimIndFile = TGSI_FILE_NULL;
|
||||
src.DimIndIndex = 0;
|
||||
src.DimIndSwizzle = 0;
|
||||
src.Dimension = dst.Dimension;
|
||||
src.DimensionIndex = dst.DimensionIndex;
|
||||
src.DimIndirect = dst.DimIndirect;
|
||||
src.DimIndFile = dst.DimIndFile;
|
||||
src.DimIndIndex = dst.DimIndIndex;
|
||||
src.DimIndSwizzle = dst.DimIndSwizzle;
|
||||
src.ArrayID = dst.ArrayID;
|
||||
|
||||
return src;
|
||||
|
|
@ -1272,6 +1313,12 @@ ureg_dst_undef( void )
|
|||
dst.PredSwizzleZ = TGSI_SWIZZLE_Z;
|
||||
dst.PredSwizzleW = TGSI_SWIZZLE_W;
|
||||
dst.Index = 0;
|
||||
dst.Dimension = 0;
|
||||
dst.DimensionIndex = 0;
|
||||
dst.DimIndirect = 0;
|
||||
dst.DimIndFile = TGSI_FILE_NULL;
|
||||
dst.DimIndIndex = 0;
|
||||
dst.DimIndSwizzle = 0;
|
||||
dst.ArrayID = 0;
|
||||
|
||||
return dst;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue