freedreno/a3xx: fix for unused inputs
authorRob Clark <robclark@freedesktop.org>
Tue, 25 Feb 2014 13:02:28 +0000 (08:02 -0500)
committerRob Clark <robclark@freedesktop.org>
Sun, 2 Mar 2014 16:26:35 +0000 (11:26 -0500)
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@freedesktop.org>
src/gallium/drivers/freedreno/a3xx/fd3_program.c
src/gallium/drivers/freedreno/a3xx/ir3_ra.c

index 34d4dd3330b0bb551bbfabb488da88629429ea9b..9cc09889f9881a817870285966710c870852072e 100644 (file)
@@ -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 *
index 1b3d0e3e1e50383bc0eec7c92bf8fcd081cdaf4b..904727a7d700408cdb0b747421fa01aaeae2f61e 100644 (file)
@@ -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;