36#define MULTI_MAX_CLIENTS 64
44#define MULTI_MAX_LAYERS XRT_MAX_LAYERS
132 bool is_base_session;
192 float current_refresh_rate_hz;
235multi_compositor_deliver_any_frames(
struct multi_compositor *mc, int64_t display_time_ns);
245multi_compositor_latch_frame_locked(
struct multi_compositor *mc, int64_t when_ns, int64_t system_frame_id);
255multi_compositor_retire_delivered_locked(
struct multi_compositor *mc, int64_t when_ns);
328 comp_multi_view_config_callback_func_t get_view_config_callback;
370 int64_t predicted_display_time_ns;
371 int64_t predicted_display_period_ns;
Interface for the multi-client layer code.
#define MULTI_MAX_LAYERS
Number of max active layers per multi_compositor.
Definition comp_multi_private.h:44
xrt_result_t multi_compositor_create(struct multi_system_compositor *msc, const struct xrt_session_info *xsi, struct xrt_session_event_sink *xses, struct xrt_compositor_native **out_xcn)
Create a multi client wrapper compositor.
Definition comp_multi_compositor.c:971
#define MULTI_MAX_CLIENTS
Number of max active clients.
Definition comp_multi_private.h:36
multi_system_state
State of the multi-client system compositor.
Definition comp_multi_private.h:273
@ MULTI_SYSTEM_STATE_INVALID
Invalid state, never used.
Definition comp_multi_private.h:277
@ MULTI_SYSTEM_STATE_RUNNING
The main session is running.
Definition comp_multi_private.h:301
@ MULTI_SYSTEM_STATE_STOPPING
There are no active sessions and the multi-client system compositor is instructing the native composi...
Definition comp_multi_private.h:310
@ MULTI_SYSTEM_STATE_INIT_WARM_START
One of the initial states, the multi-client system compositor will make sure that its xrt_compositor_...
Definition comp_multi_private.h:285
@ MULTI_SYSTEM_STATE_STOPPED
One of the initial state and post stopping state.
Definition comp_multi_private.h:293
enum xrt_result xrt_result_t
Result type used across Monado.
Wrapper around OS threading native functions.
Wrapper around OS native time functions.
A single compositor for feeding the layers from one session/app into the multi-client-capable system ...
Definition comp_multi_private.h:106
struct multi_layer_slot scheduled
Scheduled frames for a future timepoint.
Definition comp_multi_private.h:182
struct os_precise_sleeper scheduled_sleeper
Used when waiting for the scheduled frame to complete.
Definition comp_multi_private.h:122
struct multi_system_compositor * msc
Owning system compositor.
Definition comp_multi_private.h:116
uint64_t value
Timeline semaphore value to wait for.
Definition comp_multi_private.h:144
int64_t slot_next_frame_display
The next which the next frames to be picked up will be displayed.
Definition comp_multi_private.h:173
struct xrt_session_event_sink * xses
Where events for this compositor should go.
Definition comp_multi_private.h:113
struct xrt_compositor_semaphore * xcsem
Timeline semaphore to wait for.
Definition comp_multi_private.h:141
struct os_mutex slot_lock
Lock for all of the slots.
Definition comp_multi_private.h:168
struct os_thread_helper oth
The wait thread itself.
Definition comp_multi_private.h:150
int64_t frame_id
Frame id of frame being waited on.
Definition comp_multi_private.h:147
bool blocked
Is the client thread blocked?
Definition comp_multi_private.h:164
struct multi_layer_slot delivered
Fully ready to be used.
Definition comp_multi_private.h:188
struct os_precise_sleeper frame_sleeper
Used to implement wait frame, only used for in process.
Definition comp_multi_private.h:119
struct xrt_compositor_fence * xcf
Fence to wait for.
Definition comp_multi_private.h:138
bool alive
Have we gotten to the loop?
Definition comp_multi_private.h:153
bool waiting
Is the thread waiting, if so the client should block.
Definition comp_multi_private.h:156
struct multi_layer_slot progress
Currently being transferred or waited on.
Definition comp_multi_private.h:179
Data for a single composition layer.
Definition comp_multi_private.h:61
struct xrt_layer_data data
All basic (trivially-serializable) data associated with a layer, aside from which swapchain(s) are us...
Definition comp_multi_private.h:78
struct xrt_swapchain * xscs[2 *XRT_MAX_VIEWS]
Pointers to swapchains.
Definition comp_multi_private.h:72
struct xrt_device * xdev
Device to get pose from.
Definition comp_multi_private.h:65
Render state for a single client, including all layers.
Definition comp_multi_private.h:87
The multi-client module (aka multi compositor) is system compositor that multiplexes access to a sing...
Definition comp_multi_private.h:324
struct xrt_layer_chroma_key_data chroma_key
Chroma key parameters in HSV space.
Definition comp_multi_private.h:379
struct xrt_multi_compositor_control xmcc
Extra functions to handle multi client.
Definition comp_multi_private.h:331
struct multi_compositor * clients[64]
List of active clients.
Definition comp_multi_private.h:376
enum multi_system_state state
The state of the multi-client system compositor.
Definition comp_multi_private.h:356
struct os_thread_helper oth
Render loop thread.
Definition comp_multi_private.h:346
struct u_pacing_app_factory * upaf
App pacer factory, when a new multi_compositor is created a pacer is created from this factory.
Definition comp_multi_private.h:343
struct os_mutex list_and_timing_lock
This mutex protects the list of client compositor and the rendering timings on it.
Definition comp_multi_private.h:366
uint64_t active_count
Number of active sessions, protected by oth.
Definition comp_multi_private.h:359
struct xrt_compositor_native * xcn
Real native compositor, which this multi client module submits the combined layers of active multi_co...
Definition comp_multi_private.h:337
struct xrt_system_compositor base
Base interface.
Definition comp_multi_private.h:326
A wrapper around a native mutex.
Definition os_threading.h:69
All in one helper that handles locking, waiting for change and starting a thread.
Definition os_threading.h:499
Small helper that creates a app pacers, allows timing information to be collected and controlled to a...
Definition u_pacing.h:619
This application pacing helper is designed to schedule the rendering time of clients that submit fram...
Definition u_pacing.h:348
Compositor fence used for synchronization.
Definition xrt_compositor.h:759
Main compositor server interface.
Definition xrt_compositor.h:2260
Compositor semaphore used for synchronization, needs to be as capable as a Vulkan pipeline semaphore.
Definition xrt_compositor.h:816
Common compositor client interface/base.
Definition xrt_compositor.h:1016
A single HMD or input device.
Definition xrt_device.h:310
Chroma key parameters in HSV space.
Definition xrt_compositor.h:190
All the pure data values associated with a composition layer.
Definition xrt_compositor.h:419
Per frame data for the layer submission calls, used in xrt_compositor::layer_begin.
Definition xrt_compositor.h:505
Special functions to control multi session/clients.
Definition xrt_compositor.h:2410
Used internally from producers of events to push events into session, some sinks might multiplex even...
Definition xrt_session.h:237
Session information, mostly overlay extension data.
Definition xrt_compositor.h:949
Common swapchain interface/base.
Definition xrt_compositor.h:564
The system compositor handles composition for a system.
Definition xrt_compositor.h:2488
Union of all session events, used to return multiple events through one call.
Definition xrt_session.h:215
Header holding common defines.
Header declaring XRT graphics interfaces.
Common defines and enums for XRT.
Header for limits of the XRT interfaces.