freedreno/ir3: fix missing (ss) in dummy bary.f case
authorRob Clark <robdclark@chromium.org>
Thu, 27 Jun 2019 15:24:32 +0000 (08:24 -0700)
committerRob Clark <robdclark@chromium.org>
Fri, 28 Jun 2019 20:02:59 +0000 (13:02 -0700)
In case we need to insert a dummy bary.f for the (ei) flag, it also
needs (ss) so we don't release varying storage to the next VS wave
before the ldlv completed.  Fixes random failures in:

dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.*

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
src/freedreno/ir3/ir3_legalize.c

index c39b3a11011c33b0f1441bc3cf783cf3c5508bca..e1ca1ada2c53a218f9baee991a109b06aa3e8826 100644 (file)
@@ -306,6 +306,11 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block)
                        list_add(&baryf->node, &last_input->node);
 
                        last_input = baryf;
+
+                       /* by definition, we need (ss) since we are inserting
+                        * the dummy bary.f immediately after the ldlv:
+                        */
+                       last_input_needs_ss = true;
                }
                last_input->regs[0]->flags |= IR3_REG_EI;
                if (last_input_needs_ss)