Monado OpenXR Runtime
|
Mock implementation of a native compositor. More...
#include <mock/mock_compositor.h>
Data Fields | |
struct xrt_compositor_native | base |
uint32_t | next_id |
ID for next swapchain. More... | |
void * | userdata |
Mock users can populate this pointer to use data from hooks. More... | |
struct { | |
xrt_result_t(* get_swapchain_create_properties )(struct mock_compositor *mc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain_create_properties *xsccp) | |
Optional function pointer for mock compositor, called during xrt_comp_get_swapchain_create_properties. More... | |
xrt_result_t(* create_swapchain )(struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain **out_xsc) | |
Optional function pointer for mock compositor, called during xrt_comp_create_swapchain. More... | |
xrt_result_t(* import_swapchain )(struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, const struct xrt_swapchain_create_info *info, struct xrt_image_native *native_images, uint32_t image_count, struct xrt_swapchain **out_xsc) | |
Optional function pointer for mock compositor, called during xrt_comp_import_swapchain. More... | |
void(* destroy )(struct mock_compositor *mc) | |
Optional function pointer for mock compositor, called during xrt_comp_destroy (before actual destruction) More... | |
} | compositor_hooks |
Optional function pointers you can populate to hook into the behavior of the mock compositor implementation. More... | |
struct { | |
void(* destroy )(struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc) | |
Optional function pointer, called during xrt_swapchain::destroy (before actual destruction) More... | |
xrt_result_t(* acquire_image )(struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, uint32_t *out_index) | |
Optional function pointer, called during xrt_swapchain::acquire_image. More... | |
xrt_result_t(* wait_image )(struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, uint64_t timeout_ns, uint32_t index) | |
Optional function pointer, called during xrt_swapchain::wait_image. More... | |
xrt_result_t(* release_image )(struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, uint32_t index) | |
Optional function pointer, called during xrt_swapchain::release_image. More... | |
} | swapchain_hooks |
Optional function pointers you can populate to hook into the behavior of the mock swapchain implementation. More... | |
Data Fields inherited from xrt_compositor_native | |
struct xrt_compositor | base |
Base. More... | |
Data Fields inherited from xrt_compositor | |
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... | |
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... | |
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... | |
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... | |
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... | |
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... | |
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... | |
Additional Inherited Members | |
Public Member Functions inherited from xrt_compositor_native | |
struct xrt_compositor_d3d11 * | xrt_gfx_d3d11_provider_create (struct xrt_compositor_native *xcn, ID3D11Device *device) |
Create a D3D11 compositor client. More... | |
struct xrt_compositor_d3d12 * | xrt_gfx_d3d12_provider_create (struct xrt_compositor_native *xcn, ID3D12Device *device, ID3D12CommandQueue *queue) |
Create a D3D12 compositor client. More... | |
xrt_result_t | xrt_gfx_provider_create_gl_egl (struct xrt_compositor_native *xcn, EGLDisplay display, EGLConfig config, EGLContext context, PFNEGLGETPROCADDRESSPROC get_gl_procaddr, bool renderdoc_enabled, struct xrt_compositor_gl **out_xcgl) |
Create an OpenGL(ES) compositor client using EGL. More... | |
struct xrt_compositor_vk * | xrt_gfx_vk_provider_create (struct xrt_compositor_native *xcn, VkInstance instance, PFN_vkGetInstanceProcAddr get_instance_proc_addr, VkPhysicalDevice physical_device, VkDevice device, bool external_fence_fd_enabled, bool external_semaphore_fd_enabled, bool timeline_semaphore_enabled, bool image_format_list_enabled, bool debug_utils_enabled, bool renderdoc_enabled, uint32_t queue_family_index, uint32_t queue_index) |
Create a Vulkan compositor client. More... | |
struct xrt_compositor_gl * | xrt_gfx_provider_create_gl_win32 (struct xrt_compositor_native *xcn, void *hDC, void *hGLRC) |
Create an OpenGL compositor client using Win32. More... | |
struct xrt_compositor_gl * | xrt_gfx_provider_create_gl_xlib (struct xrt_compositor_native *xcn, Display *xDisplay, uint32_t visualid, GLXFBConfig glxFBConfig, GLXDrawable glxDrawable, GLXContext glxContext) |
Create an OpenGL compositor client using xlib. More... | |
Static Public Member Functions inherited from xrt_compositor_native | |
static xrt_result_t | xrt_comp_native_create_swapchain (struct xrt_compositor_native *xcn, const struct xrt_swapchain_create_info *info, struct xrt_swapchain_native **out_xscn) |
Create a native swapchain with a set of images. More... | |
static void | xrt_comp_native_destroy (struct xrt_compositor_native **xcn_ptr) |
Teardown the compositor. More... | |
Static Public Member Functions inherited from xrt_compositor | |
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... | |
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... | |
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... | |
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... | |
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... | |
Mock implementation of a native compositor.
xrt_result_t(* mock_compositor::acquire_image) (struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, uint32_t *out_index) |
Optional function pointer, called during xrt_swapchain::acquire_image.
struct { ... } mock_compositor::compositor_hooks |
Optional function pointers you can populate to hook into the behavior of the mock compositor implementation.
Providing a function pointer will disable any built-in functionality in the mock for most of these fields. While you can populate these with a lambda, because they're plain function pointers, you can't have any captures, so use mock_compositor::userdata to read or write any data from the outside world.
xrt_result_t(* mock_compositor::create_swapchain) (struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain **out_xsc) |
Optional function pointer for mock compositor, called during xrt_comp_create_swapchain.
Takes the extra parameter of the typed pointer to the in-progress swapchain mcsc
, which is allocated and has basic values populated for it, even if this function pointer is set.
void(* mock_compositor::destroy) (struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc) |
Optional function pointer for mock compositor, called during xrt_comp_destroy (before actual destruction)
Optional function pointer, called during xrt_swapchain::destroy (before actual destruction)
The actual destruction is done by the mock implementation whether or not you populate this field.
xrt_result_t(* mock_compositor::get_swapchain_create_properties) (struct mock_compositor *mc, const struct xrt_swapchain_create_info *info, struct xrt_swapchain_create_properties *xsccp) |
Optional function pointer for mock compositor, called during xrt_comp_get_swapchain_create_properties.
xrt_result_t(* mock_compositor::import_swapchain) (struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, const struct xrt_swapchain_create_info *info, struct xrt_image_native *native_images, uint32_t image_count, struct xrt_swapchain **out_xsc) |
Optional function pointer for mock compositor, called during xrt_comp_import_swapchain.
Takes the extra parameter of the typed pointer to the in-progress swapchain mcsc
, which is allocated and has basic values populated for it, even if this function pointer is set. Does not release the native images passed in if this function pointer is set, so you will have to do that yourself.
uint32_t mock_compositor::next_id |
ID for next swapchain.
xrt_result_t(* mock_compositor::release_image) (struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, uint32_t index) |
Optional function pointer, called during xrt_swapchain::release_image.
struct { ... } mock_compositor::swapchain_hooks |
Optional function pointers you can populate to hook into the behavior of the mock swapchain implementation.
Providing a function pointer will disable any built-in functionality in the mock for most of these fields. While you can populate these with a lambda, because they're plain function pointers, you can't have any captures, so use mock_compositor::userdata to read or write any data from the outside world.
void* mock_compositor::userdata |
Mock users can populate this pointer to use data from hooks.
xrt_result_t(* mock_compositor::wait_image) (struct mock_compositor *mc, struct mock_compositor_swapchain *mcsc, uint64_t timeout_ns, uint32_t index) |
Optional function pointer, called during xrt_swapchain::wait_image.