Mesa (master): freedreno/a3xx: fix for unused inputs

Rob Clark robclark at kemper.freedesktop.org
Sun Mar 2 16:32:32 UTC 2014


Module: Mesa
Branch: master
Commit: 76924e3b5178aef80804a8933e764661df6b37df
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=76924e3b5178aef80804a8933e764661df6b37df

Author: Rob Clark <robclark at freedesktop.org>
Date:   Tue Feb 25 08:02:28 2014 -0500

freedreno/a3xx: fix for unused inputs

An unused input might not have a register assigned.  We don't want bogus
regid to result in impossibly high max_reg..

Signed-off-by: Rob Clark <robclark at freedesktop.org>

---

 src/gallium/drivers/freedreno/a3xx/fd3_program.c |   14 ++++++++++----
 src/gallium/drivers/freedreno/a3xx/ir3_ra.c      |    2 +-
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_program.c b/src/gallium/drivers/freedreno/a3xx/fd3_program.c
index 34d4dd3..9cc0988 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_program.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_program.c
@@ -80,10 +80,16 @@ static void
 fixup_vp_regfootprint(struct fd3_shader_variant *so)
 {
 	unsigned i;
-	for (i = 0; i < so->inputs_count; i++)
-		so->info.max_reg = MAX2(so->info.max_reg, (so->inputs[i].regid + 3) >> 2);
-	for (i = 0; i < so->outputs_count; i++)
-		so->info.max_reg = MAX2(so->info.max_reg, (so->outputs[i].regid + 3) >> 2);
+	for (i = 0; i < so->inputs_count; i++) {
+		if (so->inputs[i].compmask) {
+			uint32_t regid = (so->inputs[i].regid + 3) >> 2;
+			so->info.max_reg = MAX2(so->info.max_reg, regid);
+		}
+	}
+	for (i = 0; i < so->outputs_count; i++) {
+		uint32_t regid = (so->outputs[i].regid + 3) >> 2;
+		so->info.max_reg = MAX2(so->info.max_reg, regid);
+	}
 }
 
 static struct fd3_shader_variant *
diff --git a/src/gallium/drivers/freedreno/a3xx/ir3_ra.c b/src/gallium/drivers/freedreno/a3xx/ir3_ra.c
index 1b3d0e3..904727a 100644
--- a/src/gallium/drivers/freedreno/a3xx/ir3_ra.c
+++ b/src/gallium/drivers/freedreno/a3xx/ir3_ra.c
@@ -565,7 +565,7 @@ static void legalize(struct ir3_ra_ctx *ctx, struct ir3_block *block)
 	struct ir3_instruction *end =
 			ir3_instr_create(block, 0, OPC_END);
 	struct ir3_instruction *last_input = NULL;
-	regmask_t needs_ss_war;
+	regmask_t needs_ss_war;       /* write after read */
 	regmask_t needs_ss;
 	regmask_t needs_sy;
 




More information about the mesa-commit mailing list