20#ifndef __WINE_VULKAN_DRIVER_H
21#define __WINE_VULKAN_DRIVER_H
46#include "wine/rbtree.h"
49#define WINE_VULKAN_DRIVER_VERSION 35
58#define VULKAN_OBJECT_HEADER( type, name ) \
60 struct vulkan_object obj; \
62 union { type name; UINT64 handle; } host; \
63 union { type name; UINT64 handle; } client; \
67static inline void vulkan_object_init(
struct vulkan_object *
obj,
UINT64 host_handle )
69 obj->host_handle = host_handle;
75 VULKAN_OBJECT_HEADER( VkInstance,
instance );
76#define USE_VK_FUNC(x) PFN_ ## x p_ ## x;
79 void (*p_insert_object)(
struct vulkan_instance *
instance,
struct vulkan_object *
obj );
80 void (*p_remove_object)(
struct vulkan_instance *
instance,
struct vulkan_object *
obj );
83static inline struct vulkan_instance *vulkan_instance_from_handle( VkInstance
handle )
89struct vulkan_physical_device
91 VULKAN_OBJECT_HEADER( VkPhysicalDevice, physical_device );
95static inline struct vulkan_physical_device *vulkan_physical_device_from_handle( VkPhysicalDevice
handle )
98 return (
struct vulkan_physical_device *)(
UINT_PTR)
client->unix_handle;
103 VULKAN_OBJECT_HEADER( VkDevice,
device );
104 struct vulkan_physical_device *physical_device;
105#define USE_VK_FUNC(x) PFN_ ## x p_ ## x;
110static inline struct vulkan_device *vulkan_device_from_handle( VkDevice
handle )
118 VULKAN_OBJECT_HEADER( VkQueue,
queue );
119 struct vulkan_device *
device;
122static inline struct vulkan_queue *vulkan_queue_from_handle( VkQueue
handle )
130 VULKAN_OBJECT_HEADER( VkSurfaceKHR, surface );
134static inline struct vulkan_surface *vulkan_surface_from_handle( VkSurfaceKHR
handle )
139struct vulkan_swapchain
141 VULKAN_OBJECT_HEADER( VkSwapchainKHR, swapchain );
144static inline struct vulkan_swapchain *vulkan_swapchain_from_handle( VkSwapchainKHR
handle )
172 const char *(*p_get_host_surface_extension)(
void);
176struct vulkan_driver_funcs
178 VkResult (*p_vulkan_surface_create)(
HWND, VkInstance, VkSurfaceKHR *,
void **);
179 void (*p_vulkan_surface_destroy)(
HWND,
void *);
180 void (*p_vulkan_surface_detach)(
HWND,
void *);
181 void (*p_vulkan_surface_update)(
HWND,
void *);
184 VkBool32 (*p_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice,
uint32_t);
185 const char *(*p_get_host_surface_extension)(
void);
COMPILER_DEPENDENT_UINT64 UINT64
static HINSTANCE instance
unsigned __int3264 UINT_PTR
VkResult(VKAPI_PTR * PFN_vkAcquireNextImage2KHR)(VkDevice, const VkAcquireNextImageInfoKHR *, uint32_t *)
VkResult(VKAPI_PTR * PFN_vkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *)
VkResult(VKAPI_PTR * PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, uint32_t *, VkSurfaceFormat2KHR *)
PFN_vkVoidFunction(VKAPI_PTR * PFN_vkGetInstanceProcAddr)(VkInstance, const char *)
PFN_vkVoidFunction(VKAPI_PTR * PFN_vkGetDeviceProcAddr)(VkDevice, const char *)
VkBool32(VKAPI_PTR * PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice, uint32_t)
VkResult(VKAPI_PTR * PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *)
VkResult(VKAPI_PTR * PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice, VkSurfaceKHR, uint32_t *, VkSurfaceFormatKHR *)
VkResult(VKAPI_PTR * PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice, VkSurfaceKHR, uint32_t *, VkRect2D *)
#define ALL_VK_DEVICE_FUNCS
void(VKAPI_PTR * PFN_vkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *)
void(VKAPI_PTR * PFN_vkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *)
VkResult(VKAPI_PTR * PFN_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *)
VkResult(VKAPI_PTR * PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice, VkSurfaceKHR, VkSurfaceCapabilitiesKHR *)
VkResult(VKAPI_PTR * PFN_vkAcquireNextImageKHR)(VkDevice, VkSwapchainKHR, uint64_t, VkSemaphore, VkFence, uint32_t *)
#define ALL_VK_INSTANCE_FUNCS
VkResult(VKAPI_PTR * PFN_vkCreateWin32SurfaceKHR)(VkInstance, const VkWin32SurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *)