galahad: do map/unmap counting for resources
[mesa.git] / src / gallium / drivers / i965 / brw_wm_fp.c
index 0df84f8546c8e9083bff9b6be83a0495ade23a10..f7ee55cc1c85b03b3a37276b0155a726fe978d2a 100644 (file)
@@ -41,7 +41,6 @@
 #include "tgsi/tgsi_util.h"
 
 #include "brw_wm.h"
-#include "brw_util.h"
 #include "brw_debug.h"
 
 
@@ -282,6 +281,7 @@ static struct brw_fp_instruction * emit_tex_op(struct brw_wm_compile *c,
                                             struct brw_fp_dst dest,
                                             GLuint tex_unit,
                                             GLuint target,
+                                            GLuint sampler,
                                             struct brw_fp_src src0,
                                             struct brw_fp_src src1,
                                             struct brw_fp_src src2 )
@@ -298,6 +298,7 @@ static struct brw_fp_instruction * emit_tex_op(struct brw_wm_compile *c,
    inst->dst = dest;
    inst->tex_unit = tex_unit;
    inst->target = target;
+   inst->sampler = sampler;
    inst->src[0] = src0;
    inst->src[1] = src1;
    inst->src[2] = src2;
@@ -313,7 +314,7 @@ static INLINE void emit_op3(struct brw_wm_compile *c,
                            struct brw_fp_src src1,
                            struct brw_fp_src src2 )
 {
-   emit_tex_op(c, op, dest, 0, 0, src0, src1, src2);
+   emit_tex_op(c, op, dest, 0, 0, 0, src0, src1, src2);
 }
 
 
@@ -323,7 +324,7 @@ static INLINE void emit_op2(struct brw_wm_compile *c,
                            struct brw_fp_src src0,
                            struct brw_fp_src src1)
 {
-   emit_tex_op(c, op, dest, 0, 0, src0, src1, src_undef());
+   emit_tex_op(c, op, dest, 0, 0, 0, src0, src1, src_undef());
 }
 
 static INLINE void emit_op1(struct brw_wm_compile *c,
@@ -331,14 +332,14 @@ static INLINE void emit_op1(struct brw_wm_compile *c,
                            struct brw_fp_dst dest,
                            struct brw_fp_src src0)
 {
-   emit_tex_op(c, op, dest, 0, 0, src0, src_undef(), src_undef());
+   emit_tex_op(c, op, dest, 0, 0, 0, src0, src_undef(), src_undef());
 }
 
 static INLINE void emit_op0(struct brw_wm_compile *c,
                           GLuint op,
                           struct brw_fp_dst dest)
 {
-   emit_tex_op(c, op, dest, 0, 0, src_undef(), src_undef(), src_undef());
+   emit_tex_op(c, op, dest, 0, 0, 0, src_undef(), src_undef(), src_undef());
 }
 
 
@@ -674,9 +675,10 @@ static void precalc_tex( struct brw_wm_compile *c,
                         struct brw_fp_dst dst,
                         unsigned target,
                         unsigned unit,
-                        struct brw_fp_src src0 )
+                        struct brw_fp_src src0,
+                        struct brw_fp_src sampler )
 {
-   struct brw_fp_src coord = src_undef();
+   struct brw_fp_src coord;
    struct brw_fp_dst tmp = dst_undef();
 
    assert(unit < BRW_MAX_TEX_UNIT);
@@ -751,6 +753,7 @@ static void precalc_tex( struct brw_wm_compile *c,
                   dst_saturate(tmp, dst.saturate),
                   unit,
                   target,
+                  sampler.index,
                   coord,
                   src_undef(),
                   src_undef());
@@ -802,6 +805,7 @@ static void precalc_tex( struct brw_wm_compile *c,
                   dst,
                   unit,
                   target,
+                  sampler.index,
                   coord,
                   src_undef(),
                   src_undef());
@@ -851,7 +855,8 @@ static void precalc_txp( struct brw_wm_compile *c,
                         struct brw_fp_dst dst,
                         unsigned target,
                         unsigned unit,
-                        struct brw_fp_src src0 )
+                        struct brw_fp_src src0,
+                         struct brw_fp_src sampler )
 {
    if (projtex(c, target, src0)) {
       struct brw_fp_dst tmp = get_temp(c);
@@ -877,7 +882,8 @@ static void precalc_txp( struct brw_wm_compile *c,
                  dst,
                  target,
                  unit,
-                 src_reg_from_dst(tmp));
+                 src_reg_from_dst(tmp),
+                  sampler );
 
       release_temp(c, tmp);
    }
@@ -885,7 +891,7 @@ static void precalc_txp( struct brw_wm_compile *c,
    {
       /* dst = TEX src0
        */
-      precalc_tex(c, dst, target, unit, src0);
+      precalc_tex(c, dst, target, unit, src0, sampler);
    }
 }
 
@@ -936,6 +942,7 @@ static void emit_fb_write( struct brw_wm_compile *c )
                  dst_undef(),
                  (i == c->key.nr_cbufs - 1), /* EOT */
                  i,
+                  0,            /* no sampler */
                  outcolor,
                  payload_r0_depth,
                  outdepth);
@@ -949,15 +956,15 @@ static struct brw_fp_dst translate_dst( struct brw_wm_compile *c,
 {
    struct brw_fp_dst out;
 
-   out.file = dst->DstRegister.File;
-   out.index = dst->DstRegister.Index;
-   out.writemask = dst->DstRegister.WriteMask;
-   out.indirect = dst->DstRegister.Indirect;
+   out.file = dst->Register.File;
+   out.index = dst->Register.Index;
+   out.writemask = dst->Register.WriteMask;
+   out.indirect = dst->Register.Indirect;
    out.saturate = (saturate == TGSI_SAT_ZERO_ONE);
    
    if (out.indirect) {
-      assert(dst->DstRegisterInd.File == TGSI_FILE_ADDRESS);
-      assert(dst->DstRegisterInd.Index == 0);
+      assert(dst->Indirect.File == TGSI_FILE_ADDRESS);
+      assert(dst->Indirect.Index == 0);
    }
    
    return out;
@@ -969,14 +976,14 @@ static struct brw_fp_src translate_src( struct brw_wm_compile *c,
 {
    struct brw_fp_src out;
 
-   out.file = src->SrcRegister.File;
-   out.index = src->SrcRegister.Index;
-   out.indirect = src->SrcRegister.Indirect;
+   out.file = src->Register.File;
+   out.index = src->Register.Index;
+   out.indirect = src->Register.Indirect;
 
-   out.swizzle = ((src->SrcRegister.SwizzleX << 0) |
-                 (src->SrcRegister.SwizzleY << 2) |
-                 (src->SrcRegister.SwizzleZ << 4) |
-                 (src->SrcRegister.SwizzleW << 6));
+   out.swizzle = ((src->Register.SwizzleX << 0) |
+                 (src->Register.SwizzleY << 2) |
+                 (src->Register.SwizzleZ << 4) |
+                 (src->Register.SwizzleW << 6));
    
    switch (tgsi_util_get_full_src_register_sign_mode( src, 0 )) {
    case TGSI_UTIL_SIGN_CLEAR:
@@ -1002,8 +1009,8 @@ static struct brw_fp_src translate_src( struct brw_wm_compile *c,
    }
 
    if (out.indirect) {
-      assert(src->SrcRegisterInd.File == TGSI_FILE_ADDRESS);
-      assert(src->SrcRegisterInd.Index == 0);
+      assert(src->Indirect.File == TGSI_FILE_ADDRESS);
+      assert(src->Indirect.Index == 0);
    }
    
    return out;
@@ -1019,11 +1026,11 @@ static void emit_insn( struct brw_wm_compile *c,
    struct brw_fp_src src[3];
    int i;
 
-   dst = translate_dst( c, &inst->FullDstRegisters[0],
+   dst = translate_dst( c, &inst->Dst[0],
                        inst->Instruction.Saturate );
 
    for (i = 0; i < inst->Instruction.NumSrcRegs; i++)
-      src[i] = translate_src( c, &inst->FullSrcRegisters[0] );
+      src[i] = translate_src( c, &inst->Src[i] );
    
    switch (opcode) {
    case TGSI_OPCODE_ABS:
@@ -1055,25 +1062,28 @@ static void emit_insn( struct brw_wm_compile *c,
 
    case TGSI_OPCODE_TEX:
       precalc_tex(c, dst,
-                 inst->InstructionExtTexture.Texture,
-                 src[0].file,  /* sampler unit */
-                 src[1] );
+                 inst->Texture.Texture,
+                 src[1].index, /* use sampler unit for tex idx */
+                 src[0],       /* coord */
+                  src[1]);      /* sampler */
       break;
 
    case TGSI_OPCODE_TXP:
       precalc_txp(c, dst,
-                 inst->InstructionExtTexture.Texture,
-                 src[0].file,  /* sampler unit */
-                 src[1] );
+                 inst->Texture.Texture,
+                 src[1].index, /* use sampler unit for tex idx */
+                 src[0],       /* coord */
+                  src[1]);      /* sampler */
       break;
 
    case TGSI_OPCODE_TXB:
       /* XXX: TXB not done
        */
       precalc_tex(c, dst,
-                 inst->InstructionExtTexture.Texture,
-                 src[0].file,  /* sampler unit */
-                 src[1] );
+                 inst->Texture.Texture,
+                 src[1].index, /* use sampler unit for tex idx*/
+                 src[0],
+                  src[1]);
       break;
 
    case TGSI_OPCODE_XPD: 
@@ -1158,14 +1168,14 @@ int brw_wm_pass_fp( struct brw_wm_compile *c )
             unsigned first, last, mask;
             unsigned attrib;
 
-            first = decl->DeclarationRange.First;
-            last = decl->DeclarationRange.Last;
+            first = decl->Range.First;
+            last = decl->Range.Last;
             mask = decl->Declaration.UsageMask;
 
             for (attrib = first; attrib <= last; attrib++) {
               emit_interp(c, 
                           attrib, 
-                          decl->Semantic.SemanticName,
+                          decl->Semantic.Name,
                           decl->Declaration.Interpolate );
             }
          }