summaryrefslogtreecommitdiff
path: root/src/vulkan/wsi/wsi_common_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vulkan/wsi/wsi_common_private.h')
-rw-r--r--src/vulkan/wsi/wsi_common_private.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h
index 28abf6c232..3fa68f0324 100644
--- a/src/vulkan/wsi/wsi_common_private.h
+++ b/src/vulkan/wsi/wsi_common_private.h
@@ -41,6 +41,32 @@ struct wsi_image {
int fd;
};
+struct wsi_swapchain {
+ const struct wsi_device *wsi;
+
+ VkDevice device;
+ VkAllocationCallbacks alloc;
+ VkFence fences[3];
+ VkPresentModeKHR present_mode;
+ uint32_t image_count;
+
+ bool use_prime_blit;
+
+ /* Command pools, one per queue family */
+ VkCommandPool *cmd_pools;
+
+ VkResult (*destroy)(struct wsi_swapchain *swapchain,
+ const VkAllocationCallbacks *pAllocator);
+ struct wsi_image *(*get_wsi_image)(struct wsi_swapchain *swapchain,
+ uint32_t image_index);
+ VkResult (*acquire_next_image)(struct wsi_swapchain *swap_chain,
+ uint64_t timeout, VkSemaphore semaphore,
+ uint32_t *image_index);
+ VkResult (*queue_present)(struct wsi_swapchain *swap_chain,
+ uint32_t image_index,
+ const VkPresentRegionKHR *damage);
+};
+
VkResult
wsi_swapchain_init(const struct wsi_device *wsi,
struct wsi_swapchain *chain,
@@ -64,4 +90,24 @@ void
wsi_destroy_image(const struct wsi_swapchain *chain,
struct wsi_image *image);
+
+#define WSI_DEFINE_NONDISP_HANDLE_CASTS(__wsi_type, __VkType) \
+ \
+ static inline struct __wsi_type * \
+ __wsi_type ## _from_handle(__VkType _handle) \
+ { \
+ return (struct __wsi_type *)(uintptr_t) _handle; \
+ } \
+ \
+ static inline __VkType \
+ __wsi_type ## _to_handle(struct __wsi_type *_obj) \
+ { \
+ return (__VkType)(uintptr_t) _obj; \
+ }
+
+#define WSI_FROM_HANDLE(__wsi_type, __name, __handle) \
+ struct __wsi_type *__name = __wsi_type ## _from_handle(__handle)
+
+WSI_DEFINE_NONDISP_HANDLE_CASTS(wsi_swapchain, VkSwapchainKHR)
+
#endif /* WSI_COMMON_PRIVATE_H */