Monado OpenXR Runtime
|
Common compositor client interface/base. More...
#include <xrt/xrt_compositor.h>
Static Public Member Functions | |
static xrt_result_t | xrt_comp_get_swapchain_create_properties (struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain_create_properties *xsccp) |
For a given xrt_swapchain_create_info struct returns a filled out xrt_swapchain_create_properties. More... | |
static xrt_result_t | xrt_comp_create_passthrough (struct xrt_compositor *xc, const struct xrt_passthrough_create_info *info) |
Create a passthrough. More... | |
static xrt_result_t | xrt_comp_create_passthrough_layer (struct xrt_compositor *xc, const struct xrt_passthrough_layer_create_info *info) |
Create a passthrough layer. More... | |
static xrt_result_t | xrt_comp_destroy_passthrough (struct xrt_compositor *xc) |
Destroy a passthrough. More... | |
static xrt_result_t | xrt_comp_get_display_refresh_rate (struct xrt_compositor *xc, float *out_display_refresh_rate_hz) |
Get the current display refresh rate. More... | |
static xrt_result_t | xrt_comp_request_display_refresh_rate (struct xrt_compositor *xc, float display_refresh_rate_hz) |
Request system to change the display refresh rate to the requested value. More... | |
static xrt_result_t | xrt_comp_set_performance_level (struct xrt_compositor *xc, enum xrt_perf_domain domain, enum xrt_perf_set_level level) |
Set CPU/GPU performance level. More... | |
static xrt_result_t | xrt_comp_get_reference_bounds_rect (struct xrt_compositor *xc, enum xrt_reference_space_type reference_space_type, struct xrt_vec2 *bounds) |
Get the extents of the reference space's bounds rectangle. More... | |
static void | xrt_comp_destroy (struct xrt_compositor **xc_ptr) |
Teardown the compositor. More... | |
Swapchain and sync creation and import methods | |
static xrt_result_t | xrt_comp_create_swapchain (struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain **out_xsc) |
Create a swapchain with a set of images. More... | |
static xrt_result_t | xrt_comp_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) |
Create a swapchain from a set of native images. More... | |
static xrt_result_t | xrt_comp_import_fence (struct xrt_compositor *xc, xrt_graphics_sync_handle_t handle, struct xrt_compositor_fence **out_xcf) |
Create a compositor fence from a native sync handle. More... | |
static xrt_result_t | xrt_comp_create_semaphore (struct xrt_compositor *xc, xrt_graphics_sync_handle_t *out_handle, struct xrt_compositor_semaphore **out_xcsem) |
Create a compositor semaphore, also returns a native handle. More... | |
Session methods | |
static xrt_result_t | xrt_comp_begin_session (struct xrt_compositor *xc, const struct xrt_begin_session_info *info) |
See xrBeginSession. More... | |
static xrt_result_t | xrt_comp_end_session (struct xrt_compositor *xc) |
See xrEndSession, unlike the OpenXR one the state tracker is responsible to call discard frame before calling this function. More... | |
Frame-related methods | |
Related to the OpenXR | |
static xrt_result_t | xrt_comp_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) |
This function and mark_frame function calls are a alternative to wait_frame. More... | |
static xrt_result_t | xrt_comp_mark_frame (struct xrt_compositor *xc, int64_t frame_id, enum xrt_compositor_frame_point point, int64_t when_ns) |
This function and predict_frame function calls are a alternative to wait_frame. More... | |
static xrt_result_t | xrt_comp_wait_frame (struct xrt_compositor *xc, int64_t *out_frame_id, int64_t *out_predicted_display_time, int64_t *out_predicted_display_period) |
See xrWaitFrame. More... | |
static xrt_result_t | xrt_comp_begin_frame (struct xrt_compositor *xc, int64_t frame_id) |
See xrBeginFrame. More... | |
static xrt_result_t | xrt_comp_discard_frame (struct xrt_compositor *xc, int64_t frame_id) |
Explicitly discard a frame. More... | |
Layer submission methods | |
Equivalent to | |
static xrt_result_t | xrt_comp_layer_begin (struct xrt_compositor *xc, const struct xrt_layer_frame_data *data) |
Begins layer submission. More... | |
static xrt_result_t | xrt_comp_layer_projection (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc[XRT_MAX_VIEWS], const struct xrt_layer_data *data) |
Adds a projection layer for submissions. More... | |
static xrt_result_t | xrt_comp_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) |
Adds a projection layer for submission, has depth information. More... | |
static xrt_result_t | xrt_comp_layer_quad (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a quad layer for submission, the center of the quad is specified by the pose and extends outwards from it. More... | |
static xrt_result_t | xrt_comp_layer_cube (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a cube layer for submission. More... | |
static xrt_result_t | xrt_comp_layer_cylinder (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a cylinder layer for submission. More... | |
static xrt_result_t | xrt_comp_layer_equirect1 (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a equirect1 layer for submission. More... | |
static xrt_result_t | xrt_comp_layer_equirect2 (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a equirect2 layer for submission. More... | |
static xrt_result_t | xrt_comp_layer_passthrough (struct xrt_compositor *xc, struct xrt_device *xdev, const struct xrt_layer_data *data) |
Adds a passthrough layer for submission. More... | |
static xrt_result_t | xrt_comp_layer_commit (struct xrt_compositor *xc, xrt_graphics_sync_handle_t sync_handle) |
Commits all of the submitted layers. More... | |
static xrt_result_t | xrt_comp_layer_commit_with_semaphore (struct xrt_compositor *xc, struct xrt_compositor_semaphore *xcsem, uint64_t value) |
Commits all of the submitted layers, with a semaphore. More... | |
Data Fields | |
struct xrt_compositor_info | info |
Capabilities and recommended values information. More... | |
xrt_result_t(* | get_swapchain_create_properties )(struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain_create_properties *xsccp) |
For a given xrt_swapchain_create_info struct returns a filled out xrt_swapchain_create_properties. More... | |
xrt_result_t(* | create_passthrough )(struct xrt_compositor *xc, const struct xrt_passthrough_create_info *info) |
Create a passthrough. More... | |
xrt_result_t(* | create_passthrough_layer )(struct xrt_compositor *xc, const struct xrt_passthrough_layer_create_info *info) |
Create a passthrough layer. More... | |
xrt_result_t(* | destroy_passthrough )(struct xrt_compositor *xc) |
Destroy a passthrough. More... | |
xrt_result_t(* | set_performance_level )(struct xrt_compositor *xc, enum xrt_perf_domain domain, enum xrt_perf_set_level level) |
Set CPU/GPU performance level. More... | |
xrt_result_t(* | get_reference_bounds_rect )(struct xrt_compositor *xc, enum xrt_reference_space_type reference_space_type, struct xrt_vec2 *bounds) |
Get the extents of the reference space's bounds rectangle. More... | |
void(* | destroy )(struct xrt_compositor *xc) |
Teardown the compositor. More... | |
Function pointers for swapchain and sync creation and import | |
xrt_result_t(* | create_swapchain )(struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain **out_xsc) |
Create a swapchain with a set of images. More... | |
xrt_result_t(* | 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) |
Create a swapchain from a set of native images. More... | |
xrt_result_t(* | import_fence )(struct xrt_compositor *xc, xrt_graphics_sync_handle_t handle, struct xrt_compositor_fence **out_xcf) |
Create a compositor fence from a native sync handle. More... | |
xrt_result_t(* | create_semaphore )(struct xrt_compositor *xc, xrt_graphics_sync_handle_t *out_handle, struct xrt_compositor_semaphore **out_xcsem) |
Create a compositor semaphore, also returns a native handle. More... | |
Function pointers for session functions | |
xrt_result_t(* | begin_session )(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) |
See xrBeginSession. More... | |
xrt_result_t(* | end_session )(struct xrt_compositor *xc) |
See xrEndSession, unlike the OpenXR one the state tracker is responsible to call discard frame before calling this function. More... | |
Function pointers for frame functions | |
xrt_result_t(* | 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) |
This function and mark_frame function calls are a alternative to wait_frame. More... | |
xrt_result_t(* | mark_frame )(struct xrt_compositor *xc, int64_t frame_id, enum xrt_compositor_frame_point point, int64_t when_ns) |
This function and predict_frame function calls are a alternative to wait_frame. More... | |
xrt_result_t(* | wait_frame )(struct xrt_compositor *xc, int64_t *out_frame_id, int64_t *out_predicted_display_time, int64_t *out_predicted_display_period) |
See xrWaitFrame. More... | |
xrt_result_t(* | begin_frame )(struct xrt_compositor *xc, int64_t frame_id) |
See xrBeginFrame. More... | |
xrt_result_t(* | discard_frame )(struct xrt_compositor *xc, int64_t frame_id) |
Explicitly discard a frame. More... | |
Function pointers for layer submission | |
xrt_result_t(* | layer_begin )(struct xrt_compositor *xc, const struct xrt_layer_frame_data *data) |
Begins layer submission. More... | |
xrt_result_t(* | layer_projection )(struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc[XRT_MAX_VIEWS], const struct xrt_layer_data *data) |
Adds a projection layer for submissions. More... | |
xrt_result_t(* | 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) |
Adds a projection layer for submission, has depth information. More... | |
xrt_result_t(* | layer_quad )(struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a quad layer for submission, the center of the quad is specified by the pose and extends outwards from it. More... | |
xrt_result_t(* | layer_cube )(struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a cube layer for submission. More... | |
xrt_result_t(* | layer_cylinder )(struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a cylinder layer for submission. More... | |
xrt_result_t(* | layer_equirect1 )(struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a equirect1 layer for submission. More... | |
xrt_result_t(* | layer_equirect2 )(struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a equirect2 layer for submission. More... | |
xrt_result_t(* | layer_passthrough )(struct xrt_compositor *xc, struct xrt_device *xdev, const struct xrt_layer_data *data) |
Adds a passthrough layer for submission. More... | |
xrt_result_t(* | layer_commit )(struct xrt_compositor *xc, xrt_graphics_sync_handle_t sync_handle) |
Commits all of the submitted layers. More... | |
xrt_result_t(* | layer_commit_with_semaphore )(struct xrt_compositor *xc, struct xrt_compositor_semaphore *xcsem, uint64_t value) |
Commits all of the submitted layers, with a semaphore. More... | |
Function pointers for XR_FB_display_refresh_rate. | |
xrt_result_t(* | get_display_refresh_rate )(struct xrt_compositor *xc, float *out_display_refresh_rate_hz) |
Get the current display refresh rate. More... | |
xrt_result_t(* | request_display_refresh_rate )(struct xrt_compositor *xc, float display_refresh_rate_hz) |
Request system to change the display refresh rate to the requested value. More... | |
Function pointers for extensions | |
xrt_result_t(* | set_thread_hint )(struct xrt_compositor *xc, enum xrt_thread_hint hint, uint32_t thread_id) |
Set thread attributes according to thread type. More... | |
Common compositor client interface/base.
A compositor is very much analogous to an XrSession
but without any of the input functionality, and does have the same lifetime as an XrSession
.
xrt_result_t(* xrt_compositor::begin_frame) (struct xrt_compositor *xc, int64_t frame_id) |
See xrBeginFrame.
Must have made a call to either predict_frame or wait_frame before calling this function. After this function is called you must call layer_commit.
[in] | xc | The compositor |
[in] | frame_id | Frame id |
Referenced by xrt_comp_begin_frame().
xrt_result_t(* xrt_compositor::begin_session) (struct xrt_compositor *xc, const struct xrt_begin_session_info *info) |
See xrBeginSession.
Referenced by null_compositor_create_system(), and xrt_comp_begin_session().
xrt_result_t(* xrt_compositor::create_passthrough) (struct xrt_compositor *xc, const struct xrt_passthrough_create_info *info) |
Create a passthrough.
Referenced by xrt_comp_create_passthrough().
xrt_result_t(* xrt_compositor::create_passthrough_layer) (struct xrt_compositor *xc, const struct xrt_passthrough_layer_create_info *info) |
Create a passthrough layer.
Referenced by xrt_comp_create_passthrough_layer().
xrt_result_t(* xrt_compositor::create_semaphore) (struct xrt_compositor *xc, xrt_graphics_sync_handle_t *out_handle, struct xrt_compositor_semaphore **out_xcsem) |
Create a compositor semaphore, also returns a native handle.
Referenced by comp_base::comp_base_init(), and xrt_comp_create_semaphore().
xrt_result_t(* xrt_compositor::create_swapchain) (struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain **out_xsc) |
Create a swapchain with a set of images.
The pointer pointed to by out_xsc
has to either be NULL or a valid xrt_swapchain pointer. If there is a valid xrt_swapchain pointed by the pointed pointer it will have it reference decremented.
Referenced by comp_base::comp_base_init(), and xrt_comp_create_swapchain().
void(* xrt_compositor::destroy) (struct xrt_compositor *xc) |
Teardown the compositor.
The state tracker must have made sure that no frames or sessions are currently pending.
Referenced by xrt_comp_destroy(), and xrt_compositor_native::xrt_comp_native_destroy().
xrt_result_t(* xrt_compositor::destroy_passthrough) (struct xrt_compositor *xc) |
Destroy a passthrough.
Referenced by xrt_comp_destroy_passthrough().
xrt_result_t(* xrt_compositor::discard_frame) (struct xrt_compositor *xc, int64_t frame_id) |
Explicitly discard a frame.
This isn't in the OpenXR API but is explicit in the XRT interfaces.
Two calls to xrBeginFrame without intervening xrEndFrame will cause the state tracker to call:
Referenced by xrt_comp_discard_frame().
xrt_result_t(* xrt_compositor::end_session) (struct xrt_compositor *xc) |
See xrEndSession, unlike the OpenXR one the state tracker is responsible to call discard frame before calling this function.
See discard_frame.
Referenced by xrt_comp_end_session().
xrt_result_t(* xrt_compositor::get_display_refresh_rate) (struct xrt_compositor *xc, float *out_display_refresh_rate_hz) |
Get the current display refresh rate.
xc | Self pointer |
out_display_refresh_rate_hz | Current display refresh rate in Hertz. |
Referenced by xrt_comp_get_display_refresh_rate().
xrt_result_t(* xrt_compositor::get_reference_bounds_rect) (struct xrt_compositor *xc, enum xrt_reference_space_type reference_space_type, struct xrt_vec2 *bounds) |
Get the extents of the reference space's bounds rectangle.
Referenced by xrt_comp_get_reference_bounds_rect().
xrt_result_t(* xrt_compositor::get_swapchain_create_properties) (struct xrt_compositor *xc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain_create_properties *xsccp) |
For a given xrt_swapchain_create_info struct returns a filled out xrt_swapchain_create_properties.
Referenced by client_gl_compositor::client_gl_compositor_init(), comp_base::comp_base_init(), mock_create_native_compositor(), and xrt_comp_get_swapchain_create_properties().
xrt_result_t(* xrt_compositor::import_fence) (struct xrt_compositor *xc, xrt_graphics_sync_handle_t handle, struct xrt_compositor_fence **out_xcf) |
Create a compositor fence from a native sync handle.
Referenced by comp_base::comp_base_init(), and xrt_comp_import_fence().
xrt_result_t(* xrt_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) |
Create a swapchain from a set of native images.
The pointer pointed to by out_xsc
has to either be NULL or a valid xrt_swapchain pointer. If there is a valid xrt_swapchain pointed by the pointed pointer it will have it reference decremented.
Referenced by comp_base::comp_base_init(), and xrt_comp_import_swapchain().
struct xrt_compositor_info xrt_compositor::info |
Capabilities and recommended values information.
Referenced by base_import_swapchain(), client_d3d11_create_swapchain(), client_d3d12_create_swapchain(), client_gl_memobj_swapchain_create(), xrt_comp_begin_session(), xrt_comp_create_passthrough(), xrt_comp_create_passthrough_layer(), xrt_comp_create_swapchain(), xrt_comp_get_swapchain_create_properties(), and xrt_comp_import_swapchain().
xrt_result_t(* xrt_compositor::layer_begin) (struct xrt_compositor *xc, const struct xrt_layer_frame_data *data) |
Begins layer submission.
This and the other layer_*
calls are equivalent to xrEndFrame, except split over multiple calls. It's only after xrt_compositor::layer_commit that layers will be displayed. From the point of view of the swapchain, the image is used as soon as it's given in a call.
Referenced by comp_base::comp_base_init().
xrt_result_t(* xrt_compositor::layer_commit) (struct xrt_compositor *xc, xrt_graphics_sync_handle_t sync_handle) |
Commits all of the submitted layers.
Only after this call will the compositor actually use the layers.
Referenced by xrt_comp_layer_commit().
xrt_result_t(* xrt_compositor::layer_commit_with_semaphore) (struct xrt_compositor *xc, struct xrt_compositor_semaphore *xcsem, uint64_t value) |
Commits all of the submitted layers, with a semaphore.
Only after this call will the compositor actually use the layers.
xc | Self pointer |
xcsem | Semaphore that will be signalled when the app GPU work has completed. |
value | Semaphore value upone completion of GPU work. |
Referenced by xrt_comp_layer_commit_with_semaphore().
xrt_result_t(* xrt_compositor::layer_cube) (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a cube layer for submission.
xc | Self pointer |
xdev | The device the layer is relative to. |
xsc | Swapchain. |
data | All of the pure data bits (not pointers/handles), including what part of the supplied swapchain object to use. |
xrt_result_t(* xrt_compositor::layer_cylinder) (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a cylinder layer for submission.
xc | Self pointer |
xdev | The device the layer is relative to. |
xsc | Swapchain. |
data | All of the pure data bits (not pointers/handles), including what part of the supplied swapchain object to use. |
xrt_result_t(* xrt_compositor::layer_equirect1) (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a equirect1 layer for submission.
xc | Self pointer |
xdev | The device the layer is relative to. |
xsc | Swapchain. |
data | All of the pure data bits (not pointers/handles), including what part of the supplied swapchain object to use. |
xrt_result_t(* xrt_compositor::layer_equirect2) (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a equirect2 layer for submission.
xc | Self pointer |
xdev | The device the layer is relative to. |
xsc | Swapchain. |
data | All of the pure data bits (not pointers/handles), including what part of the supplied swapchain object to use. |
xrt_result_t(* xrt_compositor::layer_passthrough) (struct xrt_compositor *xc, struct xrt_device *xdev, const struct xrt_layer_data *data) |
Adds a passthrough layer for submission.
xc | Self pointer |
xdev | The device the layer is relative to. |
data | All of the pure data bits (not pointers/handles), including what part of the supplied swapchain object to use. |
xrt_result_t(* xrt_compositor::layer_projection) (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc[XRT_MAX_VIEWS], const struct xrt_layer_data *data) |
Adds a projection layer for submissions.
Note that e.g. the same swapchain object may be passed as both l_xsc
and r_xsc
- the parameters in data
identify the subrect and array texture index to use for each of the views.
xc | Self pointer |
xdev | The device the layer is relative to. |
xsc | Array of swapchain objects containing eye RGB data. |
data | All of the pure data bits (not pointers/handles), including what parts of the supplied swapchain objects to use for each view. |
xrt_result_t(* xrt_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) |
Adds a projection layer for submission, has depth information.
Note that e.g. the same swapchain object may be passed as both l_xsc
and r_xsc
- the parameters in data
identify the subrect and array texture index to use for each of the views. This flexibility is required by the OpenXR API and is passed through to the compositor to preserve the maximum information
xc | Self pointer |
xdev | The device the layer is relative to. |
xsc | Array of swapchain objects containing eye RGB data. |
d_xsc | Array of swapchain objects containing eye depth data. |
data | All of the pure data bits (not pointers/handles), including what parts of the supplied swapchain objects to use for each view. |
xrt_result_t(* xrt_compositor::layer_quad) (struct xrt_compositor *xc, struct xrt_device *xdev, struct xrt_swapchain *xsc, const struct xrt_layer_data *data) |
Adds a quad layer for submission, the center of the quad is specified by the pose and extends outwards from it.
xc | Self pointer |
xdev | The device the layer is relative to. |
xsc | Swapchain. |
data | All of the pure data bits (not pointers/handles), including what part of the supplied swapchain object to use. |
xrt_result_t(* xrt_compositor::mark_frame) (struct xrt_compositor *xc, int64_t frame_id, enum xrt_compositor_frame_point point, int64_t when_ns) |
This function and predict_frame function calls are a alternative to wait_frame.
If point is XRT_COMPOSITOR_FRAME_POINT_WOKE it is to mark that the client woke up from waiting on a frame.
[in] | xc | The compositor |
[in] | frame_id | Frame id |
[in] | point | What type of frame point to mark. |
[in] | when_ns | When this point happened. |
Referenced by xrt_comp_mark_frame().
xrt_result_t(* xrt_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) |
This function and mark_frame function calls are a alternative to wait_frame.
The only requirement on the compositor for the frame_id
is that it is a positive number and larger then the last returned frame_id.
After a call to predict_frame, the state tracker is not allowed to call this function until after a call to mark_frame (with point XRT_COMPOSITOR_FRAME_POINT_WOKE), followed by either begin_frame or discard_frame.
[in] | xc | The compositor |
[out] | out_frame_id | Frame id |
[out] | out_wake_time_ns | When we want the client to be awoken to begin rendering. |
[out] | out_predicted_gpu_time_ns | When we expect the client to finish the GPU work. If not computed/available, set to 0. |
[out] | out_predicted_display_time_ns | When the pixels turns into photons. |
[out] | out_predicted_display_period_ns | The period for the frames. |
Referenced by xrt_comp_predict_frame().
xrt_result_t(* xrt_compositor::request_display_refresh_rate) (struct xrt_compositor *xc, float display_refresh_rate_hz) |
Request system to change the display refresh rate to the requested value.
xc | Self pointer |
display_refresh_rate_hz | Requested display refresh rate in Hertz. |
Referenced by xrt_comp_request_display_refresh_rate().
xrt_result_t(* xrt_compositor::set_performance_level) (struct xrt_compositor *xc, enum xrt_perf_domain domain, enum xrt_perf_set_level level) |
Set CPU/GPU performance level.
Referenced by xrt_comp_set_performance_level().
xrt_result_t(* xrt_compositor::set_thread_hint) (struct xrt_compositor *xc, enum xrt_thread_hint hint, uint32_t thread_id) |
Set thread attributes according to thread type.
Referenced by xrt_comp_set_thread_hint().
xrt_result_t(* xrt_compositor::wait_frame) (struct xrt_compositor *xc, int64_t *out_frame_id, int64_t *out_predicted_display_time, int64_t *out_predicted_display_period) |
See xrWaitFrame.
This function has the same semantics as calling predict_frame, sleeping, and then calling mark_frame with a point of XRT_COMPOSITOR_FRAME_POINT_WOKE.
The only requirement on the compositor for the frame_id
is that it is a positive number and larger then the last returned frame_id
.
After a call to wait_frame, the state tracker is not allowed to call this function until after a call to either begin_frame or discard_frame.
If the caller can do its own blocking, use the pair of functions xrt_compositor::predict_frame and xrt_compositor::mark_frame instead of this single blocking function.
Referenced by xrt_comp_wait_frame().