summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2024-04-24 12:44:06 -0400
committerEric Engestrom <eric@engestrom.ch>2024-05-07 17:20:12 +0200
commita351cbeff60f06f5f07418a3e5e0ab02a8b31ef5 (patch)
tree212a42f7c6b7a6ca96988250719905f984b71fa8
parentc5633dbbe344a65f84640f291d0746d84b8b3a68 (diff)
zink: slightly better swapinterval failure handling
retain the old mode and print an error cc: mesa-stable Acked-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28904> (cherry picked from commit 19e8df39b62a26ae55273de7b4866c24d1657dda)
-rw-r--r--.pick_status.json2
-rw-r--r--src/gallium/drivers/zink/zink_kopper.c11
2 files changed, 10 insertions, 3 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 05ad3f6c865..8a39edbb1ef 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -2244,7 +2244,7 @@
"description": "zink: slightly better swapinterval failure handling",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null
diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c
index f936d47c61f..f68225176a8 100644
--- a/src/gallium/drivers/zink/zink_kopper.c
+++ b/src/gallium/drivers/zink/zink_kopper.c
@@ -1066,14 +1066,21 @@ zink_kopper_set_swap_interval(struct pipe_screen *pscreen, struct pipe_resource
{
struct zink_resource *res = zink_resource(pres);
struct zink_screen *screen = zink_screen(pscreen);
+ if (!res->obj->dt)
+ fprintf(stderr, "NOT SWAPCHAIN %p\n", res);
assert(res->obj->dt);
struct kopper_displaytarget *cdt = res->obj->dt;
VkPresentModeKHR old_present_mode = cdt->present_mode;
zink_kopper_set_present_mode_for_interval(cdt, interval);
- if (old_present_mode != cdt->present_mode)
- update_swapchain(screen, cdt, cdt->caps.currentExtent.width, cdt->caps.currentExtent.height);
+ if (old_present_mode == cdt->present_mode)
+ return;
+ VkResult ret = update_swapchain(screen, cdt, cdt->caps.currentExtent.width, cdt->caps.currentExtent.height);
+ if (ret == VK_SUCCESS)
+ return;
+ cdt->present_mode = old_present_mode;
+ mesa_loge("zink: failed to set swap interval!");
}
int