Mesa (master): radv/wsi: fix app that acquire multiple images up front

Dave Airlie airlied at kemper.freedesktop.org
Thu Oct 13 18:45:19 UTC 2016


Module: Mesa
Branch: master
Commit: 8bdac874e667179bd2682f0111cd7db58b858e5b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bdac874e667179bd2682f0111cd7db58b858e5b

Author: Dave Airlie <airlied at redhat.com>
Date:   Thu Oct 13 12:38:49 2016 +1000

radv/wsi: fix app that acquire multiple images up front

dota2 does multiple acquires followed by multiple queues,
this bug manifested itself as a hang in the xshmfence code
randomly when dota2 was doing it's menus. It also occured
when running dota2 under phoronix-test-suite.

The fix is once the image is acquired to mark it busy then
so nobody else can acquire. We have to trust vulkan apps
that they will eventually submit it.

Acked-by: Edward O'Callaghan <funfunctor at folklore1984.net>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/amd/vulkan/radv_wsi_wayland.c | 1 +
 src/amd/vulkan/radv_wsi_x11.c     | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/amd/vulkan/radv_wsi_wayland.c b/src/amd/vulkan/radv_wsi_wayland.c
index 2b4a3d3..5ce2e9e 100644
--- a/src/amd/vulkan/radv_wsi_wayland.c
+++ b/src/amd/vulkan/radv_wsi_wayland.c
@@ -521,6 +521,7 @@ wsi_wl_swapchain_acquire_next_image(struct radv_swapchain *radv_chain,
 			if (!chain->images[i].busy) {
 				/* We found a non-busy image */
 				*image_index = i;
+				chain->images[image_index].busy = true;
 				return VK_SUCCESS;
 			}
 		}
diff --git a/src/amd/vulkan/radv_wsi_x11.c b/src/amd/vulkan/radv_wsi_x11.c
index 0aae2a3..9cd0db0 100644
--- a/src/amd/vulkan/radv_wsi_x11.c
+++ b/src/amd/vulkan/radv_wsi_x11.c
@@ -579,6 +579,7 @@ x11_acquire_next_image(struct radv_swapchain *radv_chain,
 				/* We found a non-busy image */
 				xshmfence_await(chain->images[i].shm_fence);
 				*image_index = i;
+				chain->images[i].busy = true;
 				return VK_SUCCESS;
 			}
 		}




More information about the mesa-commit mailing list