31static inline VkImageView
34 if (
flags & XRT_LAYER_COMPOSITION_BLEND_TEXTURE_SOURCE_ALPHA_BIT) {
35 return image->
views.alpha[array_index];
38 return image->
views.no_alpha[array_index];
49is_view_index_right(uint32_t view_index)
51 return view_index % 2 == 1;
55view_index_to_projection_data(uint32_t view_index,
60 *out_vd = &proj->v[view_index];
64view_index_to_depth_data(uint32_t view_index,
70 *out_vd = &depth->v[view_index];
71 *out_dvd = &depth->d[view_index];
82is_layer_view_visible(
const struct xrt_layer_data *data, uint32_t view_index)
86 case XRT_LAYER_CUBE: visibility = data->cube.visibility;
break;
87 case XRT_LAYER_CYLINDER: visibility = data->cylinder.visibility;
break;
88 case XRT_LAYER_EQUIRECT1: visibility = data->equirect1.visibility;
break;
89 case XRT_LAYER_EQUIRECT2: visibility = data->equirect2.visibility;
break;
90 case XRT_LAYER_QUAD: visibility = data->quad.visibility;
break;
91 case XRT_LAYER_PROJECTION:
92 case XRT_LAYER_PROJECTION_DEPTH:
return true;
93 default:
return false;
97 case XRT_LAYER_EYE_VISIBILITY_LEFT_BIT:
return !is_view_index_right(view_index);
98 case XRT_LAYER_EYE_VISIBILITY_RIGHT_BIT:
return is_view_index_right(view_index);
99 case XRT_LAYER_EYE_VISIBILITY_BOTH:
return true;
100 case XRT_LAYER_EYE_VISIBILITY_NONE:
101 default:
return false;
114 return (data->flags & XRT_LAYER_COMPOSITION_UNPREMULTIPLIED_ALPHA_BIT) != 0;
125 if (data->flip_y ^ invert_flip) {
132 *out_norm_rect = rect;
150 VkAccessFlags src_access_mask,
151 VkAccessFlags dst_access_mask,
152 VkImageLayout transition_from,
153 VkImageLayout transition_to,
154 VkPipelineStageFlags src_stage_mask,
155 VkPipelineStageFlags dst_stage_mask)
157 VkImageSubresourceRange first_color_level_subresource_range = {
158 .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
165 for (uint32_t i = 0; i < d->
view_count; i++) {
166 bool already_barriered =
false;
168 VkImage image = d->views[i].squash.
image;
174 if (d->views[k].squash.
image == image) {
175 already_barriered =
true;
180 if (already_barriered) {
194 first_color_level_subresource_range);
Helper implementation for native compositors.
Compositor render implementation.
static void cmd_barrier_view_squash_images(struct vk_bundle *vk, const struct comp_render_dispatch_data *d, VkCommandBuffer cmd, VkAccessFlags src_access_mask, VkAccessFlags dst_access_mask, VkImageLayout transition_from, VkImageLayout transition_to, VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask)
This inserts a barrier operation that effects all views[X].squash.image fields (which are VkImages).
Definition: comp_render_helpers.h:147
void vk_cmd_image_barrier_locked(struct vk_bundle *vk, VkCommandBuffer cmd_buffer, VkImage image, VkAccessFlags src_access_mask, VkAccessFlags dst_access_mask, VkImageLayout old_image_layout, VkImageLayout new_image_layout, VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, VkImageSubresourceRange subresource_range)
Inserts a image barrier command, doesn't take any locks, the calling code will need hold the lock for...
Definition: vk_helpers.c:1683
xrt_layer_composition_flags
Bit field for holding information about how a layer should be composited.
Definition: xrt_compositor.h:92
xrt_layer_eye_visibility
Which view is the layer visible to?
Definition: xrt_compositor.h:159
@ XRT_LAYER_COMPOSITION_VIEW_SPACE_BIT
The layer is locked to the device and the pose should only be adjusted for the IPD.
Definition: xrt_compositor.h:100
The NEW compositor rendering code header.
The input data needed for a complete layer squashing distortion rendering to a target.
Definition: comp_render.h:164
uint32_t view_count
The number of views currently in this dispatch data.
Definition: comp_render.h:168
VkImage image
The layer image for this view (aka scratch image), used for barrier operations.
Definition: comp_render.h:98
A single swapchain image, holds the needed state for tracking image usage.
Definition: comp_swapchain.h:58
struct comp_swapchain_image::@118 views
Views used by the renderer and distortion code, for each array layer.
Definition: m_space.cpp:87
A bundle of Vulkan functions and objects, used by both Compositor and Compositor client code.
Definition: vk_helpers.h:51
All the pure data values associated with a composition layer.
Definition: xrt_compositor.h:394
All the pure data values associated with a depth information attached to a layer.
Definition: xrt_compositor.h:244
All the pure data values associated with a projection layer.
Definition: xrt_compositor.h:232
All the pure data values associated with a projection layer with depth swapchain attached.
Definition: xrt_compositor.h:267
All of the pure data values associated with a single view in a projection layer.
Definition: xrt_compositor.h:218
Normalized image rectangle, coordinates and size in 0 .
Definition: xrt_defines.h:451
Header declaring XRT graphics interfaces.