wineopenxr: change instance type to session type
Graphics in OpenXR are bound by their sessions, not by their instances. https://github.com/ValveSoftware/Proton/pull/7424
This commit is contained in:
parent
1df6335f80
commit
0efcd7d787
2 changed files with 14 additions and 20 deletions
|
@ -763,7 +763,7 @@ XrResult WINAPI wine_xrCreateInstance(const XrInstanceCreateInfo *createInfo, Xr
|
||||||
{
|
{
|
||||||
XrResult res;
|
XrResult res;
|
||||||
struct wine_XrInstance *wine_instance;
|
struct wine_XrInstance *wine_instance;
|
||||||
uint32_t i, j, count, type = 0;
|
uint32_t i, j, count = 0;
|
||||||
XrInstanceCreateInfo our_createInfo;
|
XrInstanceCreateInfo our_createInfo;
|
||||||
const char *ext_name;
|
const char *ext_name;
|
||||||
char **new_list;
|
char **new_list;
|
||||||
|
@ -773,15 +773,6 @@ XrResult WINAPI wine_xrCreateInstance(const XrInstanceCreateInfo *createInfo, Xr
|
||||||
WINE_TRACE("Incoming extensions:\n");
|
WINE_TRACE("Incoming extensions:\n");
|
||||||
for(i = 0; i < createInfo->enabledExtensionCount; ++i){
|
for(i = 0; i < createInfo->enabledExtensionCount; ++i){
|
||||||
WINE_TRACE(" -%s\n", createInfo->enabledExtensionNames[i]);
|
WINE_TRACE(" -%s\n", createInfo->enabledExtensionNames[i]);
|
||||||
if(!strcmp(createInfo->enabledExtensionNames[i], "XR_KHR_D3D11_enable")){
|
|
||||||
type = INSTANCE_TYPE_D3D11;
|
|
||||||
}else if(!strcmp(createInfo->enabledExtensionNames[i], "XR_KHR_D3D12_enable")){
|
|
||||||
type = INSTANCE_TYPE_D3D12;
|
|
||||||
}else if(!strcmp(createInfo->enabledExtensionNames[i], "XR_KHR_vulkan_enable")){
|
|
||||||
type = INSTANCE_TYPE_VULKAN;
|
|
||||||
}else if(!strcmp(createInfo->enabledExtensionNames[i], "XR_KHR_opengl_enable")){
|
|
||||||
type = INSTANCE_TYPE_OPENGL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
new_list = heap_alloc(createInfo->enabledExtensionCount * sizeof(*new_list));
|
new_list = heap_alloc(createInfo->enabledExtensionCount * sizeof(*new_list));
|
||||||
|
@ -833,7 +824,6 @@ XrResult WINAPI wine_xrCreateInstance(const XrInstanceCreateInfo *createInfo, Xr
|
||||||
ALL_XR_INSTANCE_FUNCS()
|
ALL_XR_INSTANCE_FUNCS()
|
||||||
#undef USE_XR_FUNC
|
#undef USE_XR_FUNC
|
||||||
|
|
||||||
wine_instance->instance_type = type;
|
|
||||||
*instance = (XrInstance)wine_instance;
|
*instance = (XrInstance)wine_instance;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
@ -934,6 +924,7 @@ XrResult WINAPI wine_xrCreateSession(XrInstance instance, const XrSessionCreateI
|
||||||
XrResult res;
|
XrResult res;
|
||||||
XrSessionCreateInfo our_create_info;
|
XrSessionCreateInfo our_create_info;
|
||||||
XrGraphicsBindingVulkanKHR our_vk_binding;
|
XrGraphicsBindingVulkanKHR our_vk_binding;
|
||||||
|
uint32_t session_type = 0;
|
||||||
|
|
||||||
WINE_TRACE("%p, %p, %p\n", instance, createInfo, session);
|
WINE_TRACE("%p, %p, %p\n", instance, createInfo, session);
|
||||||
|
|
||||||
|
@ -951,6 +942,7 @@ XrResult WINAPI wine_xrCreateSession(XrInstance instance, const XrSessionCreateI
|
||||||
our_create_info = *createInfo;
|
our_create_info = *createInfo;
|
||||||
our_create_info.next = &our_vk_binding;
|
our_create_info.next = &our_vk_binding;
|
||||||
createInfo = &our_create_info;
|
createInfo = &our_create_info;
|
||||||
|
session_type = SESSION_TYPE_VULKAN;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -988,6 +980,7 @@ XrResult WINAPI wine_xrCreateSession(XrInstance instance, const XrSessionCreateI
|
||||||
our_create_info = *createInfo;
|
our_create_info = *createInfo;
|
||||||
our_create_info.next = &our_vk_binding;
|
our_create_info.next = &our_vk_binding;
|
||||||
createInfo = &our_create_info;
|
createInfo = &our_create_info;
|
||||||
|
session_type = SESSION_TYPE_D3D11;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1007,6 +1000,7 @@ XrResult WINAPI wine_xrCreateSession(XrInstance instance, const XrSessionCreateI
|
||||||
}
|
}
|
||||||
|
|
||||||
wine_session->wine_instance = wine_instance;
|
wine_session->wine_instance = wine_instance;
|
||||||
|
wine_session->session_type = session_type;
|
||||||
|
|
||||||
EnterCriticalSection(&session_list_lock);
|
EnterCriticalSection(&session_list_lock);
|
||||||
|
|
||||||
|
@ -1964,7 +1958,7 @@ XrResult WINAPI wine_xrEnumerateSwapchainFormats(XrSession session, uint32_t for
|
||||||
|
|
||||||
WINE_TRACE("%p, %u, %p, %p\n", session, formatCapacityInput, formatCountOutput, formats);
|
WINE_TRACE("%p, %u, %p, %p\n", session, formatCapacityInput, formatCountOutput, formats);
|
||||||
|
|
||||||
if (wine_session->wine_instance->instance_type != INSTANCE_TYPE_D3D11)
|
if (wine_session->session_type != SESSION_TYPE_D3D11)
|
||||||
return xrEnumerateSwapchainFormats(wine_session->session, formatCapacityInput, formatCountOutput, formats);
|
return xrEnumerateSwapchainFormats(wine_session->session, formatCapacityInput, formatCountOutput, formats);
|
||||||
|
|
||||||
res = xrEnumerateSwapchainFormats(wine_session->session, 0, &real_format_count, NULL);
|
res = xrEnumerateSwapchainFormats(wine_session->session, 0, &real_format_count, NULL);
|
||||||
|
@ -2012,7 +2006,7 @@ XrResult WINAPI wine_xrCreateSwapchain(XrSession session, const XrSwapchainCreat
|
||||||
wine_swapchain = heap_alloc_zero(sizeof(*wine_swapchain));
|
wine_swapchain = heap_alloc_zero(sizeof(*wine_swapchain));
|
||||||
wine_swapchain->create_info = *createInfo;
|
wine_swapchain->create_info = *createInfo;
|
||||||
|
|
||||||
if(wine_session->wine_instance->instance_type == INSTANCE_TYPE_D3D11){
|
if(wine_session->session_type == SESSION_TYPE_D3D11){
|
||||||
our_createInfo = *createInfo;
|
our_createInfo = *createInfo;
|
||||||
our_createInfo.format = map_format_dxgi_to_vulkan(createInfo->format);
|
our_createInfo.format = map_format_dxgi_to_vulkan(createInfo->format);
|
||||||
if(our_createInfo.format == VK_FORMAT_UNDEFINED){
|
if(our_createInfo.format == VK_FORMAT_UNDEFINED){
|
||||||
|
@ -2091,7 +2085,7 @@ XrResult WINAPI wine_xrEnumerateSwapchainImages(XrSwapchain swapchain, uint32_t
|
||||||
WINE_TRACE("%p, %u, %p, %p\n", swapchain, imageCapacityInput, imageCountOutput, images);
|
WINE_TRACE("%p, %u, %p, %p\n", swapchain, imageCapacityInput, imageCountOutput, images);
|
||||||
|
|
||||||
if(images){
|
if(images){
|
||||||
if(wine_instance->instance_type == INSTANCE_TYPE_D3D11){
|
if(wine_swapchain->wine_session->session_type == SESSION_TYPE_D3D11){
|
||||||
our_images = heap_alloc(sizeof(*our_images) * imageCapacityInput);
|
our_images = heap_alloc(sizeof(*our_images) * imageCapacityInput);
|
||||||
for(i = 0; i < imageCapacityInput; ++i){
|
for(i = 0; i < imageCapacityInput; ++i){
|
||||||
our_images[i].type = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR;
|
our_images[i].type = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR;
|
||||||
|
@ -2103,7 +2097,7 @@ XrResult WINAPI wine_xrEnumerateSwapchainImages(XrSwapchain swapchain, uint32_t
|
||||||
res = xrEnumerateSwapchainImages(wine_swapchain->swapchain, imageCapacityInput, imageCountOutput, images);
|
res = xrEnumerateSwapchainImages(wine_swapchain->swapchain, imageCapacityInput, imageCountOutput, images);
|
||||||
|
|
||||||
if(images && res == XR_SUCCESS){
|
if(images && res == XR_SUCCESS){
|
||||||
if(wine_instance->instance_type == INSTANCE_TYPE_D3D11){
|
if(wine_swapchain->wine_session->session_type == SESSION_TYPE_D3D11){
|
||||||
XrSwapchainImageD3D11KHR *their_d3d11;
|
XrSwapchainImageD3D11KHR *their_d3d11;
|
||||||
D3D11_TEXTURE2D_DESC1 desc;
|
D3D11_TEXTURE2D_DESC1 desc;
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
|
|
||||||
#include "wine/list.h"
|
#include "wine/list.h"
|
||||||
|
|
||||||
#define INSTANCE_TYPE_VULKAN 1
|
#define SESSION_TYPE_VULKAN 1
|
||||||
#define INSTANCE_TYPE_OPENGL 2
|
#define SESSION_TYPE_OPENGL 2
|
||||||
#define INSTANCE_TYPE_D3D11 3
|
#define SESSION_TYPE_D3D11 3
|
||||||
#define INSTANCE_TYPE_D3D12 4
|
#define SESSION_TYPE_D3D12 4
|
||||||
|
|
||||||
struct IDXGIVkInteropDevice2;
|
struct IDXGIVkInteropDevice2;
|
||||||
typedef struct IDXGIVkInteropDevice2 IDXGIVkInteropDevice2;
|
typedef struct IDXGIVkInteropDevice2 IDXGIVkInteropDevice2;
|
||||||
|
@ -17,7 +17,6 @@ typedef struct wine_XrInstance {
|
||||||
VkInstance vk_instance;
|
VkInstance vk_instance;
|
||||||
VkPhysicalDevice vk_phys_dev;
|
VkPhysicalDevice vk_phys_dev;
|
||||||
|
|
||||||
uint32_t instance_type;
|
|
||||||
XrSystemId systemId;
|
XrSystemId systemId;
|
||||||
|
|
||||||
IDXGIVkInteropDevice2 *dxvk_device;
|
IDXGIVkInteropDevice2 *dxvk_device;
|
||||||
|
@ -36,6 +35,7 @@ typedef struct wine_XrSession {
|
||||||
XrSession session;
|
XrSession session;
|
||||||
struct wine_XrInstance *wine_instance;
|
struct wine_XrInstance *wine_instance;
|
||||||
|
|
||||||
|
uint32_t session_type;
|
||||||
struct list entry;
|
struct list entry;
|
||||||
|
|
||||||
uint32_t composition_layer_count;
|
uint32_t composition_layer_count;
|
||||||
|
|
Loading…
Reference in a new issue