summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2018-06-25 10:12:03 -0700
committerEric Anholt <[email protected]>2018-07-02 10:05:14 -0700
commit49f7631c9fd94fbc5c892f70e5bcef54d0ec5043 (patch)
tree44ff6259b874d740daa2264677c9b6966a56d165
parentc7726fbfa5f3370baada02f2c6c58f7689809631 (diff)
v3d: Emit a TF flush after each draw using TF.
This fixes GPU hangs on 7278 in transform feedback tests such as GTF-GLES3.gtf.GL3Tests.transform_feedback2.transform_feedback2_basic
-rw-r--r--src/broadcom/cle/v3d_packet_v33.xml2
-rw-r--r--src/gallium/drivers/v3d/v3dx_draw.c7
2 files changed, 9 insertions, 0 deletions
diff --git a/src/broadcom/cle/v3d_packet_v33.xml b/src/broadcom/cle/v3d_packet_v33.xml
index ff5ecb5c171..3e85b672320 100644
--- a/src/broadcom/cle/v3d_packet_v33.xml
+++ b/src/broadcom/cle/v3d_packet_v33.xml
@@ -425,6 +425,8 @@
</field>
</packet>
+ <packet code="31" name="Transform Feedback Flush and Count"/>
+
<packet code="32" name="Indexed Primitive List" cl="B" max_ver="33">
<field name="Minimum index" size="32" start="104" type="uint"/>
<field name="Enable Primitive Restarts" size="1" start="103" type="bool"/>
diff --git a/src/gallium/drivers/v3d/v3dx_draw.c b/src/gallium/drivers/v3d/v3dx_draw.c
index 1e8b472a27d..43dd4089f12 100644
--- a/src/gallium/drivers/v3d/v3dx_draw.c
+++ b/src/gallium/drivers/v3d/v3dx_draw.c
@@ -558,6 +558,13 @@ v3d_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
}
}
}
+
+ /* A flush is required in between a TF draw and any following TF specs
+ * packet, or the GPU may hang. Just flush each time for now.
+ */
+ if (v3d->streamout.num_targets)
+ cl_emit(&job->bcl, TRANSFORM_FEEDBACK_FLUSH_AND_COUNT, flush);
+
job->draw_calls_queued++;
/* Increment the TF offsets by how many verts we wrote. XXX: This