i965: Correct build_lighting in i965 driver according to
authorXiang, Haihao <haihao.xiang@intel.com>
Sat, 1 Sep 2007 07:43:15 +0000 (15:43 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Sat, 1 Sep 2007 07:43:15 +0000 (15:43 +0800)
commit 6dd98e9853a6984150aa47467112e016c40a4ab4.

src/mesa/drivers/dri/i965/brw_vs_tnl.c

index 339a330..2ed80dc 100644 (file)
@@ -1000,6 +1000,7 @@ static void build_lighting( struct tnl_program *p )
                                               STATE_POSITION); 
            struct ureg V = get_eye_position(p);
            struct ureg dist = get_temp(p);
+       struct ureg tmpPpli = get_temp(p);
 
            VPpli = get_temp(p); 
            half = get_temp(p);
@@ -1007,11 +1008,11 @@ static void build_lighting( struct tnl_program *p )
        /* In homogeneous object coordinates
         */
        emit_op1(p, OPCODE_RCP, dist, 0, swizzle1(Ppli, W));
-       emit_op2(p, OPCODE_MUL, Ppli, 0, Ppli, dist);
+       emit_op2(p, OPCODE_MUL, tmpPpli, 0, Ppli, dist);
  
            /* Calulate VPpli vector
             */
-           emit_op2(p, OPCODE_SUB, VPpli, 0, Ppli, V); 
+           emit_op2(p, OPCODE_SUB, VPpli, 0, tmpPpli, V); 
 
            /* Normalize VPpli.  The dist value also used in
             * attenuation below.
@@ -1043,6 +1044,7 @@ static void build_lighting( struct tnl_program *p )
            emit_normalize_vec3(p, half, half);
 
            release_temp(p, dist);
+       release_temp(p, tmpPpli);
         }
 
         /* Calculate dot products: