X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Firis%2Firis_pipe_control.c;h=3d12a5b03603f805f0063acec0299eacb58315a8;hb=4f1319a17dc795cb76cd97853b15bfd1dfb02a14;hp=5e5a996e40b189cf4df0a781aa8301b9185953ae;hpb=f1a7392be17573169460971b487ad25cb2ce43df;p=mesa.git diff --git a/src/gallium/drivers/iris/iris_pipe_control.c b/src/gallium/drivers/iris/iris_pipe_control.c index 5e5a996e40b..3d12a5b0360 100644 --- a/src/gallium/drivers/iris/iris_pipe_control.c +++ b/src/gallium/drivers/iris/iris_pipe_control.c @@ -149,8 +149,12 @@ static void iris_texture_barrier(struct pipe_context *ctx, unsigned flags) { struct iris_context *ice = (void *) ctx; + struct iris_batch *render_batch = &ice->batches[IRIS_BATCH_RENDER]; + struct iris_batch *compute_batch = &ice->batches[IRIS_BATCH_COMPUTE]; - if (ice->batches[IRIS_BATCH_RENDER].contains_draw) { + if (render_batch->contains_draw || + render_batch->cache.render->entries || + render_batch->cache.depth->entries) { iris_emit_pipe_control_flush(&ice->batches[IRIS_BATCH_RENDER], PIPE_CONTROL_DEPTH_CACHE_FLUSH | PIPE_CONTROL_RENDER_TARGET_FLUSH | @@ -159,7 +163,7 @@ iris_texture_barrier(struct pipe_context *ctx, unsigned flags) PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE); } - if (ice->batches[IRIS_BATCH_COMPUTE].contains_draw) { + if (compute_batch->contains_draw) { iris_emit_pipe_control_flush(&ice->batches[IRIS_BATCH_COMPUTE], PIPE_CONTROL_CS_STALL); iris_emit_pipe_control_flush(&ice->batches[IRIS_BATCH_COMPUTE], @@ -184,22 +188,14 @@ iris_memory_barrier(struct pipe_context *ctx, unsigned flags) PIPE_CONTROL_CONST_CACHE_INVALIDATE; } - if (flags & PIPE_BARRIER_TEXTURE) { - bits |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE; - } - - if (flags & PIPE_BARRIER_FRAMEBUFFER) { + if (flags & (PIPE_BARRIER_TEXTURE | PIPE_BARRIER_FRAMEBUFFER)) { bits |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE | PIPE_CONTROL_RENDER_TARGET_FLUSH; } - // XXX: MAPPED_BUFFER, QUERY_BUFFER, STREAMOUT_BUFFER, GLOBAL_BUFFER? - - // XXX: don't unconditionally emit flushes in both engines, we don't - // even know if we're even using e.g. the compute engine... - for (int i = 0; i < IRIS_BATCH_COUNT; i++) { - if (ice->batches[i].contains_draw) + if (ice->batches[i].contains_draw || + ice->batches[i].cache.render->entries) iris_emit_pipe_control_flush(&ice->batches[i], bits); } }