aboutsummaryrefslogtreecommitdiff
path: root/include/render
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2022-05-26 14:45:15 +0200
committerSimon Ser <contact@emersion.fr>2022-11-28 23:50:41 +0000
commitd2238bf722d9a83156077473a5f5632b751d803a (patch)
treef3c3f167175982edbd0d07215396ef4eda8a3217 /include/render
parentaaf828d3d24c79c2207e83d38a76c7f1cc33084f (diff)
render/vulkan: import semaphore to DMA-BUF instead of blocking
Right now the Vulkan renderer blocks until the frame is complete after rendering. This is necessary because Vulkan doesn't interoperate well with implicit sync we use everywhere else. Use the new kernel API to import a sync_file into a DMA-BUF to avoid blocking.
Diffstat (limited to 'include/render')
-rw-r--r--include/render/vulkan.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/render/vulkan.h b/include/render/vulkan.h
index d21a7ca0..93e492cf 100644
--- a/include/render/vulkan.h
+++ b/include/render/vulkan.h
@@ -38,6 +38,8 @@ struct wlr_vk_device {
int drm_fd;
+ bool implicit_sync_interop;
+
// we only ever need one queue for rendering and transfer commands
uint32_t queue_family;
VkQueue queue;
@@ -46,6 +48,7 @@ struct wlr_vk_device {
PFN_vkGetMemoryFdPropertiesKHR getMemoryFdPropertiesKHR;
PFN_vkWaitSemaphoresKHR waitSemaphoresKHR;
PFN_vkGetSemaphoreCounterValueKHR getSemaphoreCounterValueKHR;
+ PFN_vkGetSemaphoreFdKHR getSemaphoreFdKHR;
} api;
uint32_t format_prop_count;
@@ -152,6 +155,9 @@ struct wlr_vk_command_buffer {
struct wl_list destroy_textures; // wlr_vk_texture.destroy_link
// Staging shared buffers to release after the command buffer completes
struct wl_list stage_buffers; // wlr_vk_shared_buffer.link
+
+ // For DMA-BUF implicit sync interop, may be NULL
+ VkSemaphore binary_semaphore;
};
#define VULKAN_COMMAND_BUFFERS_CAP 64