diff options
author | Tom Stellard <tstellar@gmail.com> | 2010-10-13 23:45:12 -0700 |
---|---|---|
committer | Tom Stellard <tstellar@gmail.com> | 2010-10-18 20:51:05 -0700 |
commit | 3cdff41d9245f997c465869148a74a2041739504 (patch) | |
tree | 3e5862126bcd4dea1c2d72a10913bcab94b16f9d /src/mesa/drivers/dri/r300/compiler | |
parent | 75734d0a37c7cb24fb97c9ba0166f9f2d2da60f8 (diff) |
r300/compiler: Clear empty registers after constant folding
Diffstat (limited to 'src/mesa/drivers/dri/r300/compiler')
-rw-r--r-- | src/mesa/drivers/dri/r300/compiler/radeon_optimize.c | 8 |
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)); + } } /** |