Module: Mesa Branch: main Commit: 651b71a6ca829bc7977748d506fc3b2afd8e7999 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=651b71a6ca829bc7977748d506fc3b2afd8e7999
Author: Mike Blumenkrantz <[email protected]> Date: Tue Apr 19 10:50:23 2022 -0400 zink: flag swapchains when updating fails these are dead, they just don't know it yet Reviewed-by: Adam Jackson <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16038> --- src/gallium/drivers/zink/zink_kopper.c | 5 +++++ src/gallium/drivers/zink/zink_kopper.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c index 12156989653..90203caa057 100644 --- a/src/gallium/drivers/zink/zink_kopper.c +++ b/src/gallium/drivers/zink/zink_kopper.c @@ -513,6 +513,10 @@ zink_kopper_acquire(struct zink_context *ctx, struct zink_resource *res, uint64_ { assert(res->obj->dt); struct kopper_displaytarget *cdt = kopper_displaytarget(res->obj->dt); + if (cdt->is_kill) { + kill_swapchain(ctx, res); + return false; + } const struct kopper_swapchain *cswap = cdt->swapchain; res->obj->new_dt |= res->base.b.width0 != cswap->scci.imageExtent.width || res->base.b.height0 != cswap->scci.imageExtent.height; @@ -738,6 +742,7 @@ zink_kopper_update(struct pipe_screen *pscreen, struct pipe_resource *pres, int } if (update_caps(screen, cdt) != VK_SUCCESS) { mesa_loge("zink: failed to update swapchain capabilities"); + cdt->is_kill = true; return false; } *w = cdt->caps.currentExtent.width; diff --git a/src/gallium/drivers/zink/zink_kopper.h b/src/gallium/drivers/zink/zink_kopper.h index 61e0db96738..77c102a261d 100644 --- a/src/gallium/drivers/zink/zink_kopper.h +++ b/src/gallium/drivers/zink/zink_kopper.h @@ -69,6 +69,7 @@ struct kopper_displaytarget VkSurfaceCapabilitiesKHR caps; VkImageFormatListCreateInfoKHR format_list; enum kopper_type type; + bool is_kill; }; struct zink_context;
