Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ValveSoftware/Proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gofman <pgofman@codeweavers.com>2021-10-05 19:36:07 +0300
committerArkadiusz Hiler <ahiler@codeweavers.com>2021-11-11 19:36:08 +0300
commit034ff27cf3b917fd8505ac455e38e82a1a00c76d (patch)
treeb8c363e413193d436ca38010d6e358ca97a68a14 /wineopenxr
parent89f81347403bcc822ed707e55d42417a5c684445 (diff)
wineopenxr: Export __wineopenxr_get_extensions_internal() function.
CW-Bug-ID: #19504
Diffstat (limited to 'wineopenxr')
-rw-r--r--wineopenxr/openxr.c64
-rw-r--r--wineopenxr/wineopenxr.spec1
2 files changed, 35 insertions, 30 deletions
diff --git a/wineopenxr/openxr.c b/wineopenxr/openxr.c
index ea4a6dda..05198b20 100644
--- a/wineopenxr/openxr.c
+++ b/wineopenxr/openxr.c
@@ -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)
{
diff --git a/wineopenxr/wineopenxr.spec b/wineopenxr/wineopenxr.spec
index b4460ea3..43c30f5e 100644
--- a/wineopenxr/wineopenxr.spec
+++ b/wineopenxr/wineopenxr.spec
@@ -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)