gallium: remove extended negate also, and also the ExtSwz token

Likewise, the extended negate functionality hasn't been
used since mesa switched to using tgsi_ureg to build programs,
and has been translating the SWZ opcode internally to a single MAD.
This commit is contained in:
Keith Whitwell 2009-10-23 14:50:02 +01:00
parent 8a571b809a
commit da253319f9
15 changed files with 11 additions and 346 deletions

View File

@ -687,32 +687,6 @@ tgsi_build_full_instruction(
header );
prev_token = (struct tgsi_token *) src_register;
if( tgsi_compare_src_register_ext_swz(
reg->SrcRegisterExtSwz,
tgsi_default_src_register_ext_swz() ) ) {
struct tgsi_src_register_ext_swz *src_register_ext_swz;
/* Use of the extended negate requires the simple negate to be identity.
*/
assert( reg->SrcRegister.Negate == FALSE );
if( maxsize <= size )
return 0;
src_register_ext_swz =
(struct tgsi_src_register_ext_swz *) &tokens[size];
size++;
*src_register_ext_swz = tgsi_build_src_register_ext_swz(
reg->SrcRegisterExtSwz.NegateX,
reg->SrcRegisterExtSwz.NegateY,
reg->SrcRegisterExtSwz.NegateZ,
reg->SrcRegisterExtSwz.NegateW,
prev_token,
instruction,
header );
prev_token = (struct tgsi_token *) src_register_ext_swz;
}
if( tgsi_compare_src_register_ext_mod(
reg->SrcRegisterExtMod,
tgsi_default_src_register_ext_mod() ) ) {
@ -1025,7 +999,6 @@ tgsi_default_full_src_register( void )
struct tgsi_full_src_register full_src_register;
full_src_register.SrcRegister = tgsi_default_src_register();
full_src_register.SrcRegisterExtSwz = tgsi_default_src_register_ext_swz();
full_src_register.SrcRegisterExtMod = tgsi_default_src_register_ext_mod();
full_src_register.SrcRegisterInd = tgsi_default_src_register();
full_src_register.SrcRegisterDim = tgsi_default_dimension();
@ -1034,61 +1007,6 @@ tgsi_default_full_src_register( void )
return full_src_register;
}
struct tgsi_src_register_ext_swz
tgsi_default_src_register_ext_swz( void )
{
struct tgsi_src_register_ext_swz src_register_ext_swz;
src_register_ext_swz.Type = TGSI_SRC_REGISTER_EXT_TYPE_SWZ;
src_register_ext_swz.Padding0 = 0;
src_register_ext_swz.NegateX = 0;
src_register_ext_swz.NegateY = 0;
src_register_ext_swz.NegateZ = 0;
src_register_ext_swz.NegateW = 0;
src_register_ext_swz.Padding = 0;
src_register_ext_swz.Extended = 0;
return src_register_ext_swz;
}
unsigned
tgsi_compare_src_register_ext_swz(
struct tgsi_src_register_ext_swz a,
struct tgsi_src_register_ext_swz b )
{
a.Padding = b.Padding = 0;
a.Extended = b.Extended = 0;
return compare32(&a, &b);
}
struct tgsi_src_register_ext_swz
tgsi_build_src_register_ext_swz(
unsigned negate_x,
unsigned negate_y,
unsigned negate_z,
unsigned negate_w,
struct tgsi_token *prev_token,
struct tgsi_instruction *instruction,
struct tgsi_header *header )
{
struct tgsi_src_register_ext_swz src_register_ext_swz;
assert( negate_x <= 1 );
assert( negate_y <= 1 );
assert( negate_z <= 1 );
assert( negate_w <= 1 );
src_register_ext_swz = tgsi_default_src_register_ext_swz();
src_register_ext_swz.NegateX = negate_x;
src_register_ext_swz.NegateY = negate_y;
src_register_ext_swz.NegateZ = negate_z;
src_register_ext_swz.NegateW = negate_w;
prev_token->Extended = 1;
instruction_grow( instruction, header );
return src_register_ext_swz;
}
struct tgsi_src_register_ext_mod
tgsi_default_src_register_ext_mod( void )

View File

@ -231,24 +231,6 @@ tgsi_build_src_register(
struct tgsi_full_src_register
tgsi_default_full_src_register( void );
struct tgsi_src_register_ext_swz
tgsi_default_src_register_ext_swz( void );
unsigned
tgsi_compare_src_register_ext_swz(
struct tgsi_src_register_ext_swz a,
struct tgsi_src_register_ext_swz b );
struct tgsi_src_register_ext_swz
tgsi_build_src_register_ext_swz(
unsigned negate_x,
unsigned negate_y,
unsigned negate_z,
unsigned negate_w,
struct tgsi_token *prev_token,
struct tgsi_instruction *instruction,
struct tgsi_header *header );
struct tgsi_src_register_ext_mod
tgsi_default_src_register_ext_mod( void );

View File

@ -163,7 +163,7 @@ static const char *TGSI_TEXTURES[] =
static const char *TGSI_SRC_REGISTER_EXTS[] =
{
"SRC_REGISTER_EXT_TYPE_SWZ",
"",
"SRC_REGISTER_EXT_TYPE_MOD"
};
@ -546,36 +546,6 @@ dump_instruction_verbose(
}
}
if( deflt || tgsi_compare_src_register_ext_swz( src->SrcRegisterExtSwz, fs->SrcRegisterExtSwz ) ) {
EOL();
TXT( "\nType : " );
ENM( src->SrcRegisterExtSwz.Type, TGSI_SRC_REGISTER_EXTS );
if( deflt || fs->SrcRegisterExtSwz.NegateX != src->SrcRegisterExtSwz.NegateX ) {
TXT( "\nNegateX : " );
UID( src->SrcRegisterExtSwz.NegateX );
}
if( deflt || fs->SrcRegisterExtSwz.NegateY != src->SrcRegisterExtSwz.NegateY ) {
TXT( "\nNegateY : " );
UID( src->SrcRegisterExtSwz.NegateY );
}
if( deflt || fs->SrcRegisterExtSwz.NegateZ != src->SrcRegisterExtSwz.NegateZ ) {
TXT( "\nNegateZ : " );
UID( src->SrcRegisterExtSwz.NegateZ );
}
if( deflt || fs->SrcRegisterExtSwz.NegateW != src->SrcRegisterExtSwz.NegateW ) {
TXT( "\nNegateW : " );
UID( src->SrcRegisterExtSwz.NegateW );
}
if( ignored ) {
TXT( "\nPadding : " );
UIX( src->SrcRegisterExtSwz.Padding );
if( deflt || fs->SrcRegisterExtSwz.Extended != src->SrcRegisterExtSwz.Extended ) {
TXT( "\nExtended : " );
UID( src->SrcRegisterExtSwz.Extended );
}
}
}
if( deflt || tgsi_compare_src_register_ext_mod( src->SrcRegisterExtMod, fs->SrcRegisterExtMod ) ) {
EOL();
TXT( "\nType : " );

View File

@ -264,11 +264,6 @@ tgsi_parse_token(
next_token( ctx, &token );
switch( token.Type ) {
case TGSI_SRC_REGISTER_EXT_TYPE_SWZ:
copy_token(&inst->FullSrcRegisters[i].SrcRegisterExtSwz,
&token);
break;
case TGSI_SRC_REGISTER_EXT_TYPE_MOD:
copy_token(&inst->FullSrcRegisters[i].SrcRegisterExtMod,
&token);

View File

@ -56,7 +56,6 @@ struct tgsi_full_dst_register
struct tgsi_full_src_register
{
struct tgsi_src_register SrcRegister;
struct tgsi_src_register_ext_swz SrcRegisterExtSwz;
struct tgsi_src_register_ext_mod SrcRegisterExtMod;
struct tgsi_src_register SrcRegisterInd;
struct tgsi_dimension SrcRegisterDim;

View File

@ -51,7 +51,6 @@ union tgsi_any_token {
struct tgsi_instruction_ext_texture insn_ext_texture;
struct tgsi_instruction_ext_predicate insn_ext_predicate;
struct tgsi_src_register src;
struct tgsi_src_register_ext_swz src_ext_swz;
struct tgsi_src_register_ext_mod src_ext_mod;
struct tgsi_dimension dim;
struct tgsi_dst_register dst;

View File

@ -104,50 +104,6 @@ tgsi_util_set_src_register_swizzle(
}
}
unsigned
tgsi_util_get_src_register_extnegate(
const struct tgsi_src_register_ext_swz *reg,
unsigned component )
{
switch( component ) {
case 0:
return reg->NegateX;
case 1:
return reg->NegateY;
case 2:
return reg->NegateZ;
case 3:
return reg->NegateW;
default:
assert( 0 );
}
return 0;
}
void
tgsi_util_set_src_register_extnegate(
struct tgsi_src_register_ext_swz *reg,
unsigned negate,
unsigned component )
{
switch( component ) {
case 0:
reg->NegateX = negate;
break;
case 1:
reg->NegateY = negate;
break;
case 2:
reg->NegateZ = negate;
break;
case 3:
reg->NegateW = negate;
break;
default:
assert( 0 );
}
}
unsigned
tgsi_util_get_full_src_register_sign_mode(
const struct tgsi_full_src_register *reg,
@ -171,9 +127,7 @@ tgsi_util_get_full_src_register_sign_mode(
unsigned negate;
negate = reg->SrcRegister.Negate;
if( tgsi_util_get_src_register_extnegate( &reg->SrcRegisterExtSwz, component ) ) {
negate = !negate;
}
if( reg->SrcRegisterExtMod.Negate ) {
negate = !negate;
}
@ -194,11 +148,6 @@ tgsi_util_set_full_src_register_sign_mode(
struct tgsi_full_src_register *reg,
unsigned sign_mode )
{
reg->SrcRegisterExtSwz.NegateX = 0;
reg->SrcRegisterExtSwz.NegateY = 0;
reg->SrcRegisterExtSwz.NegateZ = 0;
reg->SrcRegisterExtSwz.NegateW = 0;
switch (sign_mode)
{
case TGSI_UTIL_SIGN_CLEAR:

View File

@ -33,7 +33,6 @@ extern "C" {
#endif
struct tgsi_src_register;
struct tgsi_src_register_ext_swz;
struct tgsi_full_src_register;
void *
@ -57,17 +56,6 @@ tgsi_util_set_src_register_swizzle(
unsigned swizzle,
unsigned component );
unsigned
tgsi_util_get_src_register_extnegate(
const struct tgsi_src_register_ext_swz *reg,
unsigned component );
void
tgsi_util_set_src_register_extnegate(
struct tgsi_src_register_ext_swz *reg,
unsigned negate,
unsigned component );
#define TGSI_UTIL_SIGN_CLEAR 0 /* Force positive */
#define TGSI_UTIL_SIGN_SET 1 /* Force negative */
#define TGSI_UTIL_SIGN_TOGGLE 2 /* Negate */

View File

@ -37,49 +37,6 @@ tgsi_util_get_full_src_register_swizzle(
component );
}
unsigned
tgsi_util_get_src_register_extnegate(
const struct tgsi_src_register_ext_swz *reg,
unsigned component )
{
switch( component ) {
case 0:
return reg->NegateX;
case 1:
return reg->NegateY;
case 2:
return reg->NegateZ;
case 3:
return reg->NegateW;
default:
ASSERT( 0 );
}
return 0;
}
void
tgsi_util_set_src_register_extnegate(
struct tgsi_src_register_ext_swz *reg,
unsigned negate,
unsigned component )
{
switch( component ) {
case 0:
reg->NegateX = negate;
break;
case 1:
reg->NegateY = negate;
break;
case 2:
reg->NegateZ = negate;
break;
case 3:
reg->NegateW = negate;
break;
default:
ASSERT( 0 );
}
}
unsigned
tgsi_util_get_full_src_register_sign_mode(
@ -104,9 +61,6 @@ tgsi_util_get_full_src_register_sign_mode(
unsigned negate;
negate = reg->SrcRegister.Negate;
if( tgsi_util_get_src_register_extnegate( &reg->SrcRegisterExtSwz, component ) ) {
negate = !negate;
}
if( reg->SrcRegisterExtMod.Negate ) {
negate = !negate;
}

View File

@ -225,17 +225,8 @@ src_vector(struct i915_fp_compile *p,
* Try to handle both here.
*/
{
int nx = source->SrcRegisterExtSwz.NegateX;
int ny = source->SrcRegisterExtSwz.NegateY;
int nz = source->SrcRegisterExtSwz.NegateZ;
int nw = source->SrcRegisterExtSwz.NegateW;
if (source->SrcRegister.Negate) {
nx = !nx;
ny = !ny;
nz = !nz;
nw = !nw;
}
src = negate(src, nx, ny, nz, nw);
int n = source->SrcRegister.Negate;
src = negate(src, n, n, n, n);
}
/* no abs() or post-abs negation */

View File

@ -318,11 +318,7 @@ src_native_swz(struct nv30_fpc *fpc, const struct tgsi_full_src_register *fsrc,
{
const struct nv30_sreg none = nv30_sr(NV30SR_NONE, 0);
struct nv30_sreg tgsi = tgsi_src(fpc, fsrc);
uint mask = 0, zero_mask = 0, one_mask = 0, neg_mask = 0;
uint neg[4] = { fsrc->SrcRegisterExtSwz.NegateX,
fsrc->SrcRegisterExtSwz.NegateY,
fsrc->SrcRegisterExtSwz.NegateZ,
fsrc->SrcRegisterExtSwz.NegateW };
uint mask = 0;
uint c;
for (c = 0; c < 4; c++) {
@ -336,12 +332,9 @@ src_native_swz(struct nv30_fpc *fpc, const struct tgsi_full_src_register *fsrc,
default:
assert(0);
}
if (!tgsi.negate && neg[c])
neg_mask |= (1 << c);
}
if (mask == MASK_ALL && !neg_mask)
if (mask == MASK_ALL)
return TRUE;
*src = temp(fpc);
@ -349,12 +342,6 @@ src_native_swz(struct nv30_fpc *fpc, const struct tgsi_full_src_register *fsrc,
if (mask)
arith(fpc, 0, MOV, *src, mask, tgsi, none, none);
if (neg_mask) {
struct nv30_sreg one = temp(fpc);
arith(fpc, 0, STR, one, neg_mask, one, none, none);
arith(fpc, 0, MUL, *src, neg_mask, *src, neg(one), none);
}
return FALSE;
}

View File

@ -321,11 +321,7 @@ src_native_swz(struct nv40_fpc *fpc, const struct tgsi_full_src_register *fsrc,
{
const struct nv40_sreg none = nv40_sr(NV40SR_NONE, 0);
struct nv40_sreg tgsi = tgsi_src(fpc, fsrc);
uint mask = 0, zero_mask = 0, one_mask = 0, neg_mask = 0;
uint neg[4] = { fsrc->SrcRegisterExtSwz.NegateX,
fsrc->SrcRegisterExtSwz.NegateY,
fsrc->SrcRegisterExtSwz.NegateZ,
fsrc->SrcRegisterExtSwz.NegateW };
uint mask = 0;
uint c;
for (c = 0; c < 4; c++) {
@ -339,12 +335,9 @@ src_native_swz(struct nv40_fpc *fpc, const struct tgsi_full_src_register *fsrc,
default:
assert(0);
}
if (!tgsi.negate && neg[c])
neg_mask |= (1 << c);
}
if (mask == MASK_ALL && !neg_mask)
if (mask == MASK_ALL)
return TRUE;
*src = temp(fpc);
@ -352,18 +345,6 @@ src_native_swz(struct nv40_fpc *fpc, const struct tgsi_full_src_register *fsrc,
if (mask)
arith(fpc, 0, MOV, *src, mask, tgsi, none, none);
if (zero_mask)
arith(fpc, 0, SFL, *src, zero_mask, *src, none, none);
if (one_mask)
arith(fpc, 0, STR, *src, one_mask, *src, none, none);
if (neg_mask) {
struct nv40_sreg one = temp(fpc);
arith(fpc, 0, STR, one, neg_mask, one, none, none);
arith(fpc, 0, MUL, *src, neg_mask, *src, neg(one), none);
}
return FALSE;
}

View File

@ -362,11 +362,7 @@ src_native_swz(struct nv40_vpc *vpc, const struct tgsi_full_src_register *fsrc,
{
const struct nv40_sreg none = nv40_sr(NV40SR_NONE, 0);
struct nv40_sreg tgsi = tgsi_src(vpc, fsrc);
uint mask = 0, zero_mask = 0, one_mask = 0, neg_mask = 0;
uint neg[4] = { fsrc->SrcRegisterExtSwz.NegateX,
fsrc->SrcRegisterExtSwz.NegateY,
fsrc->SrcRegisterExtSwz.NegateZ,
fsrc->SrcRegisterExtSwz.NegateW };
uint mask = 0;
uint c;
for (c = 0; c < 4; c++) {
@ -380,12 +376,9 @@ src_native_swz(struct nv40_vpc *vpc, const struct tgsi_full_src_register *fsrc,
default:
assert(0);
}
if (!tgsi.negate && neg[c])
neg_mask |= tgsi_mask(1 << c);
}
if (mask == MASK_ALL && !neg_mask)
if (mask == MASK_ALL)
return TRUE;
*src = temp(vpc);
@ -393,18 +386,6 @@ src_native_swz(struct nv40_vpc *vpc, const struct tgsi_full_src_register *fsrc,
if (mask)
arith(vpc, 0, OP_MOV, *src, mask, tgsi, none, none);
if (zero_mask)
arith(vpc, 0, OP_SFL, *src, zero_mask, *src, none, none);
if (one_mask)
arith(vpc, 0, OP_STR, *src, one_mask, *src, none, none);
if (neg_mask) {
struct nv40_sreg one = temp(vpc);
arith(vpc, 0, OP_STR, one, neg_mask, one, none, none);
arith(vpc, 0, OP_MUL, *src, neg_mask, *src, neg(one), none);
}
return FALSE;
}

View File

@ -209,12 +209,7 @@ static void transform_srcreg(
dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 2) << 6;
dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 3) << 9;
dst->Abs = src->SrcRegisterExtMod.Absolute;
dst->Negate =
src->SrcRegisterExtSwz.NegateX |
(src->SrcRegisterExtSwz.NegateY << 1) |
(src->SrcRegisterExtSwz.NegateZ << 2) |
(src->SrcRegisterExtSwz.NegateW << 3);
dst->Negate ^= src->SrcRegister.Negate ? RC_MASK_XYZW : 0;
dst->Negate = src->SrcRegister.Negate ? RC_MASK_XYZW : 0;
}
static void transform_texture(struct rc_instruction * dst, struct tgsi_instruction_ext_texture src)

View File

@ -475,7 +475,6 @@ struct tgsi_src_register
* Then, if tgsi_src_register::Dimension is TRUE, tgsi_dimension follows.
*/
#define TGSI_SRC_REGISTER_EXT_TYPE_SWZ 0
#define TGSI_SRC_REGISTER_EXT_TYPE_MOD 1
struct tgsi_src_register_ext
@ -486,9 +485,6 @@ struct tgsi_src_register_ext
};
/**
* If tgsi_src_register_ext::Type is TGSI_SRC_REGISTER_EXT_TYPE_SWZ,
* it should be cast to tgsi_src_register_ext_swz.
*
* If tgsi_src_register_ext::Type is TGSI_SRC_REGISTER_EXT_TYPE_MOD,
* it should be cast to tgsi_src_register_ext_mod.
*
@ -496,26 +492,6 @@ struct tgsi_src_register_ext
* follows.
*/
/**
* NegateX, NegateY, NegateZ and NegateW negate individual components of the
* source register.
*
* NOTE: To simplify matter, if this token is present, the corresponding Swizzle
* and Negate fields in tgsi_src_register should be set to X,Y,Z,W
* and FALSE, respectively.
*/
struct tgsi_src_register_ext_swz
{
unsigned Type : 4; /* TGSI_SRC_REGISTER_EXT_TYPE_SWZ */
unsigned Padding0 : 16; /* unused */
unsigned NegateX : 1; /* BOOL */
unsigned NegateY : 1; /* BOOL */
unsigned NegateZ : 1; /* BOOL */
unsigned NegateW : 1; /* BOOL */
unsigned Padding : 7;
unsigned Extended : 1; /* BOOL */
};
/**
* Extra src register modifiers