From acf4589cedc97a4183061958ec2faf69e23bda8d Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Wed, 25 Nov 2015 17:55:49 -0700 Subject: loader: Add terminator functions for Create*SurfaceKHR functions These need to call down the chain for layer intercept. Also remove DestroySurfaceKHR from ICD table. --- loader/loader.c | 13 ++++---- loader/loader.h | 1 - loader/wsi.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ loader/wsi.h | 31 +++++++++++++++++++ 4 files changed, 133 insertions(+), 7 deletions(-) (limited to 'loader') diff --git a/loader/loader.c b/loader/loader.c index ce9b39ce..df720c64 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -116,23 +116,23 @@ const VkLayerInstanceDispatchTable instance_disp = { .DbgCreateMsgCallback = loader_DbgCreateMsgCallback, .DbgDestroyMsgCallback = loader_DbgDestroyMsgCallback, #ifdef VK_USE_PLATFORM_MIR_KHR - .CreateMirSurfaceKHR = vkCreateMirSurfaceKHR, + .CreateMirSurfaceKHR = loader_CreateMirSurfaceKHR, .GetPhysicalDeviceMirPresentationSupportKHR = loader_GetPhysicalDeviceMirPresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR - .CreateWaylandSurfaceKHR = vkCreateWaylandSurfaceKHR, + .CreateWaylandSurfaceKHR = loader_CreateWaylandSurfaceKHR, .GetPhysicalDeviceWaylandPresentationSupportKHR = loader_GetPhysicalDeviceWaylandPresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_WIN32_KHR - .CreateWin32SurfaceKHR = vkCreateWin32SurfaceKHR, + .CreateWin32SurfaceKHR = loader_CreateWin32SurfaceKHR, .GetPhysicalDeviceWin32PresentationSupportKHR = loader_GetPhysicalDeviceWin32PresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_XCB_KHR - .CreateXcbSurfaceKHR = vkCreateXcbSurfaceKHR, + .CreateXcbSurfaceKHR = loader_CreateXcbSurfaceKHR, .GetPhysicalDeviceXcbPresentationSupportKHR = loader_GetPhysicalDeviceXcbPresentationSupportKHR, #endif #ifdef VK_USE_PLATFORM_XLIB_KHR - .CreateXlibSurfaceKHR = vkCreateXlibSurfaceKHR, + .CreateXlibSurfaceKHR = loader_CreateXlibSurfaceKHR, .GetPhysicalDeviceXlibPresentationSupportKHR = loader_GetPhysicalDeviceXlibPresentationSupportKHR, #endif }; @@ -1239,7 +1239,6 @@ static bool loader_icd_init_entrys(struct loader_icd *icd, LOOKUP_GIPA(GetPhysicalDeviceSparseImageFormatProperties, true); LOOKUP_GIPA(DbgCreateMsgCallback, false); LOOKUP_GIPA(DbgDestroyMsgCallback, false); - LOOKUP_GIPA(DestroySurfaceKHR, false); LOOKUP_GIPA(GetPhysicalDeviceSurfaceSupportKHR, false); LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilitiesKHR, false); LOOKUP_GIPA(GetPhysicalDeviceSurfaceFormatsKHR, false); @@ -2613,6 +2612,8 @@ uint32_t loader_activate_instance_layers(struct loader_instance *inst) nextObj = (void*) nextInstObj; lib_handle = loader_add_layer_lib(inst, "instance", layer_prop); + if (!lib_handle) + continue; // TODO what should we do in this case if ((nextGPA = layer_prop->functions.get_instance_proc_addr) == NULL) { if (layer_prop->functions.str_gipa == NULL || strlen(layer_prop->functions.str_gipa) == 0) { nextGPA = (PFN_vkGetInstanceProcAddr) loader_platform_get_proc_address(lib_handle, "vkGetInstanceProcAddr"); diff --git a/loader/loader.h b/loader/loader.h index 7501c8ac..0c70f591 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -170,7 +170,6 @@ struct loader_icd { PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties; PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback; PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback; - PFN_vkDestroySurfaceKHR DestroySurfaceKHR; PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR; PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR; PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR; diff --git a/loader/wsi.c b/loader/wsi.c index ca257a5b..a9700cb0 100644 --- a/loader/wsi.c +++ b/loader/wsi.c @@ -472,6 +472,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( HWND hwnd, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(instance); + VkResult res; + + res = disp->CreateWin32SurfaceKHR(instance, hinstance, hwnd, pAllocator, pSurface); + return res; +} + +/* + * This is the instance chain terminator function + * for CreateWin32SurfaceKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWin32SurfaceKHR( + VkInstance instance, + HINSTANCE hinstance, + HWND hwnd, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { struct loader_instance *ptr_instance = loader_get_instance(instance); VkIcdSurfaceWin32 *pIcdSurface = NULL; @@ -545,6 +564,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR( MirSurface* mirSurface, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(instance); + VkResult res; + + res = disp->CreateMirSurfaceKHR(instance, connection, mirSurface, pAllocator, pSurface); + return res; +} + +/* + * This is the instance chain terminator function + * for CreateMirSurfaceKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateMirSurfaceKHR( + VkInstance instance, + Display* dpy, + Window window, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { struct loader_instance *ptr_instance = loader_get_instance(instance); VkIcdSurfaceMir *pIcdSurface = NULL; @@ -620,6 +658,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( struct wl_surface* surface, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(instance); + VkResult res; + + res = disp->CreateWaylandSurfaceKHR(instance, display, surface, pAllocator, pSurface); + return res; +} + +/* + * This is the instance chain terminator function + * for CreateXlibSurfaceKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWaylandSurfaceKHR( + VkInstance instance, + struct wl_display* display, + struct wl_surface* surface, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { struct loader_instance *ptr_instance = loader_get_instance(instance); VkIcdSurfaceWayland *pIcdSurface = NULL; @@ -695,6 +752,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( xcb_window_t window, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(instance); + VkResult res; + + res = disp->CreateXcbSurfaceKHR(instance, connection, window, pAllocator, pSurface); + return res; +} + +/* + * This is the instance chain terminator function + * for CreateXcbSurfaceKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXcbSurfaceKHR( + VkInstance instance, + xcb_connection_t* connection, + xcb_window_t window, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { struct loader_instance *ptr_instance = loader_get_instance(instance); VkIcdSurfaceXcb *pIcdSurface = NULL; @@ -774,6 +850,25 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( Window window, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(instance); + VkResult res; + + res = disp->CreateXlibSurfaceKHR(instance, dpy, window, pAllocator, pSurface); + return res; +} + +/* + * This is the instance chain terminator function + * for CreateXlibSurfaceKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXlibSurfaceKHR( + VkInstance instance, + Display* dpy, + Window window, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { struct loader_instance *ptr_instance = loader_get_instance(instance); VkIcdSurfaceXlib *pIcdSurface = NULL; diff --git a/loader/wsi.h b/loader/wsi.h index 6418195d..67d133fd 100644 --- a/loader/wsi.h +++ b/loader/wsi.h @@ -67,23 +67,48 @@ VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfacePresentModesKHR( VkPresentModeKHR* pPresentModes); #ifdef VK_USE_PLATFORM_WIN32_KHR +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWin32SurfaceKHR( + VkInstance instance, + HINSTANCE hinstance, + HWND hwnd, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWin32PresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex); #endif #ifdef VK_USE_PLATFORM_MIR_KHR +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateMirSurfaceKHR( + VkInstance instance, + Display* dpy, + Window window, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceMirPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection); #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateWaylandSurfaceKHR( + VkInstance instance, + struct wl_display* display, + struct wl_surface* surface, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceWaylandPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display); #endif #ifdef VK_USE_PLATFORM_XCB_KHR +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXcbSurfaceKHR( + VkInstance instance, + xcb_connection_t* connection, + xcb_window_t window, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); + VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXcbPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, @@ -91,6 +116,12 @@ VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXcbPresentationSupportKHR xcb_visualid_t visual_id); #endif #ifdef VK_USE_PLATFORM_XLIB_KHR +VKAPI_ATTR VkResult VKAPI_CALL loader_CreateXlibSurfaceKHR( + VkInstance instance, + Display* dpy, + Window window, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL loader_GetPhysicalDeviceXlibPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, -- cgit v1.2.3