Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 35 additions & 6 deletions wineopenxr/openxr_loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -718,6 +718,10 @@ XrResult WINAPI xrDestroySession(XrSession session) {
return params.result;
}

EnterCriticalSection(&session_list_lock);
list_remove(&wine_session->entry);
LeaveCriticalSection(&session_list_lock);

free(wine_session);
return XR_SUCCESS;
}
Expand All @@ -734,35 +738,60 @@ XrResult WINAPI xrPollEvent(XrInstance instance, XrEventDataBuffer *eventData) {
WINE_TRACE("eventData->type %#x\n", eventData->type);

if (params.result == XR_SUCCESS) {
wine_XrSession *wrapped;
switch (eventData->type) {
case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED: {
XrEventDataInteractionProfileChanged *evt = (XrEventDataInteractionProfileChanged *)eventData;
evt->session = (XrSession)get_wrapped_XrSession(evt->session);
wrapped = get_wrapped_XrSession(evt->session);
if (wrapped)
evt->session = (XrSession)wrapped;
else
WARN("Session %p not found in session list for interaction profile changed event\n", evt->session);
break;
}
case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: {
XrEventDataSessionStateChanged *evt = (XrEventDataSessionStateChanged *)eventData;
evt->session = (XrSession)get_wrapped_XrSession(evt->session);
wrapped = get_wrapped_XrSession(evt->session);
if (wrapped)
evt->session = (XrSession)wrapped;
else
WARN("Session %p not found in session list for session state changed event\n", evt->session);
break;
}
case XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR: {
XrEventDataVisibilityMaskChangedKHR *evt = (XrEventDataVisibilityMaskChangedKHR *)eventData;
evt->session = (XrSession)get_wrapped_XrSession(evt->session);
wrapped = get_wrapped_XrSession(evt->session);
if (wrapped)
evt->session = (XrSession)wrapped;
else
WARN("Session %p not found in session list for visibility mask changed event\n", evt->session);
break;
}
case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING: {
XrEventDataReferenceSpaceChangePending *evt = (XrEventDataReferenceSpaceChangePending *)eventData;
evt->session = (XrSession)get_wrapped_XrSession(evt->session);
wrapped = get_wrapped_XrSession(evt->session);
if (wrapped)
evt->session = (XrSession)wrapped;
else
WARN("Session %p not found in session list for reference space change pending event\n", evt->session);
break;
}
case XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT: {
XrEventDataUserPresenceChangedEXT *evt = (XrEventDataUserPresenceChangedEXT *)eventData;
evt->session = (XrSession)get_wrapped_XrSession(evt->session);
wrapped = get_wrapped_XrSession(evt->session);
if (wrapped)
evt->session = (XrSession)wrapped;
else
WARN("Session %p not found in session list for user presence changed event\n", evt->session);
break;
}
case XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML: {
XrEventDataLocalizationChangedML *evt = (XrEventDataLocalizationChangedML *)eventData;
evt->session = (XrSession)get_wrapped_XrSession(evt->session);
wrapped = get_wrapped_XrSession(evt->session);
if (wrapped)
evt->session = (XrSession)wrapped;
else
WARN("Session %p not found in session list for localization changed event\n", evt->session);
break;
}
default:
Expand Down