Mesa (main): zink: fix/improve swapchain surface info updating

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Apr 26 19:21:00 UTC 2022


Module: Mesa
Branch: main
Commit: 305fe87d9807d0e4b8f79e1f9ee280a8dcd92314
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=305fe87d9807d0e4b8f79e1f9ee280a8dcd92314

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Mon Apr 25 15:43:40 2022 -0400

zink: fix/improve swapchain surface info updating

if the swapchain is updated, the base surface info needs to be updated
so that the surface info used for the framebuffer is updated

Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16151>

---

 src/gallium/drivers/zink/zink_kopper.c  | 10 ++++++++--
 src/gallium/drivers/zink/zink_surface.c |  2 ++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c
index 3773d925e4c..18c55d3c90e 100644
--- a/src/gallium/drivers/zink/zink_kopper.c
+++ b/src/gallium/drivers/zink/zink_kopper.c
@@ -502,8 +502,11 @@ zink_kopper_acquire(struct zink_context *ctx, struct zink_resource *res, uint64_
                        res->base.b.height0 != cswap->scci.imageExtent.height;
    VkResult ret = kopper_acquire(zink_screen(ctx->base.screen), res, timeout);
    if (ret == VK_SUCCESS || ret == VK_SUBOPTIMAL_KHR) {
-      if (cswap != cdt->swapchain)
+      if (cswap != cdt->swapchain) {
          ctx->swapchain_size = cdt->swapchain->scci.imageExtent;
+         res->base.b.width0 = ctx->swapchain_size.width;
+         res->base.b.height0 = ctx->swapchain_size.height;
+      }
    } else if (is_swapchain_kill(ret)) {
       kill_swapchain(ctx, res);
    }
@@ -664,8 +667,11 @@ zink_kopper_acquire_readback(struct zink_context *ctx, struct zink_resource *res
          return false;
       }
    }
-   if (cswap != cdt->swapchain)
+   if (cswap != cdt->swapchain) {
       ctx->swapchain_size = cdt->swapchain->scci.imageExtent;
+      res->base.b.width0 = ctx->swapchain_size.width;
+      res->base.b.height0 = ctx->swapchain_size.height;
+   }
    return true;
 }
 
diff --git a/src/gallium/drivers/zink/zink_surface.c b/src/gallium/drivers/zink/zink_surface.c
index 373650415a8..9a3eca57756 100644
--- a/src/gallium/drivers/zink/zink_surface.c
+++ b/src/gallium/drivers/zink/zink_surface.c
@@ -434,6 +434,8 @@ zink_surface_swapchain_update(struct zink_context *ctx, struct zink_surface *sur
       surface->old_swapchain_size = surface->swapchain_size;
       surface->swapchain_size = cdt->swapchain->num_images;
       surface->swapchain = calloc(surface->swapchain_size, sizeof(VkImageView));
+      surface->base.width = res->base.b.width0;
+      surface->base.height = res->base.b.height0;
       init_surface_info(surface, res, &surface->ivci);
    }
    if (!surface->swapchain[res->obj->dt_idx]) {



More information about the mesa-commit mailing list