The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

c/util: Share most add_view code.

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2323>

authored by

Rylie Pavlik and committed by
Marge Bot
df2a05ce 6c73d381

+76 -32
+76 -32
src/xrt/compositor/util/comp_render.h
··· 159 159 } cs; 160 160 }; 161 161 162 + /*! 163 + * Shared implementation setting up common view params between GFX and CS. 164 + * 165 + * Private implementation method, do not use outside of more-specific add_view calls! 166 + * 167 + * @param data Common render dispatch data, will be updated 168 + * @param world_pose New world pose of this view. 169 + * Populates @ref comp_render_view_data::world_pose 170 + * @param eye_pose New eye pose of this view 171 + * Populates @ref comp_render_view_data::eye_pose 172 + * @param fov Assigned to fov in the view data, and used to compute @ref comp_render_view_data::target_pre_transform 173 + * Populates @ref comp_render_view_data::fov 174 + * @param layer_viewport_data Where in the image to render the view 175 + * Populates @ref comp_render_view_data::layer_viewport_data 176 + * @param layer_norm_rect How to transform when sampling from the scratch image. 177 + * Populates @ref comp_render_view_data::layer_norm_rect 178 + * @param image Scratch image for this view 179 + * Populates @ref comp_render_view_data::image 180 + * @param srgb_view SRGB image view into the scratch image 181 + * Populates @ref comp_render_view_data::srgb_view 182 + * @param target_viewport_data Distortion target viewport data (aka target) 183 + * Populates @ref comp_render_view_data::target_viewport_data 184 + 185 + * @return Pointer to the @ref comp_render_view_data we have been populating, for additional setup. 186 + */ 187 + static inline struct comp_render_view_data * 188 + comp_render_dispatch_add_view(struct comp_render_dispatch_data *data, 189 + const struct xrt_pose *world_pose, 190 + const struct xrt_pose *eye_pose, 191 + const struct xrt_fov *fov, 192 + const struct render_viewport_data *layer_viewport_data, 193 + const struct xrt_normalized_rect *layer_norm_rect, 194 + VkImage image, 195 + VkImageView srgb_view, 196 + const struct render_viewport_data *target_viewport_data) 197 + { 198 + uint32_t i = data->view_count++; 199 + 200 + assert(i < ARRAY_SIZE(data->views)); 201 + 202 + struct comp_render_view_data *view = &data->views[i]; 203 + 204 + render_calc_uv_to_tangent_lengths_rect(fov, &view->target_pre_transform); 205 + 206 + view->world_pose = *world_pose; 207 + view->eye_pose = *eye_pose; 208 + view->fov = *fov; 209 + view->image = image; 210 + view->srgb_view = srgb_view; 211 + view->layer_viewport_data = *layer_viewport_data; 212 + view->layer_norm_rect = *layer_norm_rect; 213 + view->target_viewport_data = *target_viewport_data; 214 + 215 + return view; 216 + } 162 217 163 218 /*! @} */ 164 219 ··· 239 294 const struct xrt_matrix_2x2 *vertex_rot, 240 295 const struct render_viewport_data *target_viewport_data) 241 296 { 242 - uint32_t i = data->view_count++; 243 - 244 - assert(i < ARRAY_SIZE(data->views)); 297 + struct comp_render_view_data *view = comp_render_dispatch_add_view( // 298 + data, // 299 + world_pose, // 300 + eye_pose, // 301 + fov, // 302 + layer_viewport_data, // 303 + layer_norm_rect, // 304 + image, // 305 + srgb_view, // 306 + target_viewport_data); 245 307 246 - struct comp_render_view_data *view = &data->views[i]; 247 - 248 - render_calc_uv_to_tangent_lengths_rect(fov, &view->target_pre_transform); 249 - 250 - view->world_pose = *world_pose; 251 - view->eye_pose = *eye_pose; 252 - view->fov = *fov; 253 - view->image = image; 254 - view->srgb_view = srgb_view; 255 - view->layer_viewport_data = *layer_viewport_data; 256 - view->layer_norm_rect = *layer_norm_rect; 257 - view->target_viewport_data = *target_viewport_data; 258 - 308 + // TODO why is the one in data not used instead 259 309 view->gfx.rtr = rtr; 260 310 view->gfx.vertex_rot = *vertex_rot; 261 311 } ··· 382 432 VkImageView unorm_view, 383 433 const struct render_viewport_data *target_viewport_data) 384 434 { 385 - uint32_t i = data->view_count++; 386 - 387 - assert(i < ARRAY_SIZE(data->views)); 388 - 389 - struct comp_render_view_data *view = &data->views[i]; 390 - 391 - render_calc_uv_to_tangent_lengths_rect(fov, &view->target_pre_transform); 392 - 393 - view->world_pose = *world_pose; 394 - view->eye_pose = *eye_pose; 395 - view->fov = *fov; 396 - view->layer_viewport_data = *layer_viewport_data; 397 - view->layer_norm_rect = *layer_norm_rect; 398 - view->image = image; 399 - view->srgb_view = srgb_view; 400 - view->target_viewport_data = *target_viewport_data; 435 + struct comp_render_view_data *view = comp_render_dispatch_add_view( // 436 + data, // 437 + world_pose, // 438 + eye_pose, // 439 + fov, // 440 + layer_viewport_data, // 441 + layer_norm_rect, // 442 + image, // 443 + srgb_view, // 444 + target_viewport_data); 401 445 402 446 view->cs.unorm_view = unorm_view; 403 447 }