r300/compiler: fix allocation of temporaries in radeonTransformTEX
authorMarek Olšák <maraeo@gmail.com>
Sun, 15 Aug 2010 20:52:07 +0000 (22:52 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sun, 15 Aug 2010 22:07:54 +0000 (00:07 +0200)
src/mesa/drivers/dri/r300/compiler/radeon_program_tex.c

index 9c4b65f4c00c12ce0f91b801371f43f4427e3c79..ddce590ee66e2fcac67c604bf5ef86a3bfeb2d19 100644 (file)
@@ -117,8 +117,8 @@ int radeonTransformTEX(
                        struct rc_instruction * inst_rcp = NULL;
                        struct rc_instruction * inst_mad;
                        struct rc_instruction * inst_cmp;
-                       unsigned tmp_texsample = rc_find_free_temporary(c);
-                       unsigned tmp_sum = rc_find_free_temporary(c);
+                       unsigned tmp_texsample;
+                       unsigned tmp_sum;
                        unsigned tmp_recip_w = 0;
                        int pass, fail, tex;
 
@@ -126,6 +126,7 @@ int radeonTransformTEX(
                        struct rc_dst_register output_reg = inst->U.I.DstReg;
 
                        /* Redirect TEX to a new temp. */
+                       tmp_texsample = rc_find_free_temporary(c);
                        inst->U.I.DstReg.File = RC_FILE_TEMPORARY;
                        inst->U.I.DstReg.Index = tmp_texsample;
                        inst->U.I.DstReg.WriteMask = RC_MASK_XYZW;
@@ -144,6 +145,7 @@ int radeonTransformTEX(
                        }
 
                        /* Perspective-divide r by W (if it's TXP) and add the texture sample (see below). */
+                       tmp_sum = rc_find_free_temporary(c);
                        inst_mad = rc_insert_new_instruction(c, inst_rcp ? inst_rcp : inst);
                        inst_mad->U.I.DstReg.File = RC_FILE_TEMPORARY;
                        inst_mad->U.I.DstReg.Index = tmp_sum;
@@ -199,6 +201,8 @@ int radeonTransformTEX(
                        inst_cmp->U.I.SrcReg[pass].File = RC_FILE_NONE;
                        inst_cmp->U.I.SrcReg[pass].Swizzle = RC_SWIZZLE_1111;
                        inst_cmp->U.I.SrcReg[fail] = shadow_ambient(compiler, inst->U.I.TexSrcUnit);
+
+                       assert(tmp_texsample != tmp_sum && tmp_sum != tmp_recip_w);
                }
        }