15#include "xrt/xrt_config_build.h"
32#include "openvr_interfaces_unified.h"
41namespace xrt::state_trackers::openvr {
60 if (this->
xsc !=
nullptr) {
61 xrt_swapchain_release_image(this->
xsc, this->swapchain_index);
64 xrt_swapchain_reference(&this->
xsc,
nullptr);
91 uint32_t storage_format{0};
92 uint32_t sample_format{0};
98 uint32_t storage_format,
99 uint32_t sample_format,
114 std::array<xrt_fov, 2> fovs;
115 std::array<xrt_pose, 2> T_head_eyes;
124 std::optional<FrameState> active_frame{std::nullopt};
126 std::array<std::optional<EyeState>, 2> frame_eye_states{std::nullopt, std::nullopt};
128 std::array<SwapchainCache, 2> swapchain_caches{};
141#ifdef XRT_HAVE_VULKAN
157 VkSampler sampler{VK_NULL_HANDLE};
160 VkPipelineCache driver_pipeline_cache{VK_NULL_HANDLE};
163 struct render_blit_ms_pipeline_cache *pipeline_cache{
nullptr};
166 VkPipelineLayout pipeline_layout{VK_NULL_HANDLE};
169 VkDescriptorPool descriptor_pool{VK_NULL_HANDLE};
172 VkDescriptorSetLayout descriptor_set_layout{VK_NULL_HANDLE};
175 VkDescriptorSet descriptor_set{VK_NULL_HANDLE};
178 std::array<VkPipeline, RENDER_BLIT_RESOLVE_COLOR_MODE_COUNT> pipelines{};
182 std::optional<RenderStateCache> render_state_cache{std::nullopt};
184 std::shared_ptr<Events> events{};
187 std::optional<timepoint_ns> last_predicted_display_time{std::nullopt};
188 std::optional<time_duration_ns> last_predicted_display_period{std::nullopt};
190 std::array<vr::TrackedDevicePose_t, vr::k_unMaxTrackedDeviceCount> last_render_poses{};
191 std::array<vr::TrackedDevicePose_t, vr::k_unMaxTrackedDeviceCount> last_game_poses{};
193 vr::ETrackingUniverseOrigin current_tracking_universe{vr::ETrackingUniverseOrigin::TrackingUniverseSeated};
196#ifdef XRT_HAVE_VULKAN
202 setupVulkanCompositor(
openvr_logger &logger, vr::VRVulkanTextureData_t &vulkan_data);
205 destroyVulkanResources();
211 vr::VRVulkanTextureData_t &texture_data,
212 VkFormat storage_format,
213 vr::EColorSpace color_space,
217 vr::EVRCompositorError
220 vr::VRVulkanTextureData_t &texture_data,
221 vr::EColorSpace color_space,
222 const vr::VRTextureBounds_t &bounds);
225 getVulkanOutputDevice(
openvr_logger &logger, uint64_t *out_device, VkInstance pInstance);
230 getProjectionLayerDataForEye(vr::EVREye eye,
const EyeState &eye_state);
233 vr::EVRCompositorError
240 std::shared_ptr<Events> &events);
248 vr::EVRCompositorError
252 vr::EVRCompositorError
256 const vr::VRTextureBounds_t &bounds,
257 vr::EVRSubmitFlags nSubmitFlags);
261 uint64_t *out_device,
262 vr::ETextureType texture_type,
263 VkInstance pInstance);
266 getTimeForPredictions();
272 getFrameRenderState(std::array<xrt_fov, 2> &fovs,
273 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
xrt_swapchain_usage_bits
Usage of the swapchain images.
Definition xrt_compositor.h:563
xrt_swapchain_create_flags
Special flags for creating swapchain images.
Definition xrt_compositor.h:545
enum xrt_result xrt_result_t
Result type used across Monado.
Implementation of OpenVR event handling and related functionality.
The NEW compositor rendering code header.
Shader loading interface.
Definition m_space.cpp:87
Holds all shaders.
Definition render_shaders_interface.h:26
Helper struct to make code easier to read.
Definition render_distortion.c:183
A bundle of Vulkan functions and objects, used by both Compositor and Compositor client code.
Definition vk_helpers.h:81
Small helper to manage lock around a command pool.
Definition vk_cmd_pool.h:33
Definition openvr_compositor.hpp:121
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:141
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:207
Definition openvr_compositor.hpp:69
Definition openvr_compositor.hpp:44
xrt_swapchain * xsc
The swapchain in use.
Definition openvr_compositor.hpp:46
xrt_rect bounds
The sub-image of the runtime swapchain texture to submit to the compositor.
Definition openvr_compositor.hpp:56
uint32_t swapchain_index
The index into the eye's swapchain for the currently held texture.
Definition openvr_compositor.hpp:48
uint32_t width
The width of the currently held runtime swapchain texture.
Definition openvr_compositor.hpp:51
uint32_t height
The height of the currently held runtime swapchain texture.
Definition openvr_compositor.hpp:53
Definition openvr_compositor.hpp:74
Definition openvr_compositor.hpp:113
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:85
void reset()
Resets the internal state of the cache, releasing any swapchain it holds.
Definition openvr_compositor.cpp:94
xrt_result_t ensureSwapchain(xrt_compositor *xc, uint32_t storage_format, uint32_t sample_format, uint32_t width, uint32_t height, xrt_swapchain_usage_bits usage_bits, xrt_swapchain_create_flags flags)
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:2218
Common compositor client interface/base.
Definition xrt_compositor.h:1046
All of the pure data values associated with a single view in a projection layer.
Definition xrt_compositor.h:261
A pose composed of a position and orientation.
Definition xrt_defines.h:502
Image rectangle.
Definition xrt_defines.h:467
Common swapchain interface/base.
Definition xrt_compositor.h:593
The system compositor handles composition for a system.
Definition xrt_compositor.h:2459
A collection of xrt_device, and an interface for identifying the roles they have been assigned.
Definition xrt_system.h:216
Time-keeping: a clock that is steady, convertible to system time, and ideally high-resolution.
Common Vulkan code header.
Header declaring XRT graphics interfaces.
Header defining an xrt display or controller device.
Header defining an XRT graphics provider.
Header for system objects.