r300/compiler: Use zero as the register index for unused sources
authorTom Stellard <tstellar@gmail.com>
Thu, 11 Nov 2010 09:01:13 +0000 (01:01 -0800)
committerTom Stellard <tstellar@gmail.com>
Mon, 22 Nov 2010 02:48:31 +0000 (18:48 -0800)
This fixes an invalid "Too many hardware temporaries used" error in the
case where a source reads from a temporary register with an index greater
than max_temp_regs and then the source is marked as unused before the
register allocation pass.

NOTE: This is a candidate for the 7.9 branch.

src/mesa/drivers/dri/r300/compiler/r300_fragprog_emit.c
src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c

index 8be32ea91fe78bbe168ab2ef22668b8d8145a6e1..1db8678e890e23c718eaab589bdc8c3ba67e848e 100644 (file)
@@ -76,6 +76,9 @@ static void use_temporary(struct r300_fragment_program_code *code, unsigned int
 
 static unsigned int use_source(struct r300_fragment_program_code* code, struct rc_pair_instruction_source src)
 {
+       if (!src.Used)
+               return 0;
+
        if (src.File == RC_FILE_CONSTANT) {
                return src.Index | (1 << 5);
        } else if (src.File == RC_FILE_TEMPORARY) {
index 6f101c68eb68630f872a2d2b681b9cf0283b8693..0311e7cf9a2a26a12e44e2d086442c1c99a69796 100644 (file)
@@ -200,6 +200,9 @@ static void use_temporary(struct r500_fragment_program_code* code, unsigned int
 
 static unsigned int use_source(struct r500_fragment_program_code* code, struct rc_pair_instruction_source src)
 {
+       if (!src.Used)
+               return 0;
+
        if (src.File == RC_FILE_CONSTANT) {
                return src.Index | 0x100;
        } else if (src.File == RC_FILE_TEMPORARY) {