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.
This commit is contained in:
Eric Anholt
2018-03-23 15:40:36 -07:00
parent 9e62aec9cd
commit 09ac5ade8f
+32 -27
View File
@@ -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? */
}
}