The open source OpenXR runtime
at main 96 lines 1.9 kB view raw
1// Copyright 2020-2023, Collabora, Ltd. 2// SPDX-License-Identifier: BSL-1.0 3/*! 4 * @file 5 * @brief Client side wrapper of @ref xrt_session. 6 * @author Jakob Bornecrantz <jakob@collabora.com> 7 * @ingroup ipc_client 8 */ 9 10#include "xrt/xrt_defines.h" 11#include "xrt/xrt_session.h" 12 13#include "ipc_client_generated.h" 14 15 16/*! 17 * IPC client implementation of @ref xrt_session. 18 * 19 * @implements xrt_session 20 * @ingroup ipc_client 21 */ 22struct ipc_client_session 23{ 24 struct xrt_session base; 25 26 struct ipc_connection *ipc_c; 27}; 28 29 30/* 31 * 32 * Helpers 33 * 34 */ 35 36static inline struct ipc_client_session * 37ipc_session(struct xrt_session *xs) 38{ 39 return (struct ipc_client_session *)xs; 40} 41 42 43/* 44 * 45 * Member functions. 46 * 47 */ 48 49static xrt_result_t 50ipc_client_session_poll_events(struct xrt_session *xs, union xrt_session_event *out_xse) 51{ 52 struct ipc_client_session *ics = ipc_session(xs); 53 xrt_result_t xret; 54 55 xret = ipc_call_session_poll_events(ics->ipc_c, out_xse); 56 IPC_CHK_ALWAYS_RET(ics->ipc_c, xret, "ipc_call_session_poll_events"); 57} 58 59static void 60ipc_client_session_destroy(struct xrt_session *xs) 61{ 62 struct ipc_client_session *ics = ipc_session(xs); 63 xrt_result_t xret; 64 65 /* 66 * We own the session in both cases of headless or created with a 67 * native compositor, so we need to destroy it. 68 */ 69 xret = ipc_call_session_destroy(ics->ipc_c); 70 71 /* 72 * We are probably in a really bad state if we fail, at 73 * least print out the error and continue as best we can. 74 */ 75 IPC_CHK_ONLY_PRINT(ics->ipc_c, xret, "ipc_call_session_destroy"); 76 77 free(ics); 78} 79 80 81/* 82 * 83 * 'Exported' functions. 84 * 85 */ 86 87struct xrt_session * 88ipc_client_session_create(struct ipc_connection *ipc_c) 89{ 90 struct ipc_client_session *ics = U_TYPED_CALLOC(struct ipc_client_session); 91 ics->base.poll_events = ipc_client_session_poll_events; 92 ics->base.destroy = ipc_client_session_destroy; 93 ics->ipc_c = ipc_c; 94 95 return &ics->base; 96}