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

Author: Eric Anholt <e...@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 {

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to