From 77047736198a4e329e1746bcc1ea64fc2d713600 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 11 Apr 2023 17:05:52 -0400 Subject: [PATCH] zink: handle swapchain handoffs around makecurrent when a new resource is created for an extant swapchain, the existing acquire (if any) should be transferred to the resource to ensure expected behavior this should be enough to fix piglit's glx-make-current Part-of: --- src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt | 1 - src/gallium/drivers/zink/ci/zink-lvp-skips.txt | 1 - .../drivers/zink/ci/zink-radv-navi10-fails.txt | 1 - .../drivers/zink/ci/zink-radv-vangogh-fails.txt | 1 - src/gallium/drivers/zink/zink_resource.c | 11 +++++++++++ 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt b/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt index 5c02ab04e02..e9c79353369 100644 --- a/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt @@ -115,7 +115,6 @@ glx@glx_ext_import_context@query context info,Fail glx@glx-buffer-age,Fail glx@glx-buffer-age vblank_mode=0,Fail -glx@glx-make-current,Fail glx@glx-multi-window-single-context,Crash glx@glx-swap-pixmap-bad,Fail glx@glx-tfp,Crash diff --git a/src/gallium/drivers/zink/ci/zink-lvp-skips.txt b/src/gallium/drivers/zink/ci/zink-lvp-skips.txt index 5bb31f5cace..7226486adfb 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-skips.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-skips.txt @@ -10,7 +10,6 @@ KHR-GL46.shader_ballot_tests.ShaderBallotFunctionRead # ignores copied from the old runner script spec@arb_map_buffer_alignment@arb_map_buffer_alignment-map-invalidate-range -glx@glx-make-current spec@arb_timer_query.* spec@arb_sample_shading@builtin-gl-sample-mask spec@glsl-1.30@execution@tex-miplevel-selection.* diff --git a/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt index 7084b29940f..1e2c4a90dba 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt @@ -22,7 +22,6 @@ glx@glx_ext_import_context@imported context has same context id,Fail glx@glx_ext_import_context@make current- multi process,Fail glx@glx_ext_import_context@make current- single process,Fail glx@glx_ext_import_context@query context info,Fail -glx@glx-make-current,Fail glx@glx-swap-pixmap-bad,Fail # #6322 diff --git a/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt index 5fac92a1dcf..34bb8784a0d 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt @@ -22,7 +22,6 @@ glx@glx_ext_import_context@imported context has same context id,Fail glx@glx_ext_import_context@make current- multi process,Fail glx@glx_ext_import_context@make current- single process,Fail glx@glx_ext_import_context@query context info,Fail -glx@glx-make-current,Fail glx@glx-swap-pixmap-bad,Fail # #6322 diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index cf4e5abc1de..18886c6822b 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1257,6 +1257,17 @@ resource_create(struct pipe_screen *pscreen, FREE_CL(res); return NULL; } + struct kopper_displaytarget *cdt = res->obj->dt; + if (cdt->swapchain->num_acquires) { + /* this should be a reused swapchain after a MakeCurrent dance that deleted the original resource */ + for (unsigned i = 0; i < cdt->swapchain->num_images; i++) { + if (!cdt->swapchain->images[i].acquired) + continue; + res->obj->dt_idx = i; + res->obj->image = cdt->swapchain->images[i].image; + res->layout = cdt->swapchain->images[i].layout; + } + } } else { /* frontbuffer */ struct zink_resource *back = (void*)loader_private;