}
}
+static void
+flush_ubos(struct iris_batch *batch,
+ struct iris_shader_state *shs)
+{
+ uint32_t cbufs = shs->bound_cbufs;
+
+ while (cbufs) {
+ const int i = u_bit_scan(&cbufs);
+ struct pipe_shader_buffer *cbuf = &shs->constbuf[i];
+ struct iris_resource *res = (void *)cbuf->buffer;
+ iris_emit_buffer_barrier_for(batch, res->bo, IRIS_DOMAIN_OTHER_READ);
+ }
+}
static void
flush_ssbos(struct iris_batch *batch,
consider_framebuffer);
flush_ssbos(batch, shs);
}
+
+ if (ice->state.stage_dirty & (IRIS_STAGE_DIRTY_CONSTANTS_VS << stage))
+ flush_ubos(batch, shs);
}
void
assert(map);
memcpy(map, input->user_buffer, input->buffer_size);
} else if (input->buffer) {
+ if (cbuf->buffer != input->buffer) {
+ ice->state.dirty |= (IRIS_DIRTY_RENDER_RESOLVES_AND_FLUSHES |
+ IRIS_DIRTY_COMPUTE_RESOLVES_AND_FLUSHES);
+ }
+
if (take_ownership) {
pipe_resource_reference(&cbuf->buffer, NULL);
cbuf->buffer = input->buffer;
if (res->bo == iris_resource_bo(cbuf->buffer)) {
pipe_resource_reference(&surf_state->res, NULL);
+ ice->state.dirty |= (IRIS_DIRTY_RENDER_RESOLVES_AND_FLUSHES |
+ IRIS_DIRTY_COMPUTE_RESOLVES_AND_FLUSHES);
ice->state.stage_dirty |= IRIS_STAGE_DIRTY_CONSTANTS_VS << s;
}
}