| // VulkanFunctions - loads vulkan functions for tests to use |
| /* |
| * Copyright (c) 2025 The Khronos Group Inc. |
| * Copyright (c) 2025 Valve Corporation |
| * Copyright (c) 2025 LunarG, Inc. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and/or associated documentation files (the "Materials"), to |
| * deal in the Materials without restriction, including without limitation the |
| * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| * sell copies of the Materials, and to permit persons to whom the Materials are |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice(s) and this permission notice shall be included in |
| * all copies or substantial portions of the Materials. |
| * |
| * THE MATERIALS ARE 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 MATERIALS OR THE |
| * USE OR OTHER DEALINGS IN THE MATERIALS. |
| * |
| */ |
| |
| #pragma once |
| |
| #include <vulkan/vulkan.h> |
| |
| #include "functions.h" |
| #include "dynamic_library_wrapper.h" |
| |
| struct VulkanFunctions { |
| #if !defined(APPLE_STATIC_LOADER) |
| LibraryWrapper loader; |
| #endif |
| // Pre-Instance |
| PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = nullptr; |
| PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = nullptr; |
| PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = nullptr; |
| PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = nullptr; |
| PFN_vkCreateInstance vkCreateInstance = nullptr; |
| |
| // Instance |
| PFN_vkDestroyInstance vkDestroyInstance = nullptr; |
| PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = nullptr; |
| PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = nullptr; |
| PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = nullptr; |
| PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = nullptr; |
| PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = nullptr; |
| PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = nullptr; |
| PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = nullptr; |
| PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = nullptr; |
| PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = nullptr; |
| PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = nullptr; |
| PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = nullptr; |
| PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = nullptr; |
| PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = nullptr; |
| PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = nullptr; |
| PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = nullptr; |
| PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = nullptr; |
| PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = nullptr; |
| PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = nullptr; |
| PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = nullptr; |
| PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = nullptr; |
| PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = nullptr; |
| PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = nullptr; |
| PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = nullptr; |
| PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = nullptr; |
| PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = nullptr; |
| |
| PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = nullptr; |
| PFN_vkCreateDevice vkCreateDevice = nullptr; |
| |
| // WSI |
| PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = nullptr; |
| PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = nullptr; |
| PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = nullptr; |
| PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = nullptr; |
| PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = nullptr; |
| PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = nullptr; |
| PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = nullptr; |
| PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = nullptr; |
| PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = nullptr; |
| PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = nullptr; |
| PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = nullptr; |
| PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = nullptr; |
| PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = nullptr; |
| PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = nullptr; |
| PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = nullptr; |
| |
| #if defined(VK_USE_PLATFORM_ANDROID_KHR) |
| PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = nullptr; |
| #endif // VK_USE_PLATFORM_ANDROID_KHR |
| #if defined(VK_USE_PLATFORM_DIRECTFB_EXT) |
| PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = nullptr; |
| PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT = nullptr; |
| #endif // VK_USE_PLATFORM_DIRECTFB_EXT |
| #if defined(VK_USE_PLATFORM_FUCHSIA) |
| PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = nullptr; |
| #endif // VK_USE_PLATFORM_FUCHSIA |
| #if defined(VK_USE_PLATFORM_GGP) |
| PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = nullptr; |
| #endif // VK_USE_PLATFORM_GGP |
| #if defined(VK_USE_PLATFORM_IOS_MVK) |
| PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = nullptr; |
| #endif // VK_USE_PLATFORM_IOS_MVK |
| #if defined(VK_USE_PLATFORM_MACOS_MVK) |
| PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = nullptr; |
| #endif // VK_USE_PLATFORM_MACOS_MVK |
| #if defined(VK_USE_PLATFORM_METAL_EXT) |
| PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = nullptr; |
| #endif // VK_USE_PLATFORM_METAL_EXT |
| #if defined(VK_USE_PLATFORM_SCREEN_QNX) |
| PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = nullptr; |
| PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = nullptr; |
| #endif // VK_USE_PLATFORM_SCREEN_QNX |
| #if defined(VK_USE_PLATFORM_WAYLAND_KHR) |
| PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = nullptr; |
| PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = nullptr; |
| #endif // VK_USE_PLATFORM_WAYLAND_KHR |
| #if defined(VK_USE_PLATFORM_XCB_KHR) |
| PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = nullptr; |
| PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = nullptr; |
| #endif // VK_USE_PLATFORM_XCB_KHR |
| #if defined(VK_USE_PLATFORM_XLIB_KHR) |
| PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = nullptr; |
| PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = nullptr; |
| #endif // VK_USE_PLATFORM_XLIB_KHR |
| #if defined(VK_USE_PLATFORM_WIN32_KHR) |
| PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = nullptr; |
| PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR = nullptr; |
| #endif // VK_USE_PLATFORM_WIN32_KHR |
| PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = nullptr; |
| |
| // device functions |
| PFN_vkDestroyDevice vkDestroyDevice = nullptr; |
| PFN_vkGetDeviceQueue vkGetDeviceQueue = nullptr; |
| |
| VulkanFunctions(); |
| |
| FromVoidStarFunc load(VkInstance inst, const char* func_name) const { |
| return FromVoidStarFunc(vkGetInstanceProcAddr(inst, func_name)); |
| } |
| |
| FromVoidStarFunc load(VkDevice device, const char* func_name) const { |
| return FromVoidStarFunc(vkGetDeviceProcAddr(device, func_name)); |
| } |
| }; |
| |
| struct InstanceFunctions { |
| PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; |
| |
| PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; |
| PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; |
| PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT; |
| PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT; |
| |
| InstanceFunctions() = default; |
| InstanceFunctions(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, VkInstance instance); |
| |
| FromVoidStarFunc load(VkInstance instance, const char* func_name) const { |
| return FromVoidStarFunc(vkGetInstanceProcAddr(instance, func_name)); |
| } |
| }; |
| |
| struct DeviceFunctions { |
| PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = nullptr; |
| PFN_vkDestroyDevice vkDestroyDevice = nullptr; |
| PFN_vkGetDeviceQueue vkGetDeviceQueue = nullptr; |
| PFN_vkCreateCommandPool vkCreateCommandPool = nullptr; |
| PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = nullptr; |
| PFN_vkDestroyCommandPool vkDestroyCommandPool = nullptr; |
| PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = nullptr; |
| PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = nullptr; |
| PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = nullptr; |
| |
| DeviceFunctions() = default; |
| DeviceFunctions(const VulkanFunctions& vulkan_functions, VkDevice device); |
| |
| FromVoidStarFunc load(VkDevice device, const char* func_name) const { |
| return FromVoidStarFunc(vkGetDeviceProcAddr(device, func_name)); |
| } |
| }; |