tgsi: Remove ExtDivide field from existence. Implement OPCODE_TXP.
authorMichal Krol <michal@tungstengraphics.com>
Wed, 12 Mar 2008 15:41:25 +0000 (16:41 +0100)
committerMichal Krol <michal@tungstengraphics.com>
Wed, 12 Mar 2008 15:41:25 +0000 (16:41 +0100)
src/gallium/auxiliary/tgsi/exec/tgsi_exec.c
src/gallium/auxiliary/tgsi/util/tgsi_build.c
src/gallium/auxiliary/tgsi/util/tgsi_build.h
src/gallium/auxiliary/tgsi/util/tgsi_dump.c
src/gallium/drivers/i915simple/i915_fpc_translate.c
src/gallium/include/pipe/p_shader_tokens.h

index ac524414001a9296ef0e9c4603168038b4a28fd8..f2ed9e0353e4f31c27697645dbe0ef16bf3399f2 100644 (file)
@@ -1220,7 +1220,8 @@ fetch_texel( struct tgsi_sampler *sampler,
 static void
 exec_tex(struct tgsi_exec_machine *mach,
          const struct tgsi_full_instruction *inst,
-         boolean biasLod)
+         boolean biasLod,
+         boolean projected)
 {
    const uint unit = inst->FullSrcRegisters[1].SrcRegister.Index;
    union tgsi_exec_channel r[8];
@@ -1234,17 +1235,9 @@ exec_tex(struct tgsi_exec_machine *mach,
 
       FETCH(&r[0], 0, CHAN_X);
 
-      switch (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide) {
-      case TGSI_EXTSWIZZLE_W:
+      if (projected) {
          FETCH(&r[1], 0, CHAN_W);
          micro_div( &r[0], &r[0], &r[1] );
-         break;
-
-      case TGSI_EXTSWIZZLE_ONE:
-         break;
-
-      default:
-         assert (0);
       }
 
       if (biasLod) {
@@ -1266,19 +1259,11 @@ exec_tex(struct tgsi_exec_machine *mach,
       FETCH(&r[1], 0, CHAN_Y);
       FETCH(&r[2], 0, CHAN_Z);
 
-      switch (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide) {
-      case TGSI_EXTSWIZZLE_W:
+      if (projected) {
          FETCH(&r[3], 0, CHAN_W);
          micro_div( &r[0], &r[0], &r[3] );
          micro_div( &r[1], &r[1], &r[3] );
          micro_div( &r[2], &r[2], &r[3] );
-         break;
-
-      case TGSI_EXTSWIZZLE_ONE:
-         break;
-
-      default:
-         assert (0);
       }
 
       if (biasLod) {
@@ -1300,19 +1285,11 @@ exec_tex(struct tgsi_exec_machine *mach,
       FETCH(&r[1], 0, CHAN_Y);
       FETCH(&r[2], 0, CHAN_Z);
 
-      switch (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide) {
-      case TGSI_EXTSWIZZLE_W:
+      if (projected) {
          FETCH(&r[3], 0, CHAN_W);
          micro_div( &r[0], &r[0], &r[3] );
          micro_div( &r[1], &r[1], &r[3] );
          micro_div( &r[2], &r[2], &r[3] );
-         break;
-
-      case TGSI_EXTSWIZZLE_ONE:
-         break;
-
-      default:
-         assert (0);
       }
 
       if (biasLod) {
@@ -2007,14 +1984,14 @@ exec_instruction(
       /* simple texture lookup */
       /* src[0] = texcoord */
       /* src[1] = sampler unit */
-      exec_tex(mach, inst, FALSE);
+      exec_tex(mach, inst, FALSE, FALSE);
       break;
 
    case TGSI_OPCODE_TXB:
       /* Texture lookup with lod bias */
       /* src[0] = texcoord (src[0].w = LOD bias) */
       /* src[1] = sampler unit */
-      exec_tex(mach, inst, TRUE);
+      exec_tex(mach, inst, TRUE, FALSE);
       break;
 
    case TGSI_OPCODE_TXD:
@@ -2030,7 +2007,14 @@ exec_instruction(
       /* Texture lookup with explit LOD */
       /* src[0] = texcoord (src[0].w = LOD) */
       /* 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;
 
    case TGSI_OPCODE_UP2H:
index a00ff1c2a5f81c04d93ca2f92016599f39e03551..9c883ab7043b62ec2050aa9994079f2532fa03ea 100644 (file)
@@ -719,7 +719,6 @@ tgsi_build_full_instruction(
             reg->SrcRegisterExtSwz.NegateY,
             reg->SrcRegisterExtSwz.NegateZ,
             reg->SrcRegisterExtSwz.NegateW,
-            reg->SrcRegisterExtSwz.ExtDivide,
             prev_token,
             instruction,
             header );
@@ -1057,7 +1056,6 @@ tgsi_default_src_register_ext_swz( void )
    src_register_ext_swz.NegateY = 0;
    src_register_ext_swz.NegateZ = 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.Extended = 0;
 
@@ -1084,7 +1082,6 @@ tgsi_build_src_register_ext_swz(
    unsigned negate_y,
    unsigned negate_z,
    unsigned negate_w,
-   unsigned ext_divide,
    struct tgsi_token *prev_token,
    struct tgsi_instruction *instruction,
    struct tgsi_header *header )
@@ -1099,7 +1096,6 @@ tgsi_build_src_register_ext_swz(
    assert( negate_y <= 1 );
    assert( negate_z <= 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.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.NegateZ = negate_z;
    src_register_ext_swz.NegateW = negate_w;
-   src_register_ext_swz.ExtDivide = ext_divide;
 
    prev_token->Extended = 1;
    instruction_grow( instruction, header );
index 607860e7fc5e6311a4582b49bc7712b0fc7b1fd3..80bffc4ae718deec10c412855d13243258bc390b 100644 (file)
@@ -229,7 +229,6 @@ tgsi_build_src_register_ext_swz(
    unsigned negate_y,
    unsigned negate_z,
    unsigned negate_w,
-   unsigned ext_divide,
    struct tgsi_token *prev_token,
    struct tgsi_instruction *instruction,
    struct tgsi_header *header );
index 1913d482f1aaecc03ce1c59c177dcee47d73d7dc..ceb407b884b58a0751892c906844ee711631582a 100644 (file)
@@ -1049,11 +1049,6 @@ dump_instruction_short(
          CHR( ')' );
       }
 
-      if (src->SrcRegisterExtSwz.ExtDivide != TGSI_EXTSWIZZLE_ONE) {
-         CHR( '/' );
-         ENM( src->SrcRegisterExtSwz.ExtDivide, TGSI_EXTSWIZZLES_SHORT );
-      }
-
       first_reg = FALSE;
    }
 
@@ -1368,10 +1363,6 @@ dump_instruction_verbose(
             TXT( "\nNegateW   : " );
             UID( src->SrcRegisterExtSwz.NegateW );
          }
-         if( deflt || fs->SrcRegisterExtSwz.ExtDivide != src->SrcRegisterExtSwz.ExtDivide ) {
-            TXT( "\nExtDivide  : " );
-            ENM( src->SrcRegisterExtSwz.ExtDivide, TGSI_EXTSWIZZLES );
-         }
          if( ignored ) {
             TXT( "\nPadding   : " );
             UIX( src->SrcRegisterExtSwz.Padding );
index c2d9a93c6c84d582cd15468a01db24a22760ffac..7b4fca5db1bbc163b3762a854c770cedb7bb2b87 100644 (file)
@@ -872,19 +872,17 @@ i915_translate_instruction(struct i915_fp_compile *p,
       break;
 
    case TGSI_OPCODE_TEX:
-      if (inst->FullSrcRegisters[0].SrcRegisterExtSwz.ExtDivide
-          == TGSI_EXTSWIZZLE_W) {
-         emit_tex(p, inst, T0_TEXLDP);
-      }
-      else {
-         emit_tex(p, inst, T0_TEXLD);
-      }
+      emit_tex(p, inst, T0_TEXLD);
       break;
 
    case TGSI_OPCODE_TXB:
       emit_tex(p, inst, T0_TEXLDB);
       break;
 
+   case TGSI_OPCODE_TXP:
+      emit_tex(p, inst, T0_TEXLDP);
+      break;
+
    case TGSI_OPCODE_XPD:
       /* Cross product:
        *      result.x = src0.y * src1.z - src0.z * src1.y;
index f0bb43bc5ba2359fe5fd72dba08b75bf129013ca..210169f54f28108799fcc87eb35e8f1386a15758 100644 (file)
@@ -655,9 +655,6 @@ struct tgsi_src_register_ext
  *
  * NegateX, NegateY, NegateZ and NegateW negate individual components of the
  * source register.
- *
- * ExtDivide specifies which component is used to divide all components of the
- * source register.
  */
 
 struct tgsi_src_register_ext_swz
@@ -671,15 +668,7 @@ struct tgsi_src_register_ext_swz
    unsigned NegateY      : 1;    /* BOOL */
    unsigned NegateZ      : 1;    /* BOOL */
    unsigned NegateW      : 1;    /* BOOL */
-
-   /*
-    * 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 Padding      : 7;
    unsigned Extended     : 1;    /* BOOL */
 };