freedreno/ir3: use (ss) instead of (sy) for ldlv
authorRob Clark <robclark@freedesktop.org>
Mon, 11 Apr 2016 16:57:31 +0000 (12:57 -0400)
committerRob Clark <robclark@freedesktop.org>
Wed, 13 Apr 2016 18:15:05 +0000 (14:15 -0400)
Fixes a bunch of flat-varying fail on a4xx (where we need to use ldlv to
read the un-interpolated varying).

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3_legalize.c

index 77cd0e622f03484bc09d8bccce4ea4ccaad8bd50..7a49f4c371cde66727aa87d794bb2e66dbb498f2 100644 (file)
@@ -183,7 +183,13 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block)
                        ctx->has_samp = true;
                        regmask_set(&needs_sy, n->regs[0]);
                } else if (is_load(n)) {
-                       regmask_set(&needs_sy, n->regs[0]);
+                       /* seems like ldlv needs (ss) bit instead??  which is odd but
+                        * makes a bunch of flat-varying tests start working on a4xx.
+                        */
+                       if (n->opc == OPC_LDLV)
+                               regmask_set(&needs_ss, n->regs[0]);
+                       else
+                               regmask_set(&needs_sy, n->regs[0]);
                }
 
                /* both tex/sfu appear to not always immediately consume