unsigned num_samplers[MESA_SHADER_STAGES];
unsigned num_textures[MESA_SHADER_STAGES];
- /** 3DSTATE_STREAMOUT and 3DSTATE_SO_DECL_LIST packets */
+ struct pipe_stream_output_target *so_target[PIPE_MAX_SO_BUFFERS];
bool streamout_active;
+ /** 3DSTATE_STREAMOUT and 3DSTATE_SO_DECL_LIST packets */
uint32_t *streamout;
struct iris_state_ref unbound_tex;
ice->state.dirty |= IRIS_DIRTY_STREAMOUT;
}
+ for (int i = 0; i < 4; i++) {
+ pipe_so_target_reference(&ice->state.so_target[i],
+ i < num_targets ? targets[i] : NULL);
+ }
+
/* No need to update 3DSTATE_SO_BUFFER unless SOL is active. */
if (!active)
return;
if (dirty & IRIS_DIRTY_SO_BUFFERS) {
iris_batch_emit(batch, genx->so_buffers,
4 * 4 * GENX(3DSTATE_SO_BUFFER_length));
+ for (int i = 0; i < 4; i++) {
+ struct iris_stream_output_target *tgt =
+ (void *) ice->state.so_target[i];
+ if (tgt) {
+ iris_use_pinned_bo(batch, iris_resource_bo(tgt->base.buffer),
+ true);
+ iris_use_pinned_bo(batch, iris_resource_bo(tgt->offset.res), true);
+ }
+ }
}
if ((dirty & IRIS_DIRTY_SO_DECL_LIST) && ice->state.streamout) {