wineopenxr: Export __wineopenxr_get_extensions_internal() function.
CW-Bug-ID: #19504
This commit is contained in:
parent
89f8134740
commit
034ff27cf3
2 changed files with 35 additions and 30 deletions
|
@ -319,7 +319,8 @@ done:
|
|||
return value == 1;
|
||||
}
|
||||
|
||||
XrResult load_host_openxr_loader(void)
|
||||
int WINAPI __wineopenxr_get_extensions_internal(char **ret_instance_extensions,
|
||||
char **ret_device_extensions)
|
||||
{
|
||||
PFN_xrGetVulkanInstanceExtensionsKHR pxrGetVulkanInstanceExtensionsKHR;
|
||||
PFN_xrGetSystem pxrGetSystem;
|
||||
|
@ -328,6 +329,7 @@ XrResult load_host_openxr_loader(void)
|
|||
PFN_xrGetVulkanGraphicsRequirementsKHR pxrGetVulkanGraphicsRequirementsKHR;
|
||||
PFN_xrGetInstanceProperties pxrGetInstanceProperties;
|
||||
PFN_xrEnumerateViewConfigurations pxrEnumerateViewConfigurations;
|
||||
char *instance_extensions, *device_extensions;
|
||||
uint32_t len, i;
|
||||
XrInstance instance;
|
||||
XrSystemId system;
|
||||
|
@ -341,16 +343,6 @@ XrResult load_host_openxr_loader(void)
|
|||
"XR_KHR_vulkan_enable",
|
||||
};
|
||||
|
||||
if(g_instance_extensions || g_device_extensions)
|
||||
/* already done */
|
||||
return XR_SUCCESS;
|
||||
|
||||
if(!HACK_does_openvr_work()){
|
||||
return XR_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
|
||||
load_vk_unwrappers();
|
||||
|
||||
XrInstanceCreateInfo xrCreateInfo = {
|
||||
.type = XR_TYPE_INSTANCE_CREATE_INFO,
|
||||
.next = NULL,
|
||||
|
@ -423,13 +415,12 @@ XrResult load_host_openxr_loader(void)
|
|||
xrDestroyInstance(instance);
|
||||
return res;
|
||||
}
|
||||
g_instance_extensions = heap_alloc(len);
|
||||
res = pxrGetVulkanInstanceExtensionsKHR(instance, system, len, &len, g_instance_extensions);
|
||||
instance_extensions = heap_alloc(len);
|
||||
res = pxrGetVulkanInstanceExtensionsKHR(instance, system, len, &len, instance_extensions);
|
||||
if(res != XR_SUCCESS){
|
||||
WINE_WARN("xrGetVulkanInstanceExtensionsKHR failed: %d\n", res);
|
||||
xrDestroyInstance(instance);
|
||||
heap_free(g_instance_extensions);
|
||||
g_instance_extensions = NULL;
|
||||
heap_free(instance_extensions);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -454,7 +445,7 @@ XrResult load_host_openxr_loader(void)
|
|||
.ppEnabledExtensionNames = NULL,
|
||||
};
|
||||
|
||||
parse_extensions(g_instance_extensions,
|
||||
parse_extensions(instance_extensions,
|
||||
&vk_createinfo.enabledExtensionCount,
|
||||
(char ***)&vk_createinfo.ppEnabledExtensionNames);
|
||||
|
||||
|
@ -465,8 +456,7 @@ XrResult load_host_openxr_loader(void)
|
|||
heap_free((void*)vk_createinfo.ppEnabledExtensionNames[i]);
|
||||
heap_free((void*)vk_createinfo.ppEnabledExtensionNames);
|
||||
xrDestroyInstance(instance);
|
||||
heap_free(g_instance_extensions);
|
||||
g_instance_extensions = NULL;
|
||||
heap_free(instance_extensions);
|
||||
return XR_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
|
||||
|
@ -479,8 +469,7 @@ XrResult load_host_openxr_loader(void)
|
|||
WINE_WARN("xrGetVulkanGraphicsDeviceKHR failed: %d\n", res);
|
||||
vkDestroyInstance(vk_instance, NULL);
|
||||
xrDestroyInstance(instance);
|
||||
heap_free(g_instance_extensions);
|
||||
g_instance_extensions = NULL;
|
||||
heap_free(instance_extensions);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -493,32 +482,47 @@ XrResult load_host_openxr_loader(void)
|
|||
WINE_WARN("pxrGetVulkanDeviceExtensionsKHR fail: %d\n", res);
|
||||
vkDestroyInstance(vk_instance, NULL);
|
||||
xrDestroyInstance(instance);
|
||||
heap_free(g_instance_extensions);
|
||||
g_instance_extensions = NULL;
|
||||
heap_free(instance_extensions);
|
||||
return res;
|
||||
}
|
||||
g_device_extensions = heap_alloc(len);
|
||||
res = pxrGetVulkanDeviceExtensionsKHR(instance, system, len, &len, g_device_extensions);
|
||||
device_extensions = heap_alloc(len);
|
||||
res = pxrGetVulkanDeviceExtensionsKHR(instance, system, len, &len, device_extensions);
|
||||
if(res != XR_SUCCESS){
|
||||
WINE_WARN("pxrGetVulkanDeviceExtensionsKHR fail: %d\n", res);
|
||||
vkDestroyInstance(vk_instance, NULL);
|
||||
xrDestroyInstance(instance);
|
||||
heap_free(g_instance_extensions);
|
||||
g_instance_extensions = NULL;
|
||||
heap_free(g_device_extensions);
|
||||
g_device_extensions = NULL;
|
||||
heap_free(instance_extensions);
|
||||
heap_free(device_extensions);
|
||||
return res;
|
||||
}
|
||||
|
||||
vkDestroyInstance(vk_instance, NULL);
|
||||
xrDestroyInstance(instance);
|
||||
|
||||
WINE_TRACE("Got required instance extensions: %s\n", g_instance_extensions);
|
||||
WINE_TRACE("Got required device extensions: %s\n", g_device_extensions);
|
||||
WINE_TRACE("Got required instance extensions: %s\n", instance_extensions);
|
||||
WINE_TRACE("Got required device extensions: %s\n", device_extensions);
|
||||
|
||||
*ret_instance_extensions = instance_extensions;
|
||||
*ret_device_extensions = device_extensions;
|
||||
|
||||
return XR_SUCCESS;
|
||||
}
|
||||
|
||||
XrResult load_host_openxr_loader(void)
|
||||
{
|
||||
if(g_instance_extensions || g_device_extensions)
|
||||
/* already done */
|
||||
return XR_SUCCESS;
|
||||
|
||||
if(!HACK_does_openvr_work()){
|
||||
return XR_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
|
||||
load_vk_unwrappers();
|
||||
|
||||
return __wineopenxr_get_extensions_internal(&g_instance_extensions, &g_device_extensions);
|
||||
}
|
||||
|
||||
XrResult WINAPI wine_xrEnumerateInstanceExtensionProperties(const char *layerName,
|
||||
uint32_t propertyCapacityInput, uint32_t *propertyCountOutput, XrExtensionProperties *properties)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
@ stdcall xrNegotiateLoaderRuntimeInterface(ptr ptr) wine_xrNegotiateLoaderRuntimeInterface
|
||||
@ stdcall __wineopenxr_GetVulkanInstanceExtensions(long ptr ptr)
|
||||
@ stdcall __wineopenxr_GetVulkanDeviceExtensions(long ptr ptr)
|
||||
@ stdcall __wineopenxr_get_extensions_internal(ptr ptr)
|
||||
|
|
Loading…
Reference in a new issue