From 3ff5d4a0edb79576e3e693fa1480f1468542c2b5 Mon Sep 17 00:00:00 2001 From: Ian Elliott Date: Fri, 30 Oct 2015 15:28:23 -0600 Subject: loader: Started porting loader to new WSI (GIPA missing). --- loader/CMakeLists.txt | 4 +- loader/gpa_helper.h | 2 +- loader/loader.c | 4 +- loader/loader.h | 9 +++ loader/trampoline.c | 4 +- loader/wsi.c | 176 +++++++++++++++++++++++++++++++++++++++++++++++++ loader/wsi.h | 45 +++++++++++++ loader/wsi_swapchain.c | 115 -------------------------------- loader/wsi_swapchain.h | 45 ------------- 9 files changed, 237 insertions(+), 167 deletions(-) create mode 100644 loader/wsi.c create mode 100644 loader/wsi.h delete mode 100644 loader/wsi_swapchain.c delete mode 100644 loader/wsi_swapchain.h (limited to 'loader') diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt index c523d3da..85d635eb 100644 --- a/loader/CMakeLists.txt +++ b/loader/CMakeLists.txt @@ -18,8 +18,8 @@ set(LOADER_SRCS loader.h vk_loader_platform.h trampoline.c - wsi_swapchain.c - wsi_swapchain.h + wsi.c + wsi.h debug_report.c debug_report.h table_ops.h diff --git a/loader/gpa_helper.h b/loader/gpa_helper.h index 1c0c84e6..53c408ef 100644 --- a/loader/gpa_helper.h +++ b/loader/gpa_helper.h @@ -27,7 +27,7 @@ #include #include "debug_report.h" -#include "wsi_swapchain.h" +#include "wsi.h" static inline void* trampolineGetProcAddr(struct loader_instance *inst, const char *funcName) diff --git a/loader/loader.c b/loader/loader.c index 45de0e7b..aef74e7a 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -44,7 +44,7 @@ #include "gpa_helper.h" #include "table_ops.h" #include "debug_report.h" -#include "wsi_swapchain.h" +#include "wsi.h" #include "vulkan/vk_icd.h" #include "cJSON.h" #include "murmurhash.h" @@ -971,7 +971,7 @@ void loader_get_icd_loader_instance_extensions( }; // Traverse loader's extensions, adding non-duplicate extensions to the list - wsi_swapchain_add_instance_extensions(inst, inst_exts); + wsi_add_instance_extensions(inst, inst_exts); debug_report_add_instance_extensions(inst, inst_exts); } diff --git a/loader/loader.h b/loader/loader.h index 28878065..f170f4d2 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -206,6 +206,15 @@ struct loader_instance { VkAllocationCallbacks alloc_callbacks; + bool wsi_surface_enabled; +#ifdef _WIN32 + bool wsi_win32_surface_enabled; +#else // _WIN32 + bool wsi_mir_surface_enabled; + bool wsi_wayland_surface_enabled; + bool wsi_xcb_surface_enabled; + bool wsi_xlib_surface_enabled; +#endif // _WIN32 bool wsi_swapchain_enabled; }; diff --git a/loader/trampoline.c b/loader/trampoline.c index 64d69f17..b4eca0f6 100644 --- a/loader/trampoline.c +++ b/loader/trampoline.c @@ -32,7 +32,7 @@ #include "vk_loader_platform.h" #include "loader.h" #include "debug_report.h" -#include "wsi_swapchain.h" +#include "wsi.h" /* Trampoline entrypoints */ @@ -154,7 +154,7 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( } loader_activate_instance_layers(ptr_instance); - wsi_swapchain_create_instance(ptr_instance, pCreateInfo); + wsi_create_instance(ptr_instance, pCreateInfo); debug_report_create_instance(ptr_instance, pCreateInfo); diff --git a/loader/wsi.c b/loader/wsi.c new file mode 100644 index 00000000..09a5247d --- /dev/null +++ b/loader/wsi.c @@ -0,0 +1,176 @@ +/* + * + * Copyright (C) 2015 Valve Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Ian Elliott + * + */ + +//#define _ISOC11_SOURCE /* for aligned_alloc() */ +#define _GNU_SOURCE +#include +#include +#include "vk_loader_platform.h" +#include "loader.h" +#include "wsi.h" + +static const VkExtensionProperties wsi_surface_extension_info = { + .extensionName = VK_KHR_SURFACE_EXTENSION_NAME, + .specVersion = VK_KHR_SURFACE_REVISION, +}; + +#ifdef _WIN32 +static const VkExtensionProperties wsi_win32_surface_extension_info = { + .extensionName = VK_KHR_WIN32_SURFACE_EXTENSION_NAME, + .specVersion = VK_KHR_WIN32_SURFACE_REVISION, +}; +#else // _WIN32 +static const VkExtensionProperties wsi_mir_surface_extension_info = { + .extensionName = VK_KHR_MIR_SURFACE_EXTENSION_NAME, + .specVersion = VK_KHR_MIR_SURFACE_REVISION, +}; + +static const VkExtensionProperties wsi_wayland_surface_extension_info = { + .extensionName = VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, + .specVersion = VK_KHR_WAYLAND_SURFACE_REVISION, +}; + +static const VkExtensionProperties wsi_xcb_surface_extension_info = { + .extensionName = VK_KHR_XCB_SURFACE_EXTENSION_NAME, + .specVersion = VK_KHR_XCB_SURFACE_REVISION, +}; + +static const VkExtensionProperties wsi_xlib_surface_extension_info = { + .extensionName = VK_KHR_XLIB_SURFACE_EXTENSION_NAME, + .specVersion = VK_KHR_XLIB_SURFACE_REVISION, +}; +#endif // _WIN32 + +void wsi_add_instance_extensions( + const struct loader_instance *inst, + struct loader_extension_list *ext_list) +{ + loader_add_to_ext_list(inst, ext_list, 1, &wsi_surface_extension_info); +#ifdef _WIN32 + loader_add_to_ext_list(inst, ext_list, 1, &wsi_win32_surface_extension_info); +#else // _WIN32 + loader_add_to_ext_list(inst, ext_list, 1, &wsi_mir_surface_extension_info); + loader_add_to_ext_list(inst, ext_list, 1, &wsi_wayland_surface_extension_info); + loader_add_to_ext_list(inst, ext_list, 1, &wsi_xcb_surface_extension_info); + loader_add_to_ext_list(inst, ext_list, 1, &wsi_xlib_surface_extension_info); +#endif // _WIN32 +} + +void wsi_create_instance( + struct loader_instance *ptr_instance, + const VkInstanceCreateInfo *pCreateInfo) +{ + ptr_instance->wsi_enabled = false; +#ifdef _WIN32 + ptr_instance->wsi_surface_enabled = true; +#else // _WIN32 + ptr_instance->wsi_mir_surface_enabled = false; + ptr_instance->wsi_wayland_surface_enabled = false; + ptr_instance->wsi_xcb_surface_enabled = false; + ptr_instance->wsi_xlib_surface_enabled = false; +#endif // _WIN32 + ptr_instance->wsi_swapchain_enabled = false; + + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionNameCount; i++) { + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { + ptr_instance->wsi_surface_enabled = true; + } +#ifdef _WIN32 + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) { + ptr_instance->wsi_surface_enabled = true; + } +#else // _WIN32 + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) { + ptr_instance->wsi_mir_surface_enabled = true; + } + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) { + ptr_instance->wsi_wayland_surface_enabled = true; + } + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) { + ptr_instance->wsi_xcb_surface_enabled = true; + } + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) { + ptr_instance->wsi_xlib_surface_enabled = true; + } +#endif // _WIN32 + } +} + +/* + * This is the trampoline entrypoint + * for GetPhysicalDeviceSurfaceSupportKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL wsi_swapchain_GetPhysicalDeviceSurfaceSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + VkBool32* pSupported) +{ + const VkLayerInstanceDispatchTable *disp; + disp = loader_get_instance_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceSurfaceSupportKHR( + physicalDevice, + queueFamilyIndex, + surface, + pSupported); + return res; +} + +/* + * This is the instance chain terminator function + * for GetPhysicalDeviceSurfaceSupportKHR + */ +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + VkBool32* pSupported) +{ + struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; + struct loader_icd *icd = phys_dev->this_icd; + + assert(pSupported && "GetPhysicalDeviceSurfaceSupportKHR: Error, null pSupported"); + *pSupported = false; + + assert(icd->GetPhysicalDeviceSurfaceSupportKHR && "loader: null GetPhysicalDeviceSurfaceSupportKHR ICD pointer"); + + return icd->GetPhysicalDeviceSurfaceSupportKHR(phys_dev->phys_dev, + queueFamilyIndex, + surface, + pSupported); +} + +bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, + const char* name, void **addr) +{ + *addr = NULL; + + if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) { + *addr = ptr_instance->wsi_swapchain_enabled ? (void *) wsi_swapchain_GetPhysicalDeviceSurfaceSupportKHR : NULL; + return true; + } + return false; +} diff --git a/loader/wsi.h b/loader/wsi.h new file mode 100644 index 00000000..958d69eb --- /dev/null +++ b/loader/wsi.h @@ -0,0 +1,45 @@ +/* + * + * Copyright (C) 2015 Valve Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Ian Elliott + * + */ + +#include "vk_loader_platform.h" +#include "loader.h" + +bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, + const char* name, void **addr); +void wsi_add_instance_extensions( + const struct loader_instance *inst, + struct loader_extension_list *ext_list); + +void wsi_create_instance( + struct loader_instance *ptr_instance, + const VkInstanceCreateInfo *pCreateInfo); + + +VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + VkBool32* pSupported); diff --git a/loader/wsi_swapchain.c b/loader/wsi_swapchain.c deleted file mode 100644 index fa1d995b..00000000 --- a/loader/wsi_swapchain.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * - * Copyright (C) 2015 Valve Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Author: Ian Elliott - * - */ - -//#define _ISOC11_SOURCE /* for aligned_alloc() */ -#define _GNU_SOURCE -#include -#include -#include "vk_loader_platform.h" -#include "loader.h" -#include "wsi_swapchain.h" - -static const VkExtensionProperties wsi_swapchain_extension_info = { - .extensionName = VK_KHR_SURFACE_EXTENSION_NAME, - .specVersion = VK_KHR_SURFACE_REVISION, -}; - -void wsi_swapchain_add_instance_extensions( - const struct loader_instance *inst, - struct loader_extension_list *ext_list) -{ - loader_add_to_ext_list(inst, ext_list, 1, &wsi_swapchain_extension_info); -} - -void wsi_swapchain_create_instance( - struct loader_instance *ptr_instance, - const VkInstanceCreateInfo *pCreateInfo) -{ - ptr_instance->wsi_swapchain_enabled = false; - - for (uint32_t i = 0; i < pCreateInfo->enabledExtensionNameCount; i++) { - if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { - ptr_instance->wsi_swapchain_enabled = true; - return; - } - } -} - -/* - * This is the trampoline entrypoint - * for GetPhysicalDeviceSurfaceSupportKHR - */ -VKAPI_ATTR VkResult VKAPI_CALL wsi_swapchain_GetPhysicalDeviceSurfaceSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - VkSurfaceKHR surface, - VkBool32* pSupported) -{ - const VkLayerInstanceDispatchTable *disp; - disp = loader_get_instance_dispatch(physicalDevice); - VkResult res = disp->GetPhysicalDeviceSurfaceSupportKHR( - physicalDevice, - queueFamilyIndex, - surface, - pSupported); - return res; -} - -/* - * This is the instance chain terminator function - * for GetPhysicalDeviceSurfaceSupportKHR - */ -VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - VkSurfaceKHR surface, - VkBool32* pSupported) -{ - struct loader_physical_device *phys_dev = (struct loader_physical_device *) physicalDevice; - struct loader_icd *icd = phys_dev->this_icd; - - assert(pSupported && "GetPhysicalDeviceSurfaceSupportKHR: Error, null pSupported"); - *pSupported = false; - - assert(icd->GetPhysicalDeviceSurfaceSupportKHR && "loader: null GetPhysicalDeviceSurfaceSupportKHR ICD pointer"); - - return icd->GetPhysicalDeviceSurfaceSupportKHR(phys_dev->phys_dev, - queueFamilyIndex, - surface, - pSupported); -} - -bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, - const char* name, void **addr) -{ - *addr = NULL; - - if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) { - *addr = ptr_instance->wsi_swapchain_enabled ? (void *) wsi_swapchain_GetPhysicalDeviceSurfaceSupportKHR : NULL; - return true; - } - return false; -} diff --git a/loader/wsi_swapchain.h b/loader/wsi_swapchain.h deleted file mode 100644 index e5885e20..00000000 --- a/loader/wsi_swapchain.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * Copyright (C) 2015 Valve Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Author: Ian Elliott - * - */ - -#include "vk_loader_platform.h" -#include "loader.h" - -bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, - const char* name, void **addr); -void wsi_swapchain_add_instance_extensions( - const struct loader_instance *inst, - struct loader_extension_list *ext_list); - -void wsi_swapchain_create_instance( - struct loader_instance *ptr_instance, - const VkInstanceCreateInfo *pCreateInfo); - - -VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - VkSurfaceKHR surface, - VkBool32* pSupported); -- cgit v1.2.3