tgsi: Remove ExtDivide field from existence. Implement OPCODE_TXP.
This commit is contained in:
@@ -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:
|
||||||
|
@@ -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 );
|
||||||
|
@@ -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 );
|
||||||
|
@@ -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 );
|
||||||
|
@@ -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;
|
||||||
|
@@ -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 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user