summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri
diff options
context:
space:
mode:
authorTom Stellard <tstellar@gmail.com>2010-10-13 23:45:12 -0700
committerTom Stellard <tstellar@gmail.com>2010-10-18 20:51:05 -0700
commit3cdff41d9245f997c465869148a74a2041739504 (patch)
tree3e5862126bcd4dea1c2d72a10913bcab94b16f9d /src/mesa/drivers/dri
parent75734d0a37c7cb24fb97c9ba0166f9f2d2da60f8 (diff)
r300/compiler: Clear empty registers after constant folding
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_optimize.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
index 41769e347e..e895841ed4 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
@@ -408,6 +408,7 @@ static void constant_folding_add(struct rc_instruction * inst)
static void constant_folding(struct radeon_compiler * c, struct rc_instruction * inst)
{
const struct rc_opcode_info * opcode = rc_get_opcode_info(inst->U.I.Opcode);
+ unsigned int i;
/* Replace 0.0, 1.0 and 0.5 immediates by their explicit swizzles */
for(unsigned int src = 0; src < opcode->NumSrcRegs; ++src) {
@@ -480,6 +481,13 @@ static void constant_folding(struct radeon_compiler * c, struct rc_instruction *
constant_folding_mul(inst);
else if (inst->U.I.Opcode == RC_OPCODE_ADD)
constant_folding_add(inst);
+
+ /* In case this instruction has been converted, make sure all of the
+ * registers that are no longer used are empty. */
+ opcode = rc_get_opcode_info(inst->U.I.Opcode);
+ for(i = opcode->NumSrcRegs; i < 3; i++) {
+ memset(&inst->U.I.SrcReg[i], 0, sizeof(struct rc_src_register));
+ }
}
/**