From e00985d5d4f5ac8d7d3cfe27fb5a0f7333d17f76 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 1 Oct 2021 02:06:45 -0700 Subject: [PATCH] iris: Set BLORP_BATCH_USE_{COMPUTE,BLITTER} flags for the target batch This makes blits, copies, and (non-fast) clears set the appropriate BLORP_BATCH_USE_{COMPUTE,BLITTER} flag if their batch is either IRIS_BATCH_COMPUTE or IRIS_BATCH_BLITTER. We ignore the other operations for now as those don't support compute or blit yet. Of course, there is no code to attempt to launch BLORP operations on either the compute or blitter batches yet, but that will come in time. Reviewed-by: Caio Oliveira Part-of: --- src/gallium/drivers/iris/iris_blit.c | 6 ++++-- src/gallium/drivers/iris/iris_clear.c | 2 +- src/gallium/drivers/iris/iris_context.h | 11 +++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/iris/iris_blit.c b/src/gallium/drivers/iris/iris_blit.c index dfc3b2ed690..504817de210 100644 --- a/src/gallium/drivers/iris/iris_blit.c +++ b/src/gallium/drivers/iris/iris_blit.c @@ -356,7 +356,7 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info) struct iris_screen *screen = (struct iris_screen *)ctx->screen; const struct intel_device_info *devinfo = &screen->devinfo; struct iris_batch *batch = &ice->batches[IRIS_BATCH_RENDER]; - enum blorp_batch_flags blorp_flags = 0; + enum blorp_batch_flags blorp_flags = iris_blorp_flags_for_batch(batch); /* We don't support color masking. */ assert((info->mask & PIPE_MASK_RGBA) == PIPE_MASK_RGBA || @@ -644,7 +644,9 @@ iris_copy_region(struct blorp_context *blorp, if (dst->target == PIPE_BUFFER) util_range_add(&dst_res->base.b, &dst_res->valid_buffer_range, dstx, dstx + src_box->width); - blorp_batch_init(blorp, &blorp_batch, batch, 0); + enum blorp_batch_flags blorp_flags = iris_blorp_flags_for_batch(batch); + + blorp_batch_init(blorp, &blorp_batch, batch, blorp_flags); if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) { struct blorp_address src_addr = { diff --git a/src/gallium/drivers/iris/iris_clear.c b/src/gallium/drivers/iris/iris_clear.c index c7f2f32c370..71385bce447 100644 --- a/src/gallium/drivers/iris/iris_clear.c +++ b/src/gallium/drivers/iris/iris_clear.c @@ -315,7 +315,7 @@ clear_color(struct iris_context *ice, struct iris_batch *batch = &ice->batches[IRIS_BATCH_RENDER]; const struct intel_device_info *devinfo = &batch->screen->devinfo; - enum blorp_batch_flags blorp_flags = 0; + enum blorp_batch_flags blorp_flags = iris_blorp_flags_for_batch(batch); if (render_condition_enabled) { if (ice->state.predicate == IRIS_PREDICATE_STATE_DONT_RENDER) diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index bee9ce2201f..69504dc52f3 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -894,6 +894,17 @@ void iris_copy_region(struct blorp_context *blorp, unsigned src_level, const struct pipe_box *src_box); +static inline enum blorp_batch_flags +iris_blorp_flags_for_batch(struct iris_batch *batch) +{ + if (batch->name == IRIS_BATCH_COMPUTE) + return BLORP_BATCH_USE_COMPUTE; + + if (batch->name == IRIS_BATCH_BLITTER) + return BLORP_BATCH_USE_BLITTER; + + return 0; +} /* iris_draw.c */