summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2022-04-25 15:43:40 -0400
committerMarge Bot <emma+marge@anholt.net>2022-04-27 03:54:29 +0000
commit939a0cf876507684c40d6fb523336c767ef455cd (patch)
treef2b3ab58b93f1d2f8ccca72f5a1986b88b09b507
parentc074592f3d07cf7e224f716f29434be801b558f4 (diff)
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@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16179>
-rw-r--r--src/gallium/drivers/zink/zink_kopper.c10
-rw-r--r--src/gallium/drivers/zink/zink_surface.c2
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 6cf98a5e337..ccfb03c76c6 100644
--- a/src/gallium/drivers/zink/zink_surface.c
+++ b/src/gallium/drivers/zink/zink_surface.c
@@ -466,6 +466,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]) {