@@ -1120,14 +1120,23 @@ struct VulkanGraphicsPlugin : public IGraphicsPlugin {
11201120
11211121 void InitializeDevice (XrInstance instance, XrSystemId systemId) override {
11221122 // Create the Vulkan device for the adapter associated with the system.
1123+ // Extension function must be loaded by name
1124+ PFN_xrGetVulkanGraphicsRequirementsKHR pfnGetVulkanGraphicsRequirementsKHR = nullptr ;
1125+ CHECK_XRCMD (xrGetInstanceProcAddr (instance, " xrGetVulkanGraphicsRequirementsKHR" ,
1126+ reinterpret_cast <PFN_xrVoidFunction*>(&pfnGetVulkanGraphicsRequirementsKHR)));
1127+
1128+ PFN_xrGetVulkanInstanceExtensionsKHR pfnGetVulkanInstanceExtensionsKHR = nullptr ;
1129+ CHECK_XRCMD (xrGetInstanceProcAddr (instance, " xrGetVulkanInstanceExtensionsKHR" ,
1130+ reinterpret_cast <PFN_xrVoidFunction*>(&pfnGetVulkanInstanceExtensionsKHR)));
1131+
11231132 XrGraphicsRequirementsVulkanKHR graphicsRequirements{XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR};
1124- CHECK_XRCMD (xrGetVulkanGraphicsRequirementsKHR (instance, systemId, &graphicsRequirements));
1133+ CHECK_XRCMD (pfnGetVulkanGraphicsRequirementsKHR (instance, systemId, &graphicsRequirements));
11251134
11261135 uint32_t extensionNamesSize = 0 ;
1127- CHECK_XRCMD (xrGetVulkanInstanceExtensionsKHR (instance, systemId, 0 , &extensionNamesSize, nullptr ));
1136+ CHECK_XRCMD (pfnGetVulkanInstanceExtensionsKHR (instance, systemId, 0 , &extensionNamesSize, nullptr ));
11281137 std::vector<char > extensionNames (extensionNamesSize);
11291138 CHECK_XRCMD (
1130- xrGetVulkanInstanceExtensionsKHR (instance, systemId, extensionNamesSize, &extensionNamesSize, &extensionNames[0 ]));
1139+ pfnGetVulkanInstanceExtensionsKHR (instance, systemId, extensionNamesSize, &extensionNamesSize, &extensionNames[0 ]));
11311140
11321141 std::vector<const char *> extensions = ParseExtensionString (&extensionNames[0 ]);
11331142 extensions.push_back (" VK_EXT_debug_report" );
@@ -1167,7 +1176,11 @@ struct VulkanGraphicsPlugin : public IGraphicsPlugin {
11671176 debugInfo.pUserData = this ;
11681177 CHECK_VKCMD (vkCreateDebugReportCallbackEXT (m_vkInstance, &debugInfo, nullptr , &m_vkDebugReporter));
11691178
1170- CHECK_XRCMD (xrGetVulkanGraphicsDeviceKHR (instance, systemId, m_vkInstance, &m_vkPhysicalDevice));
1179+ PFN_xrGetVulkanGraphicsDeviceKHR pfnGetVulkanGraphicsDeviceKHR = nullptr ;
1180+ CHECK_XRCMD (xrGetInstanceProcAddr (instance, " xrGetVulkanGraphicsDeviceKHR" ,
1181+ reinterpret_cast <PFN_xrVoidFunction*>(&pfnGetVulkanGraphicsDeviceKHR)));
1182+
1183+ CHECK_XRCMD (pfnGetVulkanGraphicsDeviceKHR (instance, systemId, m_vkInstance, &m_vkPhysicalDevice));
11711184
11721185 VkDeviceQueueCreateInfo queueInfo{VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO};
11731186 float queuePriorities = 0 ;
@@ -1187,10 +1200,14 @@ struct VulkanGraphicsPlugin : public IGraphicsPlugin {
11871200 }
11881201 }
11891202
1203+ PFN_xrGetVulkanDeviceExtensionsKHR pfnGetVulkanDeviceExtensionsKHR = nullptr ;
1204+ CHECK_XRCMD (xrGetInstanceProcAddr (instance, " xrGetVulkanDeviceExtensionsKHR" ,
1205+ reinterpret_cast <PFN_xrVoidFunction*>(&pfnGetVulkanDeviceExtensionsKHR)));
1206+
11901207 uint32_t deviceExtensionNamesSize = 0 ;
1191- CHECK_XRCMD (xrGetVulkanDeviceExtensionsKHR (instance, systemId, 0 , &deviceExtensionNamesSize, nullptr ));
1208+ CHECK_XRCMD (pfnGetVulkanDeviceExtensionsKHR (instance, systemId, 0 , &deviceExtensionNamesSize, nullptr ));
11921209 std::vector<char > deviceExtensionNames (deviceExtensionNamesSize);
1193- CHECK_XRCMD (xrGetVulkanDeviceExtensionsKHR (instance, systemId, deviceExtensionNamesSize, &deviceExtensionNamesSize,
1210+ CHECK_XRCMD (pfnGetVulkanDeviceExtensionsKHR (instance, systemId, deviceExtensionNamesSize, &deviceExtensionNamesSize,
11941211 &deviceExtensionNames[0 ]));
11951212 std::vector<const char *> deviceExtensions = ParseExtensionString (&deviceExtensionNames[0 ]);
11961213
0 commit comments