tgsi: Remove ExtDivide field from existence. Implement OPCODE_TXP.

This commit is contained in:
Michal Krol
2008-03-12 16:41:25 +01:00
parent e5b1a53c9f
commit ba75e82b6e
6 changed files with 21 additions and 65 deletions

View File

@@ -1220,7 +1220,8 @@ fetch_texel( struct tgsi_sampler *sampler,
static void static void
exec_tex(struct tgsi_exec_machine *mach, exec_tex(struct tgsi_exec_machine *mach,
const struct tgsi_full_instruction *inst, const struct tgsi_full_instruction *inst,
boolean biasLod) boolean biasLod,
boolean projected)
{ {
const uint unit = inst->FullSrcRegisters[1].SrcRegister.Index; const uint unit = inst->FullSrcRegisters[1].SrcRegister.Index;
union tgsi_exec_channel r[8]; union tgsi_exec_channel r[8];
@@ -1234,17 +1235,9 @@ exec_tex(struct tgsi_exec_machine *mach,
FETCH(&r[0], 0, CHAN_X); FETCH(&r[0], 0, CHAN_X);
switch (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide) { if (projected) {
case TGSI_EXTSWIZZLE_W:
FETCH(&r[1], 0, CHAN_W); FETCH(&r[1], 0, CHAN_W);
micro_div( &r[0], &r[0], &r[1] ); micro_div( &r[0], &r[0], &r[1] );
break;
case TGSI_EXTSWIZZLE_ONE:
break;
default:
assert (0);
} }
if (biasLod) { if (biasLod) {
@@ -1266,19 +1259,11 @@ exec_tex(struct tgsi_exec_machine *mach,
FETCH(&r[1], 0, CHAN_Y); FETCH(&r[1], 0, CHAN_Y);
FETCH(&r[2], 0, CHAN_Z); FETCH(&r[2], 0, CHAN_Z);
switch (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide) { if (projected) {
case TGSI_EXTSWIZZLE_W:
FETCH(&r[3], 0, CHAN_W); FETCH(&r[3], 0, CHAN_W);
micro_div( &r[0], &r[0], &r[3] ); micro_div( &r[0], &r[0], &r[3] );
micro_div( &r[1], &r[1], &r[3] ); micro_div( &r[1], &r[1], &r[3] );
micro_div( &r[2], &r[2], &r[3] ); micro_div( &r[2], &r[2], &r[3] );
break;
case TGSI_EXTSWIZZLE_ONE:
break;
default:
assert (0);
} }
if (biasLod) { if (biasLod) {
@@ -1300,19 +1285,11 @@ exec_tex(struct tgsi_exec_machine *mach,
FETCH(&r[1], 0, CHAN_Y); FETCH(&r[1], 0, CHAN_Y);
FETCH(&r[2], 0, CHAN_Z); FETCH(&r[2], 0, CHAN_Z);
switch (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide) { if (projected) {
case TGSI_EXTSWIZZLE_W:
FETCH(&r[3], 0, CHAN_W); FETCH(&r[3], 0, CHAN_W);
micro_div( &r[0], &r[0], &r[3] ); micro_div( &r[0], &r[0], &r[3] );
micro_div( &r[1], &r[1], &r[3] ); micro_div( &r[1], &r[1], &r[3] );
micro_div( &r[2], &r[2], &r[3] ); micro_div( &r[2], &r[2], &r[3] );
break;
case TGSI_EXTSWIZZLE_ONE:
break;
default:
assert (0);
} }
if (biasLod) { if (biasLod) {
@@ -2007,14 +1984,14 @@ exec_instruction(
/* simple texture lookup */ /* simple texture lookup */
/* src[0] = texcoord */ /* src[0] = texcoord */
/* src[1] = sampler unit */ /* src[1] = sampler unit */
exec_tex(mach, inst, FALSE); exec_tex(mach, inst, FALSE, FALSE);
break; break;
case TGSI_OPCODE_TXB: case TGSI_OPCODE_TXB:
/* Texture lookup with lod bias */ /* Texture lookup with lod bias */
/* src[0] = texcoord (src[0].w = LOD bias) */ /* src[0] = texcoord (src[0].w = LOD bias) */
/* src[1] = sampler unit */ /* src[1] = sampler unit */
exec_tex(mach, inst, TRUE); exec_tex(mach, inst, TRUE, FALSE);
break; break;
case TGSI_OPCODE_TXD: case TGSI_OPCODE_TXD:
@@ -2030,7 +2007,14 @@ exec_instruction(
/* Texture lookup with explit LOD */ /* Texture lookup with explit LOD */
/* src[0] = texcoord (src[0].w = LOD) */ /* src[0] = texcoord (src[0].w = LOD) */
/* src[1] = sampler unit */ /* src[1] = sampler unit */
exec_tex(mach, inst, TRUE); exec_tex(mach, inst, TRUE, FALSE);
break;
case TGSI_OPCODE_TXP:
/* Texture lookup with projection */
/* src[0] = texcoord (src[0].w = projection) */
/* src[1] = sampler unit */
exec_tex(mach, inst, FALSE, TRUE);
break; break;
case TGSI_OPCODE_UP2H: case TGSI_OPCODE_UP2H:

View File

@@ -719,7 +719,6 @@ tgsi_build_full_instruction(
reg->SrcRegisterExtSwz.NegateY, reg->SrcRegisterExtSwz.NegateY,
reg->SrcRegisterExtSwz.NegateZ, reg->SrcRegisterExtSwz.NegateZ,
reg->SrcRegisterExtSwz.NegateW, reg->SrcRegisterExtSwz.NegateW,
reg->SrcRegisterExtSwz.ExtDivide,
prev_token, prev_token,
instruction, instruction,
header ); header );
@@ -1057,7 +1056,6 @@ tgsi_default_src_register_ext_swz( void )
src_register_ext_swz.NegateY = 0; src_register_ext_swz.NegateY = 0;
src_register_ext_swz.NegateZ = 0; src_register_ext_swz.NegateZ = 0;
src_register_ext_swz.NegateW = 0; src_register_ext_swz.NegateW = 0;
src_register_ext_swz.ExtDivide = TGSI_EXTSWIZZLE_ONE;
src_register_ext_swz.Padding = 0; src_register_ext_swz.Padding = 0;
src_register_ext_swz.Extended = 0; src_register_ext_swz.Extended = 0;
@@ -1084,7 +1082,6 @@ tgsi_build_src_register_ext_swz(
unsigned negate_y, unsigned negate_y,
unsigned negate_z, unsigned negate_z,
unsigned negate_w, unsigned negate_w,
unsigned ext_divide,
struct tgsi_token *prev_token, struct tgsi_token *prev_token,
struct tgsi_instruction *instruction, struct tgsi_instruction *instruction,
struct tgsi_header *header ) struct tgsi_header *header )
@@ -1099,7 +1096,6 @@ tgsi_build_src_register_ext_swz(
assert( negate_y <= 1 ); assert( negate_y <= 1 );
assert( negate_z <= 1 ); assert( negate_z <= 1 );
assert( negate_w <= 1 ); assert( negate_w <= 1 );
assert( ext_divide <= TGSI_EXTSWIZZLE_ONE );
src_register_ext_swz = tgsi_default_src_register_ext_swz(); src_register_ext_swz = tgsi_default_src_register_ext_swz();
src_register_ext_swz.ExtSwizzleX = ext_swizzle_x; src_register_ext_swz.ExtSwizzleX = ext_swizzle_x;
@@ -1110,7 +1106,6 @@ tgsi_build_src_register_ext_swz(
src_register_ext_swz.NegateY = negate_y; src_register_ext_swz.NegateY = negate_y;
src_register_ext_swz.NegateZ = negate_z; src_register_ext_swz.NegateZ = negate_z;
src_register_ext_swz.NegateW = negate_w; src_register_ext_swz.NegateW = negate_w;
src_register_ext_swz.ExtDivide = ext_divide;
prev_token->Extended = 1; prev_token->Extended = 1;
instruction_grow( instruction, header ); instruction_grow( instruction, header );

View File

@@ -229,7 +229,6 @@ tgsi_build_src_register_ext_swz(
unsigned negate_y, unsigned negate_y,
unsigned negate_z, unsigned negate_z,
unsigned negate_w, unsigned negate_w,
unsigned ext_divide,
struct tgsi_token *prev_token, struct tgsi_token *prev_token,
struct tgsi_instruction *instruction, struct tgsi_instruction *instruction,
struct tgsi_header *header ); struct tgsi_header *header );

View File

@@ -1049,11 +1049,6 @@ dump_instruction_short(
CHR( ')' ); CHR( ')' );
} }
if (src->SrcRegisterExtSwz.ExtDivide != TGSI_EXTSWIZZLE_ONE) {
CHR( '/' );
ENM( src->SrcRegisterExtSwz.ExtDivide, TGSI_EXTSWIZZLES_SHORT );
}
first_reg = FALSE; first_reg = FALSE;
} }
@@ -1368,10 +1363,6 @@ dump_instruction_verbose(
TXT( "\nNegateW : " ); TXT( "\nNegateW : " );
UID( src->SrcRegisterExtSwz.NegateW ); UID( src->SrcRegisterExtSwz.NegateW );
} }
if( deflt || fs->SrcRegisterExtSwz.ExtDivide != src->SrcRegisterExtSwz.ExtDivide ) {
TXT( "\nExtDivide : " );
ENM( src->SrcRegisterExtSwz.ExtDivide, TGSI_EXTSWIZZLES );
}
if( ignored ) { if( ignored ) {
TXT( "\nPadding : " ); TXT( "\nPadding : " );
UIX( src->SrcRegisterExtSwz.Padding ); UIX( src->SrcRegisterExtSwz.Padding );

View File

@@ -872,19 +872,17 @@ i915_translate_instruction(struct i915_fp_compile *p,
break; break;
case TGSI_OPCODE_TEX: case TGSI_OPCODE_TEX:
if (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide emit_tex(p, inst, T0_TEXLD);
== TGSI_EXTSWIZZLE_W) {
emit_tex(p, inst, T0_TEXLDP);
}
else {
emit_tex(p, inst, T0_TEXLD);
}
break; break;
case TGSI_OPCODE_TXB: case TGSI_OPCODE_TXB:
emit_tex(p, inst, T0_TEXLDB); emit_tex(p, inst, T0_TEXLDB);
break; break;
case TGSI_OPCODE_TXP:
emit_tex(p, inst, T0_TEXLDP);
break;
case TGSI_OPCODE_XPD: case TGSI_OPCODE_XPD:
/* Cross product: /* Cross product:
* result.x = src0.y * src1.z - src0.z * src1.y; * result.x = src0.y * src1.z - src0.z * src1.y;

View File

@@ -655,9 +655,6 @@ struct tgsi_src_register_ext
* *
* NegateX, NegateY, NegateZ and NegateW negate individual components of the * NegateX, NegateY, NegateZ and NegateW negate individual components of the
* source register. * source register.
*
* ExtDivide specifies which component is used to divide all components of the
* source register.
*/ */
struct tgsi_src_register_ext_swz struct tgsi_src_register_ext_swz
@@ -671,15 +668,7 @@ struct tgsi_src_register_ext_swz
unsigned NegateY : 1; /* BOOL */ unsigned NegateY : 1; /* BOOL */
unsigned NegateZ : 1; /* BOOL */ unsigned NegateZ : 1; /* BOOL */
unsigned NegateW : 1; /* BOOL */ unsigned NegateW : 1; /* BOOL */
unsigned Padding : 7;
/*
* XXX: Do not use. This field has been depricated.
* XXX: If using in conjunction with OPCODE_TEX, please use OPCODE_TXP
* XXX: and, if needed, perform a swizzle on the texture coordinate.
*/
unsigned ExtDivide : 4; /* TGSI_EXTSWIZZLE_ */
unsigned Padding : 3;
unsigned Extended : 1; /* BOOL */ unsigned Extended : 1; /* BOOL */
}; };