Mesa (master): v3d: Apply the GFXH-930 workaround to the case where the VS loads attrs.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Apr 26 19:44:08 UTC 2019


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

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Apr 24 11:26:34 2019 -0700

v3d: Apply the GFXH-930 workaround to the case where the VS loads attrs.

We were emitting a dummy load for when the VS doesn't load any attributes,
but we also need to emit a dummy load for when the render VS loads
attributes but the binner VS doesn't.  Fixes simulator assertion failures
and GPU hangs on KHR-GLES31.core.texture_gather.\*

---

 src/gallium/drivers/v3d/v3dx_draw.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/gallium/drivers/v3d/v3dx_draw.c b/src/gallium/drivers/v3d/v3dx_draw.c
index 486b6cc9b12..0c8eb66b939 100644
--- a/src/gallium/drivers/v3d/v3dx_draw.c
+++ b/src/gallium/drivers/v3d/v3dx_draw.c
@@ -322,6 +322,7 @@ v3d_emit_gl_shader_state(struct v3d_context *v3d,
                                    vtx->defaults_offset);
         }
 
+        bool cs_loaded_any = false;
         for (int i = 0; i < vtx->num_elements; i++) {
                 struct pipe_vertex_element *elem = &vtx->pipe[i];
                 struct pipe_vertex_buffer *vb =
@@ -341,6 +342,20 @@ v3d_emit_gl_shader_state(struct v3d_context *v3d,
                                 v3d->prog.cs->prog_data.vs->vattr_sizes[i];
                         attr.number_of_values_read_by_vertex_shader =
                                 v3d->prog.vs->prog_data.vs->vattr_sizes[i];
+
+                        /* GFXH-930: At least one attribute must be enabled
+                         * and read by CS and VS.  If we have attributes being
+                         * consumed by the VS but not the CS, then set up a
+                         * dummy load of the last attribute into the CS's VPM
+                         * inputs.  (Since CS is just dead-code-elimination
+                         * compared to VS, we can't have CS loading but not
+                         * VS).
+                         */
+                        if (v3d->prog.cs->prog_data.vs->vattr_sizes[i])
+                                cs_loaded_any = true;
+                        if (i == vtx->num_elements - 1 && !cs_loaded_any) {
+                                attr.number_of_values_read_by_coordinate_shader = 1;
+                        }
 #if V3D_VERSION >= 41
                         attr.maximum_index = 0xffffff;
 #endif




More information about the mesa-commit mailing list