From 024e814dee20a58f1d11129ffb2b4497beeacca7 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 20 Mar 2018 11:09:02 -0700 Subject: [PATCH] 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 ae47fda81ff..e5a9e0e03a2 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 { -- 2.30.2