14#include "xrt/xrt_config_build.h"
23#include "openvr_interfaces_unified.h"
32namespace xrt::state_trackers::openvr {
55 if (this->
xsc !=
nullptr) {
56 xrt_swapchain_release_image(this->
xsc, this->swapchain_index);
59 xrt_swapchain_reference(&this->
xsc,
nullptr);
87 uint32_t sample_count{0};
99 std::array<xrt_fov, 2> fovs;
100 std::array<xrt_pose, 2> T_head_eyes;
109 std::optional<FrameState> active_frame{std::nullopt};
111 std::array<std::optional<EyeState>, 2> frame_eye_states{std::nullopt, std::nullopt};
113 std::array<SwapchainCache, 2> swapchain_caches{};
126#ifdef XRT_HAVE_VULKAN
130 std::optional<RenderStateCache> render_state_cache{std::nullopt};
132 std::shared_ptr<Events> events{};
135 std::optional<timepoint_ns> last_predicted_display_time{std::nullopt};
136 std::optional<time_duration_ns> last_predicted_display_period{std::nullopt};
138 std::array<vr::TrackedDevicePose_t, vr::k_unMaxTrackedDeviceCount> last_render_poses{};
139 std::array<vr::TrackedDevicePose_t, vr::k_unMaxTrackedDeviceCount> last_game_poses{};
141 vr::ETrackingUniverseOrigin current_tracking_universe{vr::ETrackingUniverseOrigin::TrackingUniverseSeated};
144#ifdef XRT_HAVE_VULKAN
147 SetupVulkanCompositor(
openvr_logger &logger, vr::VRVulkanTextureData_t &vulkan_data);
153 vr::VRVulkanTextureData_t &texture_data,
154 vr::EColorSpace color_space,
158 vr::EVRCompositorError
161 vr::VRVulkanTextureData_t &texture_data,
162 vr::EColorSpace color_space,
163 const vr::VRTextureBounds_t &bounds);
166 GetVulkanOutputDevice(
openvr_logger &logger, uint64_t *out_device, VkInstance pInstance);
171 GetProjectionLayerDataForEye(vr::EVREye eye,
const EyeState &eye_state);
174 vr::EVRCompositorError
181 std::shared_ptr<Events> &events);
189 vr::EVRCompositorError
193 vr::EVRCompositorError
197 const vr::VRTextureBounds_t &bounds,
198 vr::EVRSubmitFlags nSubmitFlags);
202 uint64_t *out_device,
203 vr::ETextureType texture_type,
204 VkInstance pInstance);
207 GetTimeForPredictions();
213 GetFrameRenderState(std::array<xrt_fov, 2> &fovs,
214 std::array<xrt_pose, 2> &T_head_eyes,
int64_t timepoint_ns
Integer timestamp type.
Definition u_time.h:77
int64_t time_duration_ns
Integer duration type in nanoseconds.
Definition u_time.h:88
enum xrt_result xrt_result_t
Result type used across Monado.
Implementation of OpenVR event handling and related functionality.
Helper struct to make code easier to read.
Definition render_distortion.c:183
Definition openvr_compositor.hpp:106
vr::EVRCompositorError Submit(openvr_logger &logger, vr::EVREye eye, const vr::Texture_t &texture, const vr::VRTextureBounds_t &bounds, vr::EVRSubmitFlags nSubmitFlags)
Submits a texture for an eye, completing the frame if both eyes have been submit.
Definition openvr_compositor.cpp:173
vr::EVRCompositorError WaitBeginFrame(openvr_logger &logger)
Waits for the next frame and begins it, cancelling/releasing any previously active frame and it's res...
Definition openvr_compositor.cpp:107
Definition openvr_compositor.hpp:64
Definition openvr_compositor.hpp:35
xrt_swapchain * xsc
The swapchain in use.
Definition openvr_compositor.hpp:37
xrt_rect bounds
The bounds of the submitted texture.
Definition openvr_compositor.hpp:51
uint32_t swapchain_index
The index into the eye's swapchain for the currently held texture.
Definition openvr_compositor.hpp:39
uint32_t width
The width of the currently held texture.
Definition openvr_compositor.hpp:44
uint32_t height
The height of the currently held texture.
Definition openvr_compositor.hpp:46
uint32_t format
The format of the currently held texture.
Definition openvr_compositor.hpp:42
uint32_t sample_count
The sample count of the currently held texture.
Definition openvr_compositor.hpp:48
Definition openvr_compositor.hpp:69
Definition openvr_compositor.hpp:98
Since eye textures are created by the clients, and not the runtime, we have to do a copy into a runti...
Definition openvr_compositor.hpp:80
xrt_result_t EnsureSwapchain(xrt_compositor *xc, uint32_t format, uint32_t width, uint32_t height, uint32_t sample_count)
Ensures that there is a swapchain in the cache with the given properties, creating one if necessary.
Definition openvr_compositor.cpp:31
Definition openvr_logger.hpp:30
Main compositor server interface.
Definition xrt_compositor.h:2268
Base class for a Vulkan client compositor.
Definition xrt_compositor.h:2063
Common compositor client interface/base.
Definition xrt_compositor.h:1024
All of the pure data values associated with a single view in a projection layer.
Definition xrt_compositor.h:239
A pose composed of a position and orientation.
Definition xrt_defines.h:492
Image rectangle.
Definition xrt_defines.h:457
Common swapchain interface/base.
Definition xrt_compositor.h:571
The system compositor handles composition for a system.
Definition xrt_compositor.h:2496
A collection of xrt_device, and an interface for identifying the roles they have been assigned.
Definition xrt_system.h:215
Time-keeping: a clock that is steady, convertible to system time, and ideally high-resolution.
Header declaring XRT graphics interfaces.
Header defining an xrt display or controller device.
Header defining an XRT graphics provider.
Header for system objects.