mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-05-30 15:27:40 +03:00
wineopenxr: Get real host extensions in get_extensions().
CW-Bug-Id: #25451
This commit is contained in:
parent
d8fdf091df
commit
672da0978f
@ -237,7 +237,6 @@ static int get_extensions(char **ret_instance_extensions, char **ret_device_exte
|
|||||||
uint32_t *ret_physdev_vid, uint32_t *ret_physdev_pid) {
|
uint32_t *ret_physdev_vid, uint32_t *ret_physdev_pid) {
|
||||||
PFN_xrGetVulkanInstanceExtensionsKHR pxrGetVulkanInstanceExtensionsKHR;
|
PFN_xrGetVulkanInstanceExtensionsKHR pxrGetVulkanInstanceExtensionsKHR;
|
||||||
PFN_xrGetSystem pxrGetSystem;
|
PFN_xrGetSystem pxrGetSystem;
|
||||||
PFN_xrGetVulkanDeviceExtensionsKHR pxrGetVulkanDeviceExtensionsKHR;
|
|
||||||
PFN_xrGetVulkanGraphicsDeviceKHR pxrGetVulkanGraphicsDeviceKHR;
|
PFN_xrGetVulkanGraphicsDeviceKHR pxrGetVulkanGraphicsDeviceKHR;
|
||||||
PFN_xrGetVulkanGraphicsRequirementsKHR pxrGetVulkanGraphicsRequirementsKHR;
|
PFN_xrGetVulkanGraphicsRequirementsKHR pxrGetVulkanGraphicsRequirementsKHR;
|
||||||
PFN_xrGetInstanceProperties pxrGetInstanceProperties;
|
PFN_xrGetInstanceProperties pxrGetInstanceProperties;
|
||||||
@ -251,6 +250,8 @@ static int get_extensions(char **ret_instance_extensions, char **ret_device_exte
|
|||||||
VkResult vk_res;
|
VkResult vk_res;
|
||||||
VkPhysicalDevice vk_physdev;
|
VkPhysicalDevice vk_physdev;
|
||||||
VkPhysicalDeviceProperties vk_dev_props;
|
VkPhysicalDeviceProperties vk_dev_props;
|
||||||
|
struct xrGetVulkanDeviceExtensionsKHR_params params;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
static const char *xr_extensions[] = {
|
static const char *xr_extensions[] = {
|
||||||
"XR_KHR_vulkan_enable",
|
"XR_KHR_vulkan_enable",
|
||||||
@ -324,8 +325,6 @@ static int get_extensions(char **ret_instance_extensions, char **ret_device_exte
|
|||||||
|
|
||||||
xrGetInstanceProcAddr(instance, "xrGetVulkanInstanceExtensionsKHR",
|
xrGetInstanceProcAddr(instance, "xrGetVulkanInstanceExtensionsKHR",
|
||||||
(PFN_xrVoidFunction *)&pxrGetVulkanInstanceExtensionsKHR);
|
(PFN_xrVoidFunction *)&pxrGetVulkanInstanceExtensionsKHR);
|
||||||
xrGetInstanceProcAddr(instance, "xrGetVulkanDeviceExtensionsKHR",
|
|
||||||
(PFN_xrVoidFunction *)&pxrGetVulkanDeviceExtensionsKHR);
|
|
||||||
xrGetInstanceProcAddr(instance, "xrGetSystem", (PFN_xrVoidFunction *)&pxrGetSystem);
|
xrGetInstanceProcAddr(instance, "xrGetSystem", (PFN_xrVoidFunction *)&pxrGetSystem);
|
||||||
xrGetInstanceProcAddr(instance, "xrGetVulkanGraphicsDeviceKHR", (PFN_xrVoidFunction *)&pxrGetVulkanGraphicsDeviceKHR);
|
xrGetInstanceProcAddr(instance, "xrGetVulkanGraphicsDeviceKHR", (PFN_xrVoidFunction *)&pxrGetVulkanGraphicsDeviceKHR);
|
||||||
xrGetInstanceProcAddr(instance, "xrGetVulkanGraphicsRequirementsKHR",
|
xrGetInstanceProcAddr(instance, "xrGetVulkanGraphicsRequirementsKHR",
|
||||||
@ -410,7 +409,16 @@ static int get_extensions(char **ret_instance_extensions, char **ret_device_exte
|
|||||||
*ret_physdev_vid = vk_dev_props.vendorID;
|
*ret_physdev_vid = vk_dev_props.vendorID;
|
||||||
*ret_physdev_pid = vk_dev_props.deviceID;
|
*ret_physdev_pid = vk_dev_props.deviceID;
|
||||||
|
|
||||||
res = pxrGetVulkanDeviceExtensionsKHR(instance, system, 0, &len, NULL);
|
/* Call Unix thunk directly to get the real host extensions list */
|
||||||
|
params.instance = instance;
|
||||||
|
params.systemId = system;
|
||||||
|
params.bufferCapacityInput = 0;
|
||||||
|
params.bufferCountOutput = &len;
|
||||||
|
params.buffer = NULL;
|
||||||
|
status = UNIX_CALL(xrGetVulkanDeviceExtensionsKHR, ¶ms);
|
||||||
|
assert(!status && "xrGetVulkanDeviceExtensionsKHR");
|
||||||
|
res = params.result;
|
||||||
|
|
||||||
if (res != XR_SUCCESS) {
|
if (res != XR_SUCCESS) {
|
||||||
WARN("pxrGetVulkanDeviceExtensionsKHR fail: %d\n", res);
|
WARN("pxrGetVulkanDeviceExtensionsKHR fail: %d\n", res);
|
||||||
vkDestroyInstance(vk_instance, NULL);
|
vkDestroyInstance(vk_instance, NULL);
|
||||||
@ -419,7 +427,13 @@ static int get_extensions(char **ret_instance_extensions, char **ret_device_exte
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
device_extensions = malloc(len);
|
device_extensions = malloc(len);
|
||||||
res = pxrGetVulkanDeviceExtensionsKHR(instance, system, len, &len, device_extensions);
|
|
||||||
|
params.bufferCapacityInput = len;
|
||||||
|
params.buffer = device_extensions;
|
||||||
|
status = UNIX_CALL(xrGetVulkanDeviceExtensionsKHR, ¶ms);
|
||||||
|
assert(!status && "xrGetVulkanDeviceExtensionsKHR");
|
||||||
|
res = params.result;
|
||||||
|
|
||||||
if (res != XR_SUCCESS) {
|
if (res != XR_SUCCESS) {
|
||||||
WARN("pxrGetVulkanDeviceExtensionsKHR fail: %d\n", res);
|
WARN("pxrGetVulkanDeviceExtensionsKHR fail: %d\n", res);
|
||||||
vkDestroyInstance(vk_instance, NULL);
|
vkDestroyInstance(vk_instance, NULL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user