From cbbd6a61c460439a4cde3ad2782e61b997d6a091 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 26 Jun 2018 07:31:56 -0700 Subject: [PATCH] iris: maybe-flush before blorp operations otherwise if we have a lot of back-to-back blorp operations we can potentially overflow even the chained batch --- src/gallium/drivers/iris/iris_blit.c | 12 ++++++++++-- src/gallium/drivers/iris/iris_clear.c | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/iris/iris_blit.c b/src/gallium/drivers/iris/iris_blit.c index 79d98792f93..da23a9d524c 100644 --- a/src/gallium/drivers/iris/iris_blit.c +++ b/src/gallium/drivers/iris/iris_blit.c @@ -99,8 +99,12 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info) GLenum filter = info->filter == PIPE_TEX_FILTER_LINEAR ? GL_LINEAR : GL_NEAREST; + struct iris_batch *batch = &ice->render_batch; + + iris_batch_maybe_flush(batch, 1500); + struct blorp_batch blorp_batch; - blorp_batch_init(&ice->blorp, &blorp_batch, &ice->render_batch, 0); + blorp_batch_init(&ice->blorp, &blorp_batch, batch, 0); blorp_blit(&blorp_batch, &src_surf, info->src.level, src_layer, src_isl_format, src_isl_swizzle, &dst_surf, info->dst.level, dst_layer, @@ -130,8 +134,12 @@ iris_resource_copy_region(struct pipe_context *ctx, unsigned dst_layer = dstz; unsigned src_layer = src_box->z; + struct iris_batch *batch = &ice->render_batch; + + iris_batch_maybe_flush(batch, 1500); + struct blorp_batch blorp_batch; - blorp_batch_init(&ice->blorp, &blorp_batch, &ice->render_batch, 0); + blorp_batch_init(&ice->blorp, &blorp_batch, batch, 0); blorp_copy(&blorp_batch, &src_surf, src_level, src_layer, &dst_surf, dst_level, dst_layer, src_box->x, src_box->y, dstx, dsty, diff --git a/src/gallium/drivers/iris/iris_clear.c b/src/gallium/drivers/iris/iris_clear.c index 08453789078..01f6459051b 100644 --- a/src/gallium/drivers/iris/iris_clear.c +++ b/src/gallium/drivers/iris/iris_clear.c @@ -45,8 +45,12 @@ iris_clear(struct pipe_context *ctx, struct iris_context *ice = (void *) ctx; assert(buffers != 0); + struct iris_batch *batch = &ice->render_batch; + + iris_batch_maybe_flush(batch, 1500); + struct blorp_batch blorp_batch; - blorp_batch_init(&ice->blorp, &blorp_batch, &ice->render_batch, 0); + blorp_batch_init(&ice->blorp, &blorp_batch, batch, 0); if (buffers & PIPE_CLEAR_DEPTHSTENCIL) { fprintf(stderr, "XXX: depth/stencil clears not implemented\n"); -- 2.30.2