diff options
author | Eric Anholt <[email protected]> | 2018-03-23 15:40:36 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2018-03-26 17:46:18 -0700 |
commit | 09ac5ade8f3855e42e4902d7e1acab540f3f1568 (patch) | |
tree | 1a6f812251b787a8dc86aae9deaea348094a190b /src | |
parent | 9e62aec9cd4853016b4d03a56b5756111a312d65 (diff) |
broadcom/vc5: Split transform feedback specs update from buffers.
The specs update will be changing based on additional state flags in the
next commit, and this unindents the buffer update code.
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/vc5/vc5_emit.c | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/src/gallium/drivers/vc5/vc5_emit.c b/src/gallium/drivers/vc5/vc5_emit.c index e5a9e0e03a2..1db97081df3 100644 --- a/src/gallium/drivers/vc5/vc5_emit.c +++ b/src/gallium/drivers/vc5/vc5_emit.c @@ -569,6 +569,9 @@ v3dX(emit_state)(struct pipe_context *pctx) } } + /* Set up the transform feedback data specs (which VPM entries to + * output to which buffers). + */ if (vc5->dirty & VC5_DIRTY_STREAMOUT) { struct vc5_streamout_stateobj *so = &vc5->streamout; @@ -593,42 +596,44 @@ v3dX(emit_state)(struct pipe_context *pctx) cl_emit_prepacked(&job->bcl, &vc5->prog.bind_vs->tf_specs[i]); } + } + } - for (int i = 0; i < so->num_targets; i++) { - const struct pipe_stream_output_target *target = - so->targets[i]; - struct vc5_resource *rsc = target ? - vc5_resource(target->buffer) : NULL; + /* Set up the trasnform feedback buffers. */ + if (vc5->dirty & VC5_DIRTY_STREAMOUT) { + struct vc5_streamout_stateobj *so = &vc5->streamout; + for (int i = 0; i < so->num_targets; i++) { + const struct pipe_stream_output_target *target = + so->targets[i]; + struct vc5_resource *rsc = target ? + vc5_resource(target->buffer) : NULL; #if V3D_VERSION >= 40 - if (!target) - continue; + if (!target) + continue; - cl_emit(&job->bcl, TRANSFORM_FEEDBACK_BUFFER, output) { - output.buffer_address = + cl_emit(&job->bcl, TRANSFORM_FEEDBACK_BUFFER, output) { + output.buffer_address = + cl_address(rsc->bo, + target->buffer_offset); + output.buffer_size_in_32_bit_words = + target->buffer_size >> 2; + output.buffer_number = i; + } +#else /* V3D_VERSION < 40 */ + cl_emit(&job->bcl, TRANSFORM_FEEDBACK_OUTPUT_ADDRESS, output) { + if (target) { + output.address = cl_address(rsc->bo, target->buffer_offset); - output.buffer_size_in_32_bit_words = - target->buffer_size >> 2; - output.buffer_number = i; } -#else /* V3D_VERSION < 40 */ - cl_emit(&job->bcl, TRANSFORM_FEEDBACK_OUTPUT_ADDRESS, output) { - if (target) { - output.address = - cl_address(rsc->bo, - target->buffer_offset); - } - }; + }; #endif /* V3D_VERSION < 40 */ - if (target) { - vc5_job_add_write_resource(vc5->job, - target->buffer); - } - /* XXX: buffer_size? */ + if (target) { + vc5_job_add_write_resource(vc5->job, + target->buffer); } - } else { - /* XXX? */ + /* XXX: buffer_size? */ } } |