kopper: check swapchain size after possible loader image resize

previously the size was checked at the top of the function, but this
ignored cases where the loader might end up resizing the drawable,
resulting in an attempted 0x0 swapchain creation based on stale
geometry

cc: mesa-stable

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30487>
(cherry picked from commit a6d97b0afe)
This commit is contained in:
Mike Blumenkrantz 2024-08-02 09:34:29 -04:00 committed by Eric Engestrom
parent f3195e77dc
commit ca46312b87
2 changed files with 11 additions and 8 deletions

View file

@ -5514,7 +5514,7 @@
"description": "kopper: check swapchain size after possible loader image resize",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -425,12 +425,6 @@ kopper_allocate_textures(struct dri_context *ctx,
bool is_window = drawable->is_window;
bool is_pixmap = !is_window && drawable->info.bos.sType == VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
width = drawable->w;
height = drawable->h;
resized = (drawable->old_w != width ||
drawable->old_h != height);
/* Wait for glthread to finish because we can't use pipe_context from
* multiple threads.
*/
@ -480,7 +474,16 @@ kopper_allocate_textures(struct dri_context *ctx,
} else {
ctx->is_shared_buffer_bound = false;
}
} else {
}
/* check size after possible loader image resize */
width = drawable->w;
height = drawable->h;
resized = (drawable->old_w != width ||
drawable->old_h != height);
if (!image) {
/* remove outdated textures */
if (resized) {
for (i = 0; i < ST_ATTACHMENT_COUNT; i++) {