[Mesa-dev] [RFC 2/5] vulkan: Check whether X server supports DMA fences
Louis-Francis Ratté-Boulianne
lfrb at collabora.com
Thu Aug 31 05:19:36 UTC 2017
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb at collabora.com>
---
src/vulkan/wsi/wsi_common_x11.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
index ecdaf91434..d132541156 100644
--- a/src/vulkan/wsi/wsi_common_x11.c
+++ b/src/vulkan/wsi/wsi_common_x11.c
@@ -628,6 +628,8 @@ struct x11_image {
struct x11_swapchain {
struct wsi_swapchain base;
+ bool has_dma_fence;
+
xcb_connection_t * conn;
xcb_window_t window;
xcb_gc_t gc;
@@ -639,6 +641,7 @@ struct x11_swapchain {
uint64_t send_sbc;
uint64_t last_present_msc;
uint32_t stamp;
+ uint32_t present_capabilities;
bool threaded;
VkResult status;
@@ -951,6 +954,32 @@ fail:
return NULL;
}
+static void
+wsi_x11_get_present_capabilities(struct x11_swapchain *chain)
+{
+ xcb_present_query_capabilities_cookie_t present_capabilities_cookie;
+ xcb_present_query_capabilities_reply_t *present_capabilities_reply;
+
+ if (chain->present_capabilities)
+ return;
+
+ present_capabilities_cookie =
+ xcb_present_query_capabilities(chain->conn, chain->window);
+ present_capabilities_reply =
+ xcb_present_query_capabilities_reply(chain->conn,
+ present_capabilities_cookie,
+ NULL);
+
+ if (present_capabilities_reply) {
+ chain->present_capabilities = present_capabilities_reply->capabilities;
+ chain->has_dma_fence = chain->present_capabilities &
+ XCB_PRESENT_CAPABILITY_IDLE_FENCE;
+ free(present_capabilities_reply);
+ } else {
+ chain->present_capabilities = 0;
+ }
+}
+
static VkResult
x11_image_init(VkDevice device_h, struct x11_swapchain *chain,
const VkSwapchainCreateInfoKHR *pCreateInfo,
@@ -1011,6 +1040,8 @@ x11_image_init(VkDevice device_h, struct x11_swapchain *chain,
chain->depth, bpp, fd);
xcb_discard_reply(chain->conn, cookie.sequence);
+ wsi_x11_get_present_capabilities(chain);
+
int fence_fd = xshmfence_alloc_shm();
if (fence_fd < 0)
goto fail_pixmap;
--
2.13.0
More information about the mesa-dev
mailing list