23struct render_distortion_pipeline_cache;
24struct render_layer_pipeline_cache;
25struct render_blit_ms_pipeline_cache;
60#define RENDER_ALWAYS_SAFE_UBO_ALIGNMENT (256)
67#define RENDER_MAX_LAYERS (128)
73#define RENDER_CS_MAX_SAMPLERS_PER_VIEW 2
79#define RENDER_MAX_IMAGES_SIZE (RENDER_MAX_LAYERS * RENDER_CS_MAX_SAMPLERS_PER_VIEW)
88#define RENDER_MAX_LAYER_RUNS_SIZE (XRT_MAX_VIEWS)
89#define RENDER_MAX_LAYER_RUNS_COUNT(RENDER_RESOURCES) (RENDER_RESOURCES->view_count)
92#define RENDER_DISTORTION_IMAGE_DIMENSIONS (128)
95#define RENDER_DISTORTION_IMAGES_SIZE (3 * XRT_MAX_VIEWS)
96#define RENDER_DISTORTION_IMAGES_COUNT(RENDER_RESOURCES) (3 * RENDER_RESOURCES->view_count)
99#define RENDER_BINDING_LAYER_SHARED_UBO 0
102#define RENDER_BINDING_LAYER_SHARED_SRC 1
108#define RENDER_LAYER_DEFAULT_INSET_BLEND_EDGE (0.05f)
114#define RENDER_CS_MAX_SAMPLERS_PER_VIEW 2
205 VkBufferUsageFlags usage_flags,
206 VkMemoryPropertyFlags memory_property_flags,
215 VkBufferUsageFlags usage_flags,
216 VkMemoryPropertyFlags memory_property_flags,
319XRT_CHECK_RESULT VkResult
330XRT_CHECK_RESULT VkResult
373 VkCommandPool cmd_pool;
375 VkQueryPool query_pool;
444 uint32_t vertex_count;
445 uint32_t index_counts[XRT_MAX_VIEWS];
447 uint32_t index_offsets[XRT_MAX_VIEWS];
448 uint32_t index_count_total;
463 VkImageView image_view;
464 VkDeviceMemory memory;
618render_resources_get_timestamps(
struct render_resources *r, uint64_t *out_gpu_start_ns, uint64_t *out_gpu_end_ns);
631render_resources_get_duration(
struct render_resources *r, uint64_t *out_gpu_duration_ns);
646 VkDeviceMemory device_memory;
648 VkImageView srgb_view;
649 VkImageView unorm_view;
738 VkPipeline cylinder_premultiplied_alpha;
739 VkPipeline cylinder_unpremultiplied_alpha;
741 VkPipeline equirect2_premultiplied_alpha;
742 VkPipeline equirect2_unpremultiplied_alpha;
744 VkPipeline proj_premultiplied_alpha;
745 VkPipeline proj_unpremultiplied_alpha;
747 VkPipeline quad_premultiplied_alpha;
748 VkPipeline quad_unpremultiplied_alpha;
761 VkAttachmentLoadOp load_op,
762 VkImageLayout final_layout);
949 float central_horizontal_angle;
950 float upper_vertical_angle;
951 float lower_vertical_angle;
998XRT_CHECK_RESULT VkResult
999render_gfx_mesh_alloc_and_write(
struct render_gfx *render,
1001 VkSampler src_sampler,
1002 VkImageView src_image_view,
1003 VkDescriptorSet *out_descriptor_set);
1011XRT_CHECK_RESULT VkResult
1012render_gfx_layer_cylinder_alloc_and_write(
struct render_gfx *render,
1014 VkSampler src_sampler,
1015 VkImageView src_image_view,
1016 VkDescriptorSet *out_descriptor_set);
1024XRT_CHECK_RESULT VkResult
1025render_gfx_layer_equirect2_alloc_and_write(
struct render_gfx *render,
1027 VkSampler src_sampler,
1028 VkImageView src_image_view,
1029 VkDescriptorSet *out_descriptor_set);
1037XRT_CHECK_RESULT VkResult
1038render_gfx_layer_projection_alloc_and_write(
struct render_gfx *render,
1040 VkSampler src_sampler,
1041 VkImageView src_image_view,
1042 VkDescriptorSet *out_descriptor_set);
1050XRT_CHECK_RESULT VkResult
1051render_gfx_layer_quad_alloc_and_write(
struct render_gfx *render,
1053 VkSampler src_sampler,
1054 VkImageView src_image_view,
1055 VkDescriptorSet *out_descriptor_set);
1075render_gfx_begin_target(
struct render_gfx *render,
1077 const VkClearColorValue *color);
1085render_gfx_end_target(
struct render_gfx *render);
1092render_gfx_clear_color_attachment(
struct render_gfx *render,
const VkClearColorValue *color);
1099render_gfx_begin_view(
struct render_gfx *render,
1122render_gfx_mesh_draw(
struct render_gfx *render, uint32_t mesh_index, VkDescriptorSet descriptor_set,
bool do_timewarp);
1133render_gfx_layer_cylinder(
struct render_gfx *render,
bool premultiplied_alpha, VkDescriptorSet descriptor_set);
1144render_gfx_layer_equirect2(
struct render_gfx *render,
bool premultiplied_alpha, VkDescriptorSet descriptor_set);
1155render_gfx_layer_projection(
struct render_gfx *render,
bool premultiplied_alpha, VkDescriptorSet descriptor_set);
1166render_gfx_layer_quad(
struct render_gfx *render,
bool premultiplied_alpha, VkDescriptorSet descriptor_set);
1226 RENDER_BLIT_RESOLVE_COLOR_MODE_COUNT = 2,
1276 uint32_t layer_type;
1277 uint32_t unpremultiplied_alpha;
1278 uint32_t inverted_alpha;
1289 uint32_t color_image_index;
1290 uint32_t depth_image_index;
1307 float central_angle;
1319 float central_horizontal_angle;
1320 float upper_vertical_angle;
1321 float lower_vertical_angle;
1378 struct xrt_matrix_4x4 transform_timewarp_scanout_begin[XRT_MAX_VIEWS];
1379 struct xrt_matrix_4x4 transform_timewarp_scanout_end[XRT_MAX_VIEWS];
1430 VkDescriptorSet descriptor_set,
1435 VkImageView target_image_view,
1444 VkSampler src_samplers[XRT_MAX_VIEWS],
1445 VkImageView src_image_views[XRT_MAX_VIEWS],
1447 const struct xrt_pose src_poses[XRT_MAX_VIEWS],
1448 const struct xrt_fov src_fovs[XRT_MAX_VIEWS],
1449 const struct xrt_pose new_poses_scanout_begin[XRT_MAX_VIEWS],
1450 const struct xrt_pose new_poses_scanout_end[XRT_MAX_VIEWS],
1451 VkImage target_image,
1452 VkImageView target_image_view,
1453 VkImageLayout target_final_layout,
1460render_compute_projection_scanout_compensation(
struct render_compute *render,
1461 VkSampler src_samplers[XRT_MAX_VIEWS],
1462 VkImageView src_image_views[XRT_MAX_VIEWS],
1464 const struct xrt_fov src_fovs[XRT_MAX_VIEWS],
1465 const struct xrt_pose new_poses_scanout_begin[XRT_MAX_VIEWS],
1466 const struct xrt_pose new_poses_scanout_end[XRT_MAX_VIEWS],
1467 VkImage target_image,
1468 VkImageView target_image_view,
1469 VkImageLayout target_final_layout,
1476render_compute_projection_no_timewarp(
struct render_compute *render,
1477 VkSampler src_samplers[XRT_MAX_VIEWS],
1478 VkImageView src_image_views[XRT_MAX_VIEWS],
1480 VkImage target_image,
1481 VkImageView target_image_view,
1482 VkImageLayout target_final_layout,
1490 VkImage target_image,
1491 VkImageView target_image_view,
1492 VkImageLayout target_final_layout,
void render_compute_layers(struct render_compute *render, VkDescriptorSet descriptor_set, VkBuffer ubo, VkSampler src_samplers[((128) *2)], VkImageView src_image_views[((128) *2)], uint32_t num_srcs, VkImageView target_image_view, const struct render_viewport_data *view, bool timewarp)
Updates the given descriptor_set and dispatches the layer shader.
VkResult render_buffer_map_and_write(struct vk_bundle *vk, struct render_buffer *buffer, void *data, VkDeviceSize size)
Maps the buffer, and copies the given data to the buffer.
Definition render_buffer.c:211
#define RENDER_MAX_LAYER_RUNS_SIZE
Maximum number of times that the layer squasher shader can run per render_compute.
Definition render_interface.h:88
VkResult render_buffer_write(struct vk_bundle *vk, struct render_buffer *buffer, void *data, VkDeviceSize size)
Writes the given data to the buffer, will map it temporarily if not mapped.
Definition render_buffer.c:233
void render_calc_time_warp_matrix(const struct xrt_pose *src_pose, const struct xrt_fov *src_fov, const struct xrt_pose *new_pose, struct xrt_matrix_4x4 *matrix)
Calculates a timewarp matrix which takes in NDC coords and gives out results in [-1,...
Definition render_util.c:140
void render_calc_time_warp_projection(const struct xrt_fov *fov, struct xrt_matrix_4x4 *result)
Create a simplified projection matrix for timewarp.
Definition render_util.c:176
#define RENDER_MAX_LAYERS
Max number of layers for layer squasher, can be different from XRT_MAX_LAYERS as the render module is...
Definition render_interface.h:67
#define RENDER_DISTORTION_IMAGES_SIZE
How many distortion images we have, one for each channel (3 rgb) and per view.
Definition render_interface.h:95
void render_calc_uv_to_tangent_lengths_rect(const struct xrt_fov *fov, struct xrt_normalized_rect *out_rect)
This function constructs a transformation in the form of a normalized rect that lets you go from a UV...
Definition render_util.c:187
#define RENDER_MAX_IMAGES_SIZE
Max number of images that can be given at a single time to the layer squasher in a single dispatch.
Definition render_interface.h:79
VkResult render_buffer_init(struct vk_bundle *vk, struct render_buffer *buffer, VkBufferUsageFlags usage_flags, VkMemoryPropertyFlags memory_property_flags, VkDeviceSize size)
Initialize a buffer.
Definition render_buffer.c:120
render_compute_blit_resolve_color_mode
Color mode for blit/resolve operations, used to select the correct shader variant for the source and ...
Definition render_interface.h:1221
uint32_t render_max_layers_capable(const struct vk_bundle *vk, bool use_compute, uint32_t desired_max_layers)
Determines the maximum number of compositor layers supported based on Vulkan device limits and the co...
Definition render_util.c:91
void render_buffer_unmap(struct vk_bundle *vk, struct render_buffer *buffer)
Unmaps the memory.
Definition render_buffer.c:202
void render_sub_alloc_tracker_init(struct render_sub_alloc_tracker *rsat, struct render_buffer *buffer)
Init a render_sub_alloc_tracker struct from a render_buffer, the caller is responsible for keeping bu...
Definition render_sub_alloc.c:29
VkResult render_buffer_init_exportable(struct vk_bundle *vk, struct render_buffer *buffer, VkBufferUsageFlags usage_flags, VkMemoryPropertyFlags memory_property_flags, VkDeviceSize size)
Initialize a buffer, making it exportable.
Definition render_buffer.c:146
VkResult render_buffer_map(struct vk_bundle *vk, struct render_buffer *buffer)
Maps the memory, sets render_buffer::mapped to the memory.
Definition render_buffer.c:191
XRT_CHECK_RESULT VkResult render_sub_alloc_ubo_alloc_and_get_ptr(struct vk_bundle *vk, struct render_sub_alloc_tracker *rsat, VkDeviceSize size, void **out_ptr, struct render_sub_alloc *out_rsa)
Allocate enough memory (with constraints of UBOs) of size, return the pointer to the mapped memory or...
Definition render_sub_alloc.c:38
XRT_CHECK_RESULT VkResult render_sub_alloc_ubo_alloc_and_write(struct vk_bundle *vk, struct render_sub_alloc_tracker *rsat, const void *ptr, VkDeviceSize size, struct render_sub_alloc *out_rsa)
Allocate enough memory (with constraints of UBOs) to hold the memory in ptr and copy that memory to t...
Definition render_sub_alloc.c:84
void render_buffer_fini(struct vk_bundle *vk, struct render_buffer *buffer)
Frees all resources that this buffer has, but does not free the buffer itself.
Definition render_buffer.c:183
void render_gfx_end_view(struct render_gfx *render)
Definition render_gfx.c:1164
@ RENDER_BLIT_RESOLVE_COLOR_MODE_LINEAR_IN_SRGB_FORMAT
Source is sRGB but the submitted bytes are already linear.
Definition render_interface.h:1225
@ RENDER_BLIT_RESOLVE_COLOR_MODE_GAMMA_IN_LINEAR_FORMAT
Source is UNORM/linear but the submitted bytes are gamma-encoded.
Definition render_interface.h:1223
Shader loading interface.
Definition t_rift_blobwatch.c:112
Helper struct holding a buffer and its memory.
Definition render_interface.h:180
VkDeviceSize alignment
Alignment of the buffer.
Definition render_interface.h:194
VkDeviceSize allocation_size
Size of the memory allocation.
Definition render_interface.h:191
VkDeviceMemory memory
Backing memory.
Definition render_interface.h:182
VkBuffer buffer
Buffer.
Definition render_interface.h:185
VkDeviceSize size
Size requested for the buffer.
Definition render_interface.h:188
Chroma key parameters for std140 layout, using HSV min/max range.
Definition render_interface.h:1235
Push data that is sent to the blit shader.
Definition render_interface.h:1209
UBO data that is sent to the compute distortion shaders.
Definition render_interface.h:1374
UBO data that is sent to the compute layer shaders.
Definition render_interface.h:1252
struct render_compute_layer_ubo_data::@21::@26 quad_position
For quad layers.
struct xrt_colour_rgba_f32 color_scale
Color scale and bias for all layers.
Definition render_interface.h:1363
struct render_compute_layer_ubo_data::@21::@24 cylinder_data
For cylinder layer.
struct xrt_matrix_4x4 mv_inverse
Shared between cylinder and equirect2.
Definition render_interface.h:1298
struct render_compute_layer_ubo_data::@21::@23 image_info
Which image/sampler(s) correspond to each layer.
struct xrt_matrix_4x4 transforms_timewarp
For projection layers.
Definition render_interface.h:1330
struct render_compute_layer_ubo_data::@21::@28 quad_extent
Quad extent in world scale.
struct render_compute_layer_ubo_data::@21::@25 eq2_data
For equirect2 layers.
uint32_t _padding0
Definition render_interface.h:1279
struct render_chroma_key_info chroma_key
Chroma key parameters (per layer)
Definition render_interface.h:1333
struct render_compute_layer_ubo_data::@21::@22 layer_data
Corresponds to enum xrt_layer_type and unpremultiplied alpha.
The semi-low level resources and operations required to squash layers and/or apply distortion for a s...
Definition render_interface.h:1188
struct render_resources * r
Shared resources.
Definition render_interface.h:1190
VkDescriptorSet shared_descriptor_set
Shared descriptor set, used for the clear and distortion shaders.
Definition render_interface.h:1200
VkDescriptorSet layer_descriptor_sets[(XRT_MAX_VIEWS)]
Layer descriptor set.
Definition render_interface.h:1193
UBO data that is sent to the layer cylinder shader.
Definition render_interface.h:924
UBO data that is sent to the layer equirect2 shader.
Definition render_interface.h:941
struct xrt_normalized_rect to_tangent
See render_calc_uv_to_tangent_lengths_rect.
Definition render_interface.h:946
UBO data that is sent to the layer projection shader.
Definition render_interface.h:962
UBO data that is sent to the layer quad shader.
Definition render_interface.h:976
UBO data that is sent to the mesh shaders.
Definition render_interface.h:908
A render pass, while not depending on a VkFramebuffer, does depend on the format of the target image(...
Definition render_interface.h:709
VkPipeline pipeline
Pipeline layout used for mesh, without timewarp.
Definition render_interface.h:730
VkFormat format
The format of the image(s) we are rendering to.
Definition render_interface.h:713
VkSampleCountFlagBits sample_count
Sample count for this render pass.
Definition render_interface.h:716
VkAttachmentLoadOp load_op
Load op used on the attachment(s).
Definition render_interface.h:719
VkImageLayout final_layout
Final layout of the target image(s).
Definition render_interface.h:722
VkRenderPass render_pass
Render pass used for rendering.
Definition render_interface.h:725
VkPipeline pipeline_timewarp
Pipeline layout used for mesh, with timewarp.
Definition render_interface.h:733
Each rendering (render_gfx) render to one or more targets (render_gfx_target_resources),...
Definition render_interface.h:788
VkRect2D render_area
The offset & extents of the framebuffer.
Definition render_interface.h:796
struct render_resources * r
Collections of static resources.
Definition render_interface.h:790
struct render_gfx_render_pass * rgrp
Render pass.
Definition render_interface.h:793
VkFramebuffer framebuffer
Framebuffer for this target, depends on given VkImageView.
Definition render_interface.h:799
The low-level resources and operations to perform layer squashing and/or mesh distortion for a single...
Definition render_interface.h:851
struct render_resources * r
Resources that we are based on.
Definition render_interface.h:853
struct render_gfx_target_resources * rtr
The current target we are rendering to, can change during command building.
Definition render_interface.h:859
struct render_sub_alloc_tracker ubo_tracker
Shared buffer that we sub-allocate UBOs from.
Definition render_interface.h:856
Holds all pools and static resources for rendering.
Definition render_interface.h:348
uint32_t target_binding
Writing the image out too.
Definition render_interface.h:480
uint32_t ubo_binding
The binding index for the UBO.
Definition render_interface.h:433
VkCommandBuffer cmd
Command buffer for recording everything.
Definition render_interface.h:383
uint32_t image_array_size
Size of combined image sampler array.
Definition render_interface.h:503
uint32_t view_count
The count of views that we are rendering to.
Definition render_interface.h:350
struct render_buffer ubos[XRT_MAX_VIEWS]
Info UBOs.
Definition render_interface.h:451
struct vk_bundle * vk
Vulkan resources.
Definition render_interface.h:353
VkSampler clamp_to_border_black
Sampler that clamps color samples to black in all directions.
Definition render_interface.h:397
bool pre_rotated
Whether distortion images have been pre-rotated 90 degrees.
Definition render_interface.h:557
VkPipeline non_timewarp_pipeline
Doesn't depend on target so is static.
Definition render_interface.h:494
struct render_shaders * shaders
All shaders loaded.
Definition render_interface.h:360
struct render_buffer shared_ubo
Shared UBO buffer that we sub-allocate out of, this is to have fewer buffers that the kernel needs to...
Definition render_interface.h:412
VkDescriptorSetLayout descriptor_set_layout
For projection and quad layer.
Definition render_interface.h:419
struct xrt_normalized_rect uv_to_tanangle[XRT_MAX_VIEWS]
Transform to go from UV to tangle angles.
Definition render_interface.h:545
VkPipeline timewarp_pipeline
Doesn't depend on target so is static.
Definition render_interface.h:497
VkPipeline pipeline
Cached non-timewarp variant from pipeline_cache.
Definition render_interface.h:518
VkImage images[(3 *XRT_MAX_VIEWS)]
Distortion images.
Definition render_interface.h:551
struct render_layer_pipeline_cache * pipeline_cache
Get-or-create cache for layer.comp specialization variants.
Definition render_interface.h:500
VkDescriptorPool ubo_and_src_descriptor_pool
Pool for shaders that uses one ubo and sampler.
Definition render_interface.h:403
struct vk_cmd_pool distortion_pool
Pool used for distortion image uploads.
Definition render_interface.h:368
VkSampler repeat
Sampler that repeats the texture in all directions.
Definition render_interface.h:391
uint32_t src_binding
The binding index for the source texture.
Definition render_interface.h:430
VkDeviceMemory device_memories[(3 *XRT_MAX_VIEWS)]
Backing memory to distortion images.
Definition render_interface.h:548
VkSampler mock
Sampler for mock/null images.
Definition render_interface.h:388
VkSampler clamp_to_edge
Sampler that clamps the coordinates to the edge in all directions.
Definition render_interface.h:394
struct render_buffer ubo
Target info.
Definition render_interface.h:527
struct render_distortion_pipeline_cache * pipeline_cache
Get-or-create cache for distortion.comp specialization variants.
Definition render_interface.h:524
uint32_t distortion_binding
Image storing the distortion.
Definition render_interface.h:477
VkPipelineLayout pipeline_layout
For projection and quad layer.
Definition render_interface.h:422
VkDescriptorPool descriptor_pool
Descriptor pool for compute work.
Definition render_interface.h:471
VkPipelineCache pipeline_cache
Shared for all rendering.
Definition render_interface.h:371
VkImageView image_views[(3 *XRT_MAX_VIEWS)]
The views into the distortion images.
Definition render_interface.h:554
Small helper struct to hold a scratch image, intended to be used with the compute pipeline where both...
Definition render_interface.h:645
Helper struct to hold scratch images.
Definition render_interface.h:656
Holds all shaders.
Definition render_shaders_interface.h:26
A per-frame tracker of sub-allocation out of a buffer, used to reduce the number of UBO objects we ne...
Definition render_interface.h:290
void * mapped
Start of memory, if buffer was mapped with initialised.
Definition render_interface.h:298
VkBuffer buffer
The buffer to allocate from, it is the caller's responsibility to keep it alive for as long as the su...
Definition render_interface.h:295
VkDeviceSize used
Currently used memory.
Definition render_interface.h:304
VkDeviceSize total_size
Total size of buffer.
Definition render_interface.h:301
Per frame sub-allocation into a buffer, used to reduce the number of UBO objects we need to create.
Definition render_interface.h:265
VkDeviceSize size
Size of sub-allocation.
Definition render_interface.h:273
VkBuffer buffer
The buffer this is allocated from, it is the caller's responsibility to keep it alive for as long as ...
Definition render_interface.h:270
VkDeviceSize offset
Offset into buffer.
Definition render_interface.h:276
The pure data information about a view that the renderer is rendering to.
Definition render_interface.h:689
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
A 4 element colour with floating point channels.
Definition xrt_defines.h:444
A single HMD or input device.
Definition xrt_device.h:357
Describes a projection matrix fov.
Definition xrt_defines.h:533
A tightly packed 2x2 matrix of floats.
Definition xrt_defines.h:560
A tightly packed 4x4 matrix of floats.
Definition xrt_defines.h:607
Normalized image rectangle, coordinates and size in 0 .
Definition xrt_defines.h:501
A pose composed of a position and orientation.
Definition xrt_defines.h:513
Image rectangle.
Definition xrt_defines.h:478
A 2 element vector with single floats.
Definition xrt_defines.h:279
A 3 element vector with single floats.
Definition xrt_defines.h:310
Common Vulkan code header.
Header holding common defines.
Common defines and enums for XRT.