|
Monado OpenXR Runtime
|
Multi client wrapper compositor. More...
#include "util/u_logging.h"#include "xrt/xrt_session.h"#include "os/os_time.h"#include "util/u_var.h"#include "util/u_wait.h"#include "util/u_misc.h"#include "util/u_time.h"#include "util/u_debug.h"#include "util/u_handles.h"#include "util/u_trace_marker.h"#include "util/u_distortion_mesh.h"#include "multi/comp_multi_private.h"#include <math.h>#include <stdio.h>#include <assert.h>#include <stdarg.h>#include <stdlib.h>#include <string.h>
Macros | |
| #define | LOG_FRAME_LAG(...) U_LOG_IFL(debug_get_log_option_app_frame_lag_level(), u_log_get_global_level(), __VA_ARGS__) |
Functions | |
| static void | slot_clear_locked (struct multi_compositor *mc, struct multi_layer_slot *slot) |
| Clear a slot, need to have the list_and_timing_lock held. More... | |
| static void | slot_move_into_cleared (struct multi_layer_slot *dst, struct multi_layer_slot *src) |
| Clear a slot, need to have the list_and_timing_lock held. More... | |
| static void | slot_move_and_clear_locked (struct multi_compositor *mc, struct multi_layer_slot *dst, struct multi_layer_slot *src) |
| Move a slot into a cleared slot, must be cleared before. More... | |
| xrt_result_t | multi_compositor_push_event (struct multi_compositor *mc, const union xrt_session_event *xse) |
| static bool | is_pushed_or_waiting_locked (struct multi_compositor *mc) |
| static void | wait_fence (struct multi_compositor *mc, struct xrt_compositor_fence **xcf_ptr) |
| static void | wait_semaphore (struct multi_compositor *mc, struct xrt_compositor_semaphore **xcsem_ptr, uint64_t value) |
| static void | wait_for_scheduled_free (struct multi_compositor *mc) |
| static void * | run_func (void *ptr) |
| static void | wait_for_wait_thread_locked (struct multi_compositor *mc) |
| static void | wait_for_wait_thread (struct multi_compositor *mc) |
| static void | push_fence_to_wait_thread (struct multi_compositor *mc, int64_t frame_id, struct xrt_compositor_fence *xcf) |
| static void | push_semaphore_to_wait_thread (struct multi_compositor *mc, int64_t frame_id, struct xrt_compositor_semaphore *xcsem, uint64_t value) |
| static xrt_result_t | multi_compositor_get_swapchain_create_properties (struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain_create_properties *xsccp) |
| static xrt_result_t | multi_compositor_create_swapchain (struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain **out_xsc) |
| static xrt_result_t | multi_compositor_import_swapchain (struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_image_native *native_images, uint32_t image_count, struct xrt_swapchain **out_xsc) |
| static xrt_result_t | multi_compositor_import_fence (struct xrt_compositor *xc, xrt_graphics_sync_handle_t handle, struct xrt_compositor_fence **out_xcf) |
| static xrt_result_t | multi_compositor_create_semaphore (struct xrt_compositor *xc, xrt_graphics_sync_handle_t *out_handle, struct xrt_compositor_semaphore **out_xcsem) |
| static xrt_result_t | multi_compositor_begin_session (struct xrt_compositor *xc, const struct xrt_begin_session_info *info) |
| static xrt_result_t | multi_compositor_end_session (struct xrt_compositor *xc) |
| static xrt_result_t | multi_compositor_predict_frame (struct xrt_compositor *xc, int64_t *out_frame_id, int64_t *out_wake_time_ns, int64_t *out_predicted_gpu_time_ns, int64_t *out_predicted_display_time_ns, int64_t *out_predicted_display_period_ns) |
| static xrt_result_t | multi_compositor_mark_frame (struct xrt_compositor *xc, int64_t frame_id, enum xrt_compositor_frame_point point, int64_t when_ns) |
| static xrt_result_t | multi_compositor_wait_frame (struct xrt_compositor *xc, int64_t *out_frame_id, int64_t *out_predicted_display_time_ns, int64_t *out_predicted_display_period_ns) |
| static xrt_result_t | multi_compositor_begin_frame (struct xrt_compositor *xc, int64_t frame_id) |
| static xrt_result_t | multi_compositor_discard_frame (struct xrt_compositor *xc, int64_t frame_id) |
| static xrt_result_t | multi_compositor_layer_begin (struct xrt_compositor *xc, const struct xrt_layer_frame_data *data) |
| static xrt_result_t | multi_compositor_layer_projection (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc[XRT_MAX_VIEWS], const struct xrt_layer_data *data) |
| static xrt_result_t | multi_compositor_layer_projection_depth (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc[XRT_MAX_VIEWS], struct xrt_swapchain *d_xsc[XRT_MAX_VIEWS], const struct xrt_layer_data *data) |
| static xrt_result_t | multi_compositor_layer_quad (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
| static xrt_result_t | multi_compositor_layer_cube (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
| static xrt_result_t | multi_compositor_layer_cylinder (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
| static xrt_result_t | multi_compositor_layer_equirect1 (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
| static xrt_result_t | multi_compositor_layer_equirect2 (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
| static xrt_result_t | multi_compositor_layer_commit (struct xrt_compositor *xc, xrt_graphics_sync_handle_t sync_handle) |
| static xrt_result_t | multi_compositor_layer_commit_with_semaphore (struct xrt_compositor *xc, struct xrt_compositor_semaphore *xcsem, uint64_t value) |
| static xrt_result_t | multi_compositor_set_thread_hint (struct xrt_compositor *xc, enum xrt_thread_hint hint, uint32_t thread_id) |
| static xrt_result_t | multi_compositor_get_display_refresh_rate (struct xrt_compositor *xc, float *out_display_refresh_rate_hz) |
| static xrt_result_t | multi_compositor_request_display_refresh_rate (struct xrt_compositor *xc, float display_refresh_rate_hz) |
| static void | multi_compositor_destroy (struct xrt_compositor *xc) |
| static void | log_frame_time_diff (int64_t frame_time_ns, int64_t display_time_ns) |
| void | multi_compositor_deliver_any_frames (struct multi_compositor *mc, int64_t display_time_ns) |
| void | multi_compositor_latch_frame_locked (struct multi_compositor *mc, int64_t when_ns, int64_t system_frame_id) |
| void | multi_compositor_retire_delivered_locked (struct multi_compositor *mc, int64_t when_ns) |
| 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. More... | |
Multi client wrapper compositor.
| 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.
|
static |
If import_fence succeeded, we have transferred ownership to the compositor; no need to do anything more. If the call failed we need to close the handle.
|
static |
Clear a slot, need to have the list_and_timing_lock held.
References ARRAY_SIZE, os_monotonic_get_ns(), u_pacing_app::u_pa_retired(), U_ZERO, xrt_swapchain::xrt_swapchain_reference(), and multi_layer_entry::xscs.
Referenced by slot_move_and_clear_locked().
|
static |
Move a slot into a cleared slot, must be cleared before.
References slot_clear_locked(), and slot_move_into_cleared().
|
static |
Clear a slot, need to have the list_and_timing_lock held.
References U_ZERO.
Referenced by slot_move_and_clear_locked().