diff --git a/wineopenxr/make_openxr b/wineopenxr/make_openxr index c6b3dda3..ec403500 100755 --- a/wineopenxr/make_openxr +++ b/wineopenxr/make_openxr @@ -177,6 +177,7 @@ FUNCTION_OVERRIDES = { "xrEndFrame" : {"dispatch" : True, "driver" : True, "thunk" : False}, "xrBeginFrame" : {"dispatch" : True, "driver" : True, "thunk" : False}, "xrAcquireSwapchainImage" : {"dispatch" : True, "driver" : True, "thunk" : False}, + "xrReleaseSwapchainImage" : {"dispatch" : True, "driver" : True, "thunk" : False}, } NOT_OUR_FUNCTIONS = [ diff --git a/wineopenxr/openxr.c b/wineopenxr/openxr.c index a4a50550..4f273cb2 100644 --- a/wineopenxr/openxr.c +++ b/wineopenxr/openxr.c @@ -1909,6 +1909,21 @@ XrResult WINAPI wine_xrAcquireSwapchainImage(XrSwapchain swapchain, const XrSwap 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 */ XrResult WINAPI __wineopenxr_GetVulkanInstanceExtensions(uint32_t buflen, uint32_t *outlen, char *buf) { diff --git a/wineopenxr/openxr_thunks.c b/wineopenxr/openxr_thunks.c index 2d7e2a96..06590fc3 100644 --- a/wineopenxr/openxr_thunks.c +++ b/wineopenxr/openxr_thunks.c @@ -1989,15 +1989,6 @@ static XrResult WINAPI wine_xrQuerySystemTrackedKeyboardFB(XrSession session, co #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) { XrResult ret; diff --git a/wineopenxr/openxr_thunks.h b/wineopenxr/openxr_thunks.h index 50f78c69..2031aa08 100644 --- a/wineopenxr/openxr_thunks.h +++ b/wineopenxr/openxr_thunks.h @@ -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_xrNegotiateLoaderRuntimeInterface(const XrNegotiateLoaderInfo *loaderInfo, XrNegotiateRuntimeRequest *runtimeRequest); XrResult WINAPI wine_xrPollEvent(XrInstance instance, XrEventDataBuffer *eventData); +XrResult WINAPI wine_xrReleaseSwapchainImage(XrSwapchain swapchain, const XrSwapchainImageReleaseInfo *releaseInfo); /* Private thunks */