36#define MULTI_MAX_CLIENTS 64
44#define MULTI_MAX_LAYERS XRT_MAX_LAYERS
132 bool is_base_session;
193 float current_refresh_rate_hz;
236multi_compositor_deliver_any_frames(
struct multi_compositor *mc, int64_t display_time_ns);
246multi_compositor_latch_frame_locked(
struct multi_compositor *mc, int64_t when_ns, int64_t system_frame_id);
256multi_compositor_retire_delivered_locked(
struct multi_compositor *mc, int64_t when_ns);
329 comp_multi_view_config_callback_func_t get_view_config_callback;
371 int64_t predicted_display_time_ns;
372 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:972
#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:274
@ MULTI_SYSTEM_STATE_INVALID
Invalid state, never used.
Definition comp_multi_private.h:278
@ MULTI_SYSTEM_STATE_RUNNING
The main session is running.
Definition comp_multi_private.h:302
@ 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:311
@ 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:286
@ MULTI_SYSTEM_STATE_STOPPED
One of the initial state and post stopping state.
Definition comp_multi_private.h:294
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:183
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:145
int64_t slot_next_frame_display
The next which the next frames to be picked up will be displayed.
Definition comp_multi_private.h:174
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:142
struct os_mutex slot_lock
Lock for all of the slots.
Definition comp_multi_private.h:169
struct os_thread_helper oth
The wait thread itself.
Definition comp_multi_private.h:151
int64_t frame_id
Frame id of frame being waited on.
Definition comp_multi_private.h:148
bool blocked
Is the client thread blocked?
Definition comp_multi_private.h:165
struct multi_layer_slot delivered
Fully ready to be used.
Definition comp_multi_private.h:189
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:139
bool alive
Have we gotten to the loop?
Definition comp_multi_private.h:154
bool waiting
Is the thread waiting, if so the client should block.
Definition comp_multi_private.h:157
struct multi_layer_slot progress
Currently being transferred or waited on.
Definition comp_multi_private.h:180
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:325
struct xrt_layer_chroma_key_data chroma_key
Chroma key parameters in HSV space.
Definition comp_multi_private.h:380
struct xrt_multi_compositor_control xmcc
Extra functions to handle multi client.
Definition comp_multi_private.h:332
struct multi_compositor * clients[64]
List of active clients.
Definition comp_multi_private.h:377
enum multi_system_state state
The state of the multi-client system compositor.
Definition comp_multi_private.h:357
struct os_thread_helper oth
Render loop thread.
Definition comp_multi_private.h:347
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:344
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:367
uint64_t active_count
Number of active sessions, protected by oth.
Definition comp_multi_private.h:360
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:338
struct xrt_system_compositor base
Base interface.
Definition comp_multi_private.h:327
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:500
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:788
Main compositor server interface.
Definition xrt_compositor.h:2218
Compositor semaphore used for synchronization, needs to be as capable as a Vulkan pipeline semaphore.
Definition xrt_compositor.h:845
Common compositor client interface/base.
Definition xrt_compositor.h:1046
A single HMD or input device.
Definition xrt_device.h:357
Chroma key parameters in HSV space.
Definition xrt_compositor.h:212
All the pure data values associated with a composition layer.
Definition xrt_compositor.h:441
Per frame data for the layer submission calls, used in xrt_compositor::layer_begin.
Definition xrt_compositor.h:527
Special functions to control multi session/clients.
Definition xrt_compositor.h:2394
Used internally from producers of events to push events into session, some sinks might multiplex even...
Definition xrt_session.h:224
Session information, mostly overlay extension data.
Definition xrt_compositor.h:978
Common swapchain interface/base.
Definition xrt_compositor.h:593
The system compositor handles composition for a system.
Definition xrt_compositor.h:2479
Union of all session events, used to return multiple events through one call.
Definition xrt_session.h:203
Header holding common defines.
Header declaring XRT graphics interfaces.
Common defines and enums for XRT.
xrt_view_type
View type to be rendered to by the compositor.
Definition xrt_defines.h:2438
Header for limits of the XRT interfaces.