wineopenxr: Lock d3d11 device in xrReleaseSwapchainImage().

CW-Bug-Id: #23491
This commit is contained in:
Paul Gofman 2024-05-01 15:48:36 -06:00 committed by Arkadiusz Hiler
parent 231c4b7112
commit c35598bb21
4 changed files with 17 additions and 9 deletions

View file

@ -177,6 +177,7 @@ FUNCTION_OVERRIDES = {
"xrEndFrame" : {"dispatch" : True, "driver" : True, "thunk" : False}, "xrEndFrame" : {"dispatch" : True, "driver" : True, "thunk" : False},
"xrBeginFrame" : {"dispatch" : True, "driver" : True, "thunk" : False}, "xrBeginFrame" : {"dispatch" : True, "driver" : True, "thunk" : False},
"xrAcquireSwapchainImage" : {"dispatch" : True, "driver" : True, "thunk" : False}, "xrAcquireSwapchainImage" : {"dispatch" : True, "driver" : True, "thunk" : False},
"xrReleaseSwapchainImage" : {"dispatch" : True, "driver" : True, "thunk" : False},
} }
NOT_OUR_FUNCTIONS = [ NOT_OUR_FUNCTIONS = [

View file

@ -1909,6 +1909,21 @@ XrResult WINAPI wine_xrAcquireSwapchainImage(XrSwapchain swapchain, const XrSwap
return ret; return ret;
} }
XrResult WINAPI wine_xrReleaseSwapchainImage(XrSwapchain swapchain, const XrSwapchainImageReleaseInfo *releaseInfo)
{
wine_XrSession *wine_session = ((wine_XrSwapchain *)swapchain)->wine_session;
IDXGIVkInteropDevice2 *dxvk_device;
XrResult ret;
WINE_TRACE("%p, %p\n", swapchain, releaseInfo);
if ((dxvk_device = wine_session->wine_instance->dxvk_device))
dxvk_device->lpVtbl->LockSubmissionQueue(dxvk_device);
ret = xrReleaseSwapchainImage(((wine_XrSwapchain *)swapchain)->swapchain, releaseInfo);
if (dxvk_device)
dxvk_device->lpVtbl->ReleaseSubmissionQueue(dxvk_device);
return ret;
}
/* wineopenxr API */ /* wineopenxr API */
XrResult WINAPI __wineopenxr_GetVulkanInstanceExtensions(uint32_t buflen, uint32_t *outlen, char *buf) XrResult WINAPI __wineopenxr_GetVulkanInstanceExtensions(uint32_t buflen, uint32_t *outlen, char *buf)
{ {

View file

@ -1989,15 +1989,6 @@ static XrResult WINAPI wine_xrQuerySystemTrackedKeyboardFB(XrSession session, co
#endif #endif
} }
XrResult WINAPI wine_xrReleaseSwapchainImage(XrSwapchain swapchain, const XrSwapchainImageReleaseInfo *releaseInfo)
{
XrResult ret;
WINE_TRACE("%p, %p\n", swapchain, releaseInfo);
ret = xrReleaseSwapchainImage(((wine_XrSwapchain *)swapchain)->swapchain, releaseInfo);
return ret;
}
static XrResult WINAPI wine_xrRequestDisplayRefreshRateFB(XrSession session, float displayRefreshRate) static XrResult WINAPI wine_xrRequestDisplayRefreshRateFB(XrSession session, float displayRefreshRate)
{ {
XrResult ret; XrResult ret;

View file

@ -53,6 +53,7 @@ XrResult WINAPI wine_xrGetVulkanInstanceExtensionsKHR(XrInstance instance, XrSys
XrResult WINAPI wine_xrNegotiateLoaderApiLayerInterface(const XrNegotiateLoaderInfo *loaderInfo, const char *layerName, XrNegotiateApiLayerRequest *apiLayerRequest); XrResult WINAPI wine_xrNegotiateLoaderApiLayerInterface(const XrNegotiateLoaderInfo *loaderInfo, const char *layerName, XrNegotiateApiLayerRequest *apiLayerRequest);
XrResult WINAPI wine_xrNegotiateLoaderRuntimeInterface(const XrNegotiateLoaderInfo *loaderInfo, XrNegotiateRuntimeRequest *runtimeRequest); XrResult WINAPI wine_xrNegotiateLoaderRuntimeInterface(const XrNegotiateLoaderInfo *loaderInfo, XrNegotiateRuntimeRequest *runtimeRequest);
XrResult WINAPI wine_xrPollEvent(XrInstance instance, XrEventDataBuffer *eventData); XrResult WINAPI wine_xrPollEvent(XrInstance instance, XrEventDataBuffer *eventData);
XrResult WINAPI wine_xrReleaseSwapchainImage(XrSwapchain swapchain, const XrSwapchainImageReleaseInfo *releaseInfo);
/* Private thunks */ /* Private thunks */