The open source OpenXR runtime
0
fork

Configure Feed

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

c/util: Rearrange to minimize diffs between compute fast path and from-scratch distortion

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

+25 -23
+25 -23
src/xrt/compositor/util/comp_render_cs.c
··· 362 362 } 363 363 VkSampler clamp_to_border_black = crc->r->samplers.clamp_to_border_black; 364 364 365 - struct render_viewport_data target_viewport_datas[XRT_MAX_VIEWS]; 365 + // Data to fill in. 366 366 VkImageView src_image_views[XRT_MAX_VIEWS]; 367 367 VkSampler src_samplers[XRT_MAX_VIEWS]; 368 + struct render_viewport_data target_viewport_datas[XRT_MAX_VIEWS]; 368 369 struct xrt_normalized_rect src_norm_rects[XRT_MAX_VIEWS]; 369 370 370 371 for (uint32_t i = 0; i < d->view_count; i++) { 371 372 // Data to be filled in. 372 - struct render_viewport_data viewport_data; 373 373 VkImageView src_image_view; 374 + struct render_viewport_data viewport_data; 374 375 struct xrt_normalized_rect src_norm_rect; 375 376 376 377 // Gather data. 377 - viewport_data = d->views[i].target_viewport_data, 378 378 src_image_view = d->views[i].srgb_view; // Read with gamma curve. 379 379 src_norm_rect = d->views[i].layer_norm_rect; 380 + viewport_data = d->views[i].target_viewport_data; 380 381 381 382 // Fill in data. 382 - target_viewport_datas[i] = viewport_data; 383 383 src_image_views[i] = src_image_view; 384 + src_norm_rects[i] = src_norm_rect; 384 385 src_samplers[i] = clamp_to_border_black; 385 - src_norm_rects[i] = src_norm_rect; 386 + target_viewport_datas[i] = viewport_data; 386 387 } 387 388 388 389 render_compute_projection( // ··· 413 414 VkSampler clamp_to_border_black = crc->r->samplers.clamp_to_border_black; 414 415 415 416 // Data to fill in. 416 - struct xrt_pose world_poses[XRT_MAX_VIEWS]; 417 + VkImageView src_image_views[XRT_MAX_VIEWS]; 418 + VkSampler src_samplers[XRT_MAX_VIEWS]; 417 419 struct render_viewport_data target_viewport_datas[XRT_MAX_VIEWS]; 418 420 struct xrt_normalized_rect src_norm_rects[XRT_MAX_VIEWS]; 419 - struct xrt_pose src_poses[XRT_MAX_VIEWS]; 420 421 struct xrt_fov src_fovs[XRT_MAX_VIEWS]; 421 - VkSampler src_samplers[XRT_MAX_VIEWS]; 422 - VkImageView src_image_views[XRT_MAX_VIEWS]; 422 + struct xrt_pose src_poses[XRT_MAX_VIEWS]; 423 + struct xrt_pose world_poses[XRT_MAX_VIEWS]; 423 424 424 425 for (uint32_t i = 0; i < d->view_count; i++) { 425 - struct xrt_pose world_pose; 426 + // Data to be filled in. 427 + VkImageView src_image_view; 426 428 struct render_viewport_data viewport_data; 427 - struct xrt_pose src_pose; 428 - struct xrt_fov src_fov; 429 429 struct xrt_normalized_rect src_norm_rect; 430 - VkImageView src_image_view; 430 + struct xrt_fov src_fov; 431 + struct xrt_pose src_pose; 432 + struct xrt_pose world_pose; 431 433 uint32_t array_index = vds[i]->sub.array_index; 432 434 const struct comp_swapchain_image *image = get_layer_image(layer, i, vds[i]->sub.image_index); 433 435 434 436 // Gather data. 435 - world_pose = d->views[i].world_pose; 437 + src_image_view = get_image_view(image, data->flags, array_index); 438 + src_norm_rect = vds[i]->sub.norm_rect; 436 439 viewport_data = d->views[i].target_viewport_data; 437 - 438 - src_pose = vds[i]->pose; 439 440 src_fov = vds[i]->fov; 440 - src_norm_rect = vds[i]->sub.norm_rect; 441 - src_image_view = get_image_view(image, data->flags, array_index); 441 + src_pose = vds[i]->pose; 442 + world_pose = d->views[i].world_pose; 442 443 444 + // No layer squasher has handled this for us already 443 445 if (data->flip_y) { 444 446 src_norm_rect.y += src_norm_rect.h; 445 447 src_norm_rect.h = -src_norm_rect.h; 446 448 } 447 449 448 450 // Fill in data. 449 - world_poses[i] = world_pose; 450 - target_viewport_datas[i] = viewport_data; 451 + src_image_views[i] = src_image_view; 451 452 src_norm_rects[i] = src_norm_rect; 452 - src_poses[i] = src_pose; 453 - src_fovs[i] = src_fov; 454 453 src_samplers[i] = clamp_to_border_black; 455 - src_image_views[i] = src_image_view; 454 + target_viewport_datas[i] = viewport_data; 455 + src_fovs[i] = src_fov; 456 + src_poses[i] = src_pose; 457 + world_poses[i] = world_pose; 456 458 } 457 459 458 460 if (!d->do_timewarp) {