Mesa (7.9): r300/compiler: Use zero as the register index for unused sources
Tom Stellard
tstellar at kemper.freedesktop.org
Mon Nov 22 20:08:31 UTC 2010
Module: Mesa
Branch: 7.9
Commit: 80ff25b628a100a2c3bca583e3782db604696afc
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=80ff25b628a100a2c3bca583e3782db604696afc
Author: Tom Stellard <tstellar at gmail.com>
Date: Thu Nov 11 01:01:13 2010 -0800
r300/compiler: Use zero as the register index for unused sources
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.
(cherry picked from commit d668659003d0164f0d9c805f4127ff8eb64f0624)
---
.../drivers/dri/r300/compiler/r300_fragprog_emit.c | 3 +++
.../drivers/dri/r300/compiler/r500_fragprog_emit.c | 3 +++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/src/mesa/drivers/dri/r300/compiler/r300_fragprog_emit.c b/src/mesa/drivers/dri/r300/compiler/r300_fragprog_emit.c
index 3b2b06f..9f19f8f 100644
--- a/src/mesa/drivers/dri/r300/compiler/r300_fragprog_emit.c
+++ b/src/mesa/drivers/dri/r300/compiler/r300_fragprog_emit.c
@@ -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 radeon_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) {
diff --git a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
index efa3bb5..abbf704 100644
--- a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
+++ b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
@@ -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 radeon_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) {
More information about the mesa-commit
mailing list