Mesa (master): zink: more accurately track supported blits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 17 15:54:13 UTC 2020


Module: Mesa
Branch: master
Commit: 19906022e22cb37493861b6976c9623618b5b769
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=19906022e22cb37493861b6976c9623618b5b769

Author: Erik Faye-Lund <kusmabite at gmail.com>
Date:   Fri Nov 13 16:53:04 2020 +0100

zink: more accurately track supported blits

We don't care if blits need to respect render-conditions if there's no
active one. So let's hit the potentially faster native blit-paths
instead.

Fixes: 5743fa6e709 ("zink: enable conditional rendering if available")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3792
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7606>

---

 src/gallium/drivers/zink/zink_blit.c    | 14 ++++++++++----
 src/gallium/drivers/zink/zink_context.h |  2 +-
 src/gallium/drivers/zink/zink_query.c   |  2 ++
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_blit.c b/src/gallium/drivers/zink/zink_blit.c
index 2a902d2672a..4bcb43a2a81 100644
--- a/src/gallium/drivers/zink/zink_blit.c
+++ b/src/gallium/drivers/zink/zink_blit.c
@@ -14,8 +14,11 @@ blit_resolve(struct zink_context *ctx, const struct pipe_blit_info *info)
        util_format_get_mask(info->src.format) != info->mask ||
        util_format_is_depth_or_stencil(info->dst.format) ||
        info->scissor_enable ||
-       info->alpha_blend ||
-       info->render_condition_enable)
+       info->alpha_blend)
+      return false;
+
+   if (info->render_condition_enable &&
+       ctx->render_condition_active)
       return false;
 
    struct zink_resource *src = zink_resource(info->src.resource);
@@ -67,8 +70,11 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info)
    if (util_format_get_mask(info->dst.format) != info->mask ||
        util_format_get_mask(info->src.format) != info->mask ||
        info->scissor_enable ||
-       info->alpha_blend ||
-       info->render_condition_enable)
+       info->alpha_blend)
+      return false;
+
+   if (info->render_condition_enable &&
+       ctx->render_condition_active)
       return false;
 
    if (util_format_is_depth_or_stencil(info->dst.format) &&
diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h
index 593c02228e5..d0d0b79b986 100644
--- a/src/gallium/drivers/zink/zink_context.h
+++ b/src/gallium/drivers/zink/zink_context.h
@@ -130,7 +130,7 @@ struct zink_context {
 
    struct list_head suspended_queries;
    struct list_head primitives_generated_queries;
-   bool queries_disabled;
+   bool queries_disabled, render_condition_active;
 
    struct pipe_resource *dummy_buffer;
    struct pipe_resource *null_buffers[5]; /* used to create zink_framebuffer->null_surface, one buffer per samplecount */
diff --git a/src/gallium/drivers/zink/zink_query.c b/src/gallium/drivers/zink/zink_query.c
index 4df778e3f3e..0d018c0f744 100644
--- a/src/gallium/drivers/zink/zink_query.c
+++ b/src/gallium/drivers/zink/zink_query.c
@@ -492,6 +492,7 @@ zink_render_condition(struct pipe_context *pctx,
 
    if (query == NULL) {
       screen->vk_CmdEndConditionalRenderingEXT(batch->cmdbuf);
+      ctx->render_condition_active = false;
       return;
    }
 
@@ -528,6 +529,7 @@ zink_render_condition(struct pipe_context *pctx,
    begin_info.buffer = res->buffer;
    begin_info.flags = begin_flags;
    screen->vk_CmdBeginConditionalRenderingEXT(batch->cmdbuf, &begin_info);
+   ctx->render_condition_active = true;
 
    zink_batch_reference_resource_rw(batch, res, true);
 



More information about the mesa-commit mailing list