diff --git a/src/xrt/state_trackers/oxr/oxr_vulkan.c b/src/xrt/state_trackers/oxr/oxr_vulkan.c index 03cc445e2..ed3160161 100644 --- a/src/xrt/state_trackers/oxr/oxr_vulkan.c +++ b/src/xrt/state_trackers/oxr/oxr_vulkan.c @@ -1,4 +1,5 @@ // Copyright 2018-2024, Collabora, Ltd. +// Copyright 2024-2025, NVIDIA CORPORATION. // SPDX-License-Identifier: BSL-1.0 /*! * @file @@ -31,7 +32,7 @@ * */ -#define GET_PROC(name) PFN_##name name = (PFN_##name)getProc(vkInstance, #name) +#define GET_PROC(INST, NAME) PFN_vk##NAME loaded_##NAME = (PFN_vk##NAME)vulkanGetInstanceProcAddr(INST, "vk" #NAME) #define UUID_STR_SIZE (XRT_UUID_SIZE * 3 + 1) @@ -190,22 +191,20 @@ vk_check_extension(VkExtensionProperties *props, uint32_t prop_count, const char static XrResult vk_get_instance_ext_props(struct oxr_logger *log, - VkInstance instance, - PFN_vkGetInstanceProcAddr GetInstanceProcAddr, + VkInstance vulkanInstance, + PFN_vkGetInstanceProcAddr vulkanGetInstanceProcAddr, VkExtensionProperties **out_props, uint32_t *out_prop_count) { - PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties = - (PFN_vkEnumerateInstanceExtensionProperties)GetInstanceProcAddr(NULL, - "vkEnumerateInstanceExtensionProperties"); + GET_PROC(vulkanInstance, EnumerateInstanceExtensionProperties); - if (!EnumerateInstanceExtensionProperties) { + if (!loaded_EnumerateInstanceExtensionProperties) { return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, - "Failed to get EnumerateInstanceExtensionProperties fp"); + "Failed to get vkEnumerateInstanceExtensionProperties function pointer."); } uint32_t prop_count = 0; - VkResult res = EnumerateInstanceExtensionProperties(NULL, &prop_count, NULL); + VkResult res = loaded_EnumerateInstanceExtensionProperties(NULL, &prop_count, NULL); if (res != VK_SUCCESS) { return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Failed to enumerate instance extension properties count (%d)", res); @@ -214,7 +213,7 @@ vk_get_instance_ext_props(struct oxr_logger *log, VkExtensionProperties *props = U_TYPED_ARRAY_CALLOC(VkExtensionProperties, prop_count); - res = EnumerateInstanceExtensionProperties(NULL, &prop_count, props); + res = loaded_EnumerateInstanceExtensionProperties(NULL, &prop_count, props); if (res != VK_SUCCESS) { free(props); return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, @@ -235,10 +234,10 @@ oxr_vk_create_vulkan_instance(struct oxr_logger *log, VkResult *vulkanResult) { - PFN_vkGetInstanceProcAddr GetInstanceProcAddr = createInfo->pfnGetInstanceProcAddr; + PFN_vkGetInstanceProcAddr vulkanGetInstanceProcAddr = createInfo->pfnGetInstanceProcAddr; + GET_PROC(NULL, CreateInstance); - PFN_vkCreateInstance CreateInstance = (PFN_vkCreateInstance)GetInstanceProcAddr(NULL, "vkCreateInstance"); - if (!CreateInstance) { + if (!loaded_CreateInstance) { //! @todo: clarify in spec *vulkanResult = VK_ERROR_INITIALIZATION_FAILED; return XR_SUCCESS; @@ -284,7 +283,7 @@ oxr_vk_create_vulkan_instance(struct oxr_logger *log, modified_info.ppEnabledExtensionNames = u_string_list_get_data(instance_ext_list); modified_info.enabledExtensionCount = u_string_list_get_size(instance_ext_list); - *vulkanResult = CreateInstance(&modified_info, createInfo->vulkanAllocator, vulkanInstance); + *vulkanResult = loaded_CreateInstance(&modified_info, createInfo->vulkanAllocator, vulkanInstance); // Logging @@ -315,23 +314,21 @@ oxr_vk_create_vulkan_instance(struct oxr_logger *log, static XrResult vk_get_device_ext_props(struct oxr_logger *log, - VkInstance instance, - PFN_vkGetInstanceProcAddr GetInstanceProcAddr, + VkInstance vulkanInstance, + PFN_vkGetInstanceProcAddr vulkanGetInstanceProcAddr, VkPhysicalDevice physical_device, VkExtensionProperties **out_props, uint32_t *out_prop_count) { - PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties = - (PFN_vkEnumerateDeviceExtensionProperties)GetInstanceProcAddr(instance, - "vkEnumerateDeviceExtensionProperties"); + GET_PROC(vulkanInstance, EnumerateDeviceExtensionProperties); - if (!EnumerateDeviceExtensionProperties) { + if (!loaded_EnumerateDeviceExtensionProperties) { return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, - "Failed to get vkEnumerateDeviceExtensionProperties fp"); + "Failed to get vkEnumerateDeviceExtensionProperties function pointer"); } uint32_t prop_count = 0; - VkResult res = EnumerateDeviceExtensionProperties(physical_device, NULL, &prop_count, NULL); + VkResult res = loaded_EnumerateDeviceExtensionProperties(physical_device, NULL, &prop_count, NULL); if (res != VK_SUCCESS) { return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Failed to enumerate device extension properties count (%d)", res); @@ -340,7 +337,7 @@ vk_get_device_ext_props(struct oxr_logger *log, VkExtensionProperties *props = U_TYPED_ARRAY_CALLOC(VkExtensionProperties, prop_count); - res = EnumerateDeviceExtensionProperties(physical_device, NULL, &prop_count, props); + res = loaded_EnumerateDeviceExtensionProperties(physical_device, NULL, &prop_count, props); if (res != VK_SUCCESS) { free(props); return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Failed to enumerate device extension properties (%d)", @@ -355,21 +352,20 @@ vk_get_device_ext_props(struct oxr_logger *log, static XrResult vk_get_device_features(struct oxr_logger *log, - VkInstance instance, - PFN_vkGetInstanceProcAddr GetInstanceProcAddr, + VkInstance vulkanInstance, + PFN_vkGetInstanceProcAddr vulkanGetInstanceProcAddr, VkPhysicalDevice physical_device, VkPhysicalDeviceFeatures2KHR *physical_device_features) { - PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2 = - (PFN_vkGetPhysicalDeviceFeatures2KHR)GetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2KHR"); + GET_PROC(vulkanInstance, GetPhysicalDeviceFeatures2KHR); - if (!GetPhysicalDeviceFeatures2) { - oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Failed to get vkGetPhysicalDeviceFeatures2 fp"); + if (!loaded_GetPhysicalDeviceFeatures2KHR) { + oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Failed to get vkGetPhysicalDeviceFeatures2KHR fp"); } - GetPhysicalDeviceFeatures2( // - physical_device, // physicalDevice - physical_device_features); // pFeatures + loaded_GetPhysicalDeviceFeatures2KHR( // + physical_device, // physicalDevice + physical_device_features); // pFeatures return XR_SUCCESS; } @@ -395,11 +391,10 @@ oxr_vk_create_vulkan_device(struct oxr_logger *log, { XrResult res; - PFN_vkGetInstanceProcAddr GetInstanceProcAddr = createInfo->pfnGetInstanceProcAddr; + PFN_vkGetInstanceProcAddr vulkanGetInstanceProcAddr = createInfo->pfnGetInstanceProcAddr; + GET_PROC(sys->vulkan_enable2_instance, CreateDevice); - PFN_vkCreateDevice CreateDevice = - (PFN_vkCreateDevice)GetInstanceProcAddr(sys->vulkan_enable2_instance, "vkCreateDevice"); - if (!CreateDevice) { + if (!loaded_CreateDevice) { //! @todo: clarify in spec *vulkanResult = VK_ERROR_INITIALIZATION_FAILED; return XR_SUCCESS; @@ -513,7 +508,7 @@ oxr_vk_create_vulkan_device(struct oxr_logger *log, } #endif - *vulkanResult = CreateDevice(physical_device, &modified_info, createInfo->vulkanAllocator, vulkanDevice); + *vulkanResult = loaded_CreateDevice(physical_device, &modified_info, createInfo->vulkanAllocator, vulkanDevice); // Logging @@ -571,12 +566,13 @@ XrResult oxr_vk_get_physical_device(struct oxr_logger *log, struct oxr_instance *inst, struct oxr_system *sys, - VkInstance vkInstance, - PFN_vkGetInstanceProcAddr getProc, + VkInstance vulkanInstance, + PFN_vkGetInstanceProcAddr vulkanGetInstanceProcAddr, VkPhysicalDevice *vkPhysicalDevice) { - GET_PROC(vkEnumeratePhysicalDevices); - GET_PROC(vkGetPhysicalDeviceProperties2KHR); + GET_PROC(vulkanInstance, EnumeratePhysicalDevices); + GET_PROC(vulkanInstance, GetPhysicalDeviceProperties2KHR); + VkResult vk_ret; uint32_t count; @@ -584,7 +580,7 @@ oxr_vk_get_physical_device(struct oxr_logger *log, return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, " sys->xsysc == NULL"); } - vk_ret = vkEnumeratePhysicalDevices(vkInstance, &count, NULL); + vk_ret = loaded_EnumeratePhysicalDevices(vulkanInstance, &count, NULL); if (vk_ret != VK_SUCCESS) { return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Call to vkEnumeratePhysicalDevices returned %u", vk_ret); @@ -595,7 +591,7 @@ oxr_vk_get_physical_device(struct oxr_logger *log, } VkPhysicalDevice *phys = U_TYPED_ARRAY_CALLOC(VkPhysicalDevice, count); - vk_ret = vkEnumeratePhysicalDevices(vkInstance, &count, phys); + vk_ret = loaded_EnumeratePhysicalDevices(vulkanInstance, &count, phys); if (vk_ret != VK_SUCCESS) { free(phys); return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Call to vkEnumeratePhysicalDevices returned %u", @@ -622,7 +618,7 @@ oxr_vk_get_physical_device(struct oxr_logger *log, .pNext = &pdidp, }; - vkGetPhysicalDeviceProperties2KHR(phys[i], &pdp2); + loaded_GetPhysicalDeviceProperties2KHR(phys[i], &pdp2); // These should always be true static_assert(VK_UUID_SIZE == XRT_UUID_SIZE, "uuid sizes mismatch"); @@ -656,7 +652,7 @@ oxr_vk_get_physical_device(struct oxr_logger *log, // vulkan_enable2 needs the physical device in xrCreateVulkanDeviceKHR if (inst->extensions.KHR_vulkan_enable2) { - sys->vulkan_enable2_instance = vkInstance; + sys->vulkan_enable2_instance = vulkanInstance; } sys->suggested_vulkan_physical_device = *vkPhysicalDevice; if (log_level <= U_LOGGING_DEBUG) {