Mesa (master): broadcom/vc5: Handle sparsely populated SO target array.

Eric Anholt anholt at kemper.freedesktop.org
Wed Mar 21 17:04:24 UTC 2018


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

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Mar 20 11:09:02 2018 -0700

broadcom/vc5: Handle sparsely populated SO target array.

Fixes
GTF-GLES3.gtf.GL3Tests.transform_feedback.transform_feedback_state_variables

---

 src/gallium/drivers/vc5/vc5_emit.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/vc5/vc5_emit.c b/src/gallium/drivers/vc5/vc5_emit.c
index ae47fda81f..e5a9e0e03a 100644
--- a/src/gallium/drivers/vc5/vc5_emit.c
+++ b/src/gallium/drivers/vc5/vc5_emit.c
@@ -597,10 +597,13 @@ v3dX(emit_state)(struct pipe_context *pctx)
                         for (int i = 0; i < so->num_targets; i++) {
                                 const struct pipe_stream_output_target *target =
                                         so->targets[i];
-                                struct vc5_resource *rsc =
-                                        vc5_resource(target->buffer);
+                                struct vc5_resource *rsc = target ?
+                                        vc5_resource(target->buffer) : NULL;
 
 #if V3D_VERSION >= 40
+                                if (!target)
+                                        continue;
+
                                 cl_emit(&job->bcl, TRANSFORM_FEEDBACK_BUFFER, output) {
                                         output.buffer_address =
                                                 cl_address(rsc->bo,
@@ -611,13 +614,17 @@ v3dX(emit_state)(struct pipe_context *pctx)
                                 }
 #else /* V3D_VERSION < 40 */
                                 cl_emit(&job->bcl, TRANSFORM_FEEDBACK_OUTPUT_ADDRESS, output) {
-                                        output.address =
-                                                cl_address(rsc->bo,
-                                                           target->buffer_offset);
+                                        if (target) {
+                                                output.address =
+                                                        cl_address(rsc->bo,
+                                                                   target->buffer_offset);
+                                        }
                                 };
 #endif /* V3D_VERSION < 40 */
-                                vc5_job_add_write_resource(vc5->job,
-                                                           target->buffer);
+                                if (target) {
+                                        vc5_job_add_write_resource(vc5->job,
+                                                                   target->buffer);
+                                }
                                 /* XXX: buffer_size? */
                         }
                 } else {




More information about the mesa-commit mailing list