Mesa (master): zink: add layout member to barrier setup in draw

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 22 03:11:08 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Mon Aug 10 14:41:36 2020 -0400

zink: add layout member to barrier setup in draw

this lets us track different layouts

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8630>

---

 src/gallium/drivers/zink/zink_draw.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c
index 7e893e26fb2..4b876347b80 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -327,7 +327,10 @@ zink_draw_vbo(struct pipe_context *pctx,
    VkBufferView buffer_view[] = {VK_NULL_HANDLE};
    int num_wds = 0, num_buffer_info = 0, num_image_info = 0;
 
-   struct zink_resource *transitions[PIPE_SHADER_TYPES * (PIPE_MAX_SAMPLERS + PIPE_MAX_SHADER_IMAGES)];
+   struct {
+      struct zink_resource *res;
+      VkImageLayout layout;
+   } transitions[PIPE_SHADER_TYPES * (PIPE_MAX_SAMPLERS + PIPE_MAX_SHADER_IMAGES)];
    int num_transitions = 0;
 
    for (int i = 0; i < ARRAY_SIZE(ctx->gfx_stages); i++) {
@@ -396,8 +399,10 @@ zink_draw_vbo(struct pipe_context *pctx,
                   else {
                      imageview =sampler_view->image_view;
                      layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
-                     if (res->layout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
-                        transitions[num_transitions++] = res;
+                     if (res->layout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) {
+                        transitions[num_transitions].layout = layout;
+                        transitions[num_transitions++].res = res;
+                     }
                      sampler = ctx->samplers[i][index + k];
                   }
                   read_desc_resources[num_wds] = res;
@@ -418,8 +423,8 @@ zink_draw_vbo(struct pipe_context *pctx,
                      layout = res->layout;
                      if (res->layout != VK_IMAGE_LAYOUT_GENERAL &&
                          res->layout != VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR) {
-                        transitions[num_transitions++] = res;
-                        layout = VK_IMAGE_LAYOUT_GENERAL;
+                        transitions[num_transitions].res = res;
+                        transitions[num_transitions++].layout = VK_IMAGE_LAYOUT_GENERAL;
                      }
                   }
                   if (image_view->base.access & PIPE_IMAGE_ACCESS_WRITE)
@@ -482,9 +487,9 @@ zink_draw_vbo(struct pipe_context *pctx,
       batch = zink_batch_no_rp(ctx);
 
       for (int i = 0; i < num_transitions; ++i)
-         zink_resource_barrier(batch->cmdbuf, transitions[i],
-                               transitions[i]->aspect,
-                               VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
+         zink_resource_barrier(batch->cmdbuf, transitions[i].res,
+                               transitions[i].res->aspect,
+                               transitions[i].layout);
    }
 
    if (ctx->xfb_barrier)



More information about the mesa-commit mailing list