[Mesa-dev] [PATCH] radv: mark the fence as submitted and signalled in vkAcquireNextImageKHR

Fredrik Höglund fredrik at kde.org
Tue Oct 25 18:31:41 UTC 2016


This stops the debug layers from complaining when fences are used to
throttle image acquisition.
---
 src/amd/vulkan/radv_device.c  |  6 ------
 src/amd/vulkan/radv_private.h |  7 +++++++
 src/amd/vulkan/radv_wsi.c     | 14 +++++++++++---
 3 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index af5a151..7410bbc 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -44,12 +44,6 @@
 #include "util/debug.h"
 struct radv_dispatch_table dtable;
 
-struct radv_fence {
-	struct radeon_winsys_fence *fence;
-	bool submitted;
-	bool signalled;
-};
-
 static VkResult
 radv_physical_device_init(struct radv_physical_device *device,
 			  struct radv_instance *instance,
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index caf27f2..cfdda36 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1206,6 +1206,13 @@ void radv_initialise_cmask(struct radv_cmd_buffer *cmd_buffer,
 			   struct radv_image *image, uint32_t value);
 void radv_initialize_dcc(struct radv_cmd_buffer *cmd_buffer,
 			 struct radv_image *image, uint32_t value);
+
+struct radv_fence {
+	struct radeon_winsys_fence *fence;
+	bool submitted;
+	bool signalled;
+};
+
 #define RADV_DEFINE_HANDLE_CASTS(__radv_type, __VkType)		\
 								\
 	static inline struct __radv_type *			\
diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c
index 948be63..a946bd4 100644
--- a/src/amd/vulkan/radv_wsi.c
+++ b/src/amd/vulkan/radv_wsi.c
@@ -318,13 +318,21 @@ VkResult radv_AcquireNextImageKHR(
 	VkSwapchainKHR                               _swapchain,
 	uint64_t                                     timeout,
 	VkSemaphore                                  semaphore,
-	VkFence                                      fence,
+	VkFence                                      _fence,
 	uint32_t*                                    pImageIndex)
 {
 	RADV_FROM_HANDLE(wsi_swapchain, swapchain, _swapchain);
+	RADV_FROM_HANDLE(radv_fence, fence, _fence);
 
-	return swapchain->acquire_next_image(swapchain, timeout, semaphore,
-					     pImageIndex);
+	VkResult result = swapchain->acquire_next_image(swapchain, timeout, semaphore,
+	                                                pImageIndex);
+
+	if (fence && result == VK_SUCCESS) {
+		fence->submitted = true;
+		fence->signalled = true;
+	}
+
+	return result;
 }
 
 VkResult radv_QueuePresentKHR(
-- 
2.1.4



More information about the mesa-dev mailing list