#define WSI_COMMON_PRIVATE_H
#include "wsi_common.h"
+#include "vulkan/util/vk_object.h"
struct wsi_image {
VkImage image;
VkCommandBuffer *blit_cmd_buffers;
} prime;
+ uint64_t drm_modifier;
int num_planes;
uint32_t sizes[4];
uint32_t offsets[4];
};
struct wsi_swapchain {
+ struct vk_object_base base;
+
const struct wsi_device *wsi;
VkDevice device;
VkAllocationCallbacks alloc;
- VkFence fences[3];
+ VkFence* fences;
VkPresentModeKHR present_mode;
uint32_t image_count;
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,
+ const VkAcquireNextImageInfoKHR *info,
uint32_t *image_index);
VkResult (*queue_present)(struct wsi_swapchain *swap_chain,
uint32_t image_index,
const VkPresentRegionKHR *damage);
};
+bool
+wsi_device_matches_drm_fd(const struct wsi_device *wsi, int drm_fd);
+
VkResult
wsi_swapchain_init(const struct wsi_device *wsi,
struct wsi_swapchain *chain,
const VkSwapchainCreateInfoKHR *pCreateInfo,
const VkAllocationCallbacks *pAllocator);
+enum VkPresentModeKHR
+wsi_swapchain_get_present_mode(struct wsi_device *wsi,
+ const VkSwapchainCreateInfoKHR *pCreateInfo);
+
void wsi_swapchain_finish(struct wsi_swapchain *chain);
VkResult
wsi_create_native_image(const struct wsi_swapchain *chain,
const VkSwapchainCreateInfoKHR *pCreateInfo,
+ uint32_t num_modifier_lists,
+ const uint32_t *num_modifiers,
+ const uint64_t *const *modifiers,
struct wsi_image *image);
VkResult
wsi_create_prime_image(const struct wsi_swapchain *chain,
const VkSwapchainCreateInfoKHR *pCreateInfo,
+ bool use_modifier,
struct wsi_image *image);
void
struct wsi_interface {
VkResult (*get_support)(VkIcdSurfaceBase *surface,
struct wsi_device *wsi_device,
- const VkAllocationCallbacks *alloc,
uint32_t queueFamilyIndex,
- int local_fd,
VkBool32* pSupported);
- VkResult (*get_capabilities)(VkIcdSurfaceBase *surface,
- VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
VkResult (*get_capabilities2)(VkIcdSurfaceBase *surface,
+ struct wsi_device *wsi_device,
const void *info_next,
VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
VkResult (*get_formats)(VkIcdSurfaceBase *surface,
VkResult (*get_present_modes)(VkIcdSurfaceBase *surface,
uint32_t* pPresentModeCount,
VkPresentModeKHR* pPresentModes);
+ VkResult (*get_present_rectangles)(VkIcdSurfaceBase *surface,
+ struct wsi_device *wsi_device,
+ uint32_t* pRectCount,
+ VkRect2D* pRects);
VkResult (*create_swapchain)(VkIcdSurfaceBase *surface,
VkDevice device,
struct wsi_device *wsi_device,
- int local_fd,
const VkSwapchainCreateInfoKHR* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
struct wsi_swapchain **swapchain);
};
VkResult wsi_x11_init_wsi(struct wsi_device *wsi_device,
- const VkAllocationCallbacks *alloc);
+ const VkAllocationCallbacks *alloc,
+ const struct driOptionCache *dri_options);
void wsi_x11_finish_wsi(struct wsi_device *wsi_device,
const VkAllocationCallbacks *alloc);
VkResult wsi_wl_init_wsi(struct wsi_device *wsi_device,
const VkAllocationCallbacks *alloc);
-#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)
+VkResult
+wsi_display_init_wsi(struct wsi_device *wsi_device,
+ const VkAllocationCallbacks *alloc,
+ int display_fd);
+
+void
+wsi_display_finish_wsi(struct wsi_device *wsi_device,
+ const VkAllocationCallbacks *alloc);
+
+VK_DEFINE_NONDISP_HANDLE_CASTS(wsi_swapchain, base, VkSwapchainKHR,
+ VK_OBJECT_TYPE_SWAPCHAIN_KHR)
#endif /* WSI_COMMON_PRIVATE_H */