i965/vs: Create a 'lod_type' temporary for ir->lod_info.lod->type.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 17 Jan 2013 03:08:12 +0000 (19:08 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 30 Jan 2013 20:15:38 +0000 (12:15 -0800)
This is purely a refactor.  However, in a moment, we'll want to set
lod_type to float for ir_tex, where ir->lod_info.lod is NULL.

NOTE: This is a candidate for stable branches (for the next patch).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <idr@freedesktop.org>
(cherry picked from commit 56ce55d198af65d4a9de7119eb9e2417296c54ea)

src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp

index 59428a1..e95a5a1 100644 (file)
@@ -1853,6 +1853,7 @@ vec4_visitor::visit(ir_texture *ir)
       shadow_comparitor = this->result;
    }
 
+   const glsl_type *lod_type;
    src_reg lod, dPdx, dPdy;
    switch (ir->op) {
    case ir_txf:
@@ -1860,6 +1861,7 @@ vec4_visitor::visit(ir_texture *ir)
    case ir_txs:
       ir->lod_info.lod->accept(this);
       lod = this->result;
+      lod_type = ir->lod_info.lod->type;
       break;
    case ir_txd:
       ir->lod_info.grad.dPdx->accept(this);
@@ -1867,6 +1869,8 @@ vec4_visitor::visit(ir_texture *ir)
 
       ir->lod_info.grad.dPdy->accept(this);
       dPdy = this->result;
+
+      lod_type = ir->lod_info.grad.dPdx->type;
       break;
    case ir_tex:
    case ir_txb:
@@ -1908,8 +1912,7 @@ vec4_visitor::visit(ir_texture *ir)
 
    if (ir->op == ir_txs) {
       int writemask = intel->gen == 4 ? WRITEMASK_W : WRITEMASK_X;
-      emit(MOV(dst_reg(MRF, param_base, ir->lod_info.lod->type, writemask),
-          lod));
+      emit(MOV(dst_reg(MRF, param_base, lod_type, writemask), lod));
    } else {
       int i, coord_mask = 0, zero_mask = 0;
       /* Load the coordinate */
@@ -1967,12 +1970,12 @@ vec4_visitor::visit(ir_texture *ir)
            mrf = param_base;
            writemask = WRITEMASK_Z;
         }
-        emit(MOV(dst_reg(MRF, mrf, ir->lod_info.lod->type, writemask), lod));
+        emit(MOV(dst_reg(MRF, mrf, lod_type, writemask), lod));
       } else if (ir->op == ir_txf) {
-        emit(MOV(dst_reg(MRF, param_base, ir->lod_info.lod->type, WRITEMASK_W),
+        emit(MOV(dst_reg(MRF, param_base, lod_type, WRITEMASK_W),
                  lod));
       } else if (ir->op == ir_txd) {
-        const glsl_type *type = ir->lod_info.grad.dPdx->type;
+        const glsl_type *type = lod_type;
 
         if (intel->gen >= 5) {
            dPdx.swizzle = BRW_SWIZZLE4(SWIZZLE_X,SWIZZLE_X,SWIZZLE_Y,SWIZZLE_Y);