The open source OpenXR runtime
0
fork

Configure Feed

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

c/main: Refactor gfx dispatch

+94 -102
+94 -102
src/xrt/compositor/main/comp_renderer.c
··· 319 319 } 320 320 321 321 /*! 322 - * @pre render_gfx_init(rr, &c->nr) 323 - * @pre comp_target_has_images(r->c->target) 324 - */ 325 - static void 326 - renderer_build_rendering(struct comp_renderer *r, 327 - struct render_gfx *rr, 328 - struct render_gfx_target_resources *rtr, 329 - VkSampler src_samplers[2], 330 - VkImageView src_image_views[2], 331 - struct xrt_normalized_rect src_norm_rects[2]) 332 - { 333 - COMP_TRACE_MARKER(); 334 - 335 - 336 - /* 337 - * Rendering 338 - */ 339 - 340 - struct render_viewport_data l_viewport_data; 341 - struct render_viewport_data r_viewport_data; 342 - 343 - calc_viewport_data(r, &l_viewport_data, &r_viewport_data); 344 - 345 - struct xrt_matrix_2x2 vertex_rots[2]; 346 - calc_vertex_rot_data(r, vertex_rots); 347 - 348 - 349 - /* 350 - * Update 351 - */ 352 - 353 - struct render_gfx_mesh_ubo_data distortion_data[2] = { 354 - { 355 - .vertex_rot = vertex_rots[0], 356 - .post_transform = src_norm_rects[0], 357 - }, 358 - { 359 - .vertex_rot = vertex_rots[1], 360 - .post_transform = src_norm_rects[1], 361 - }, 362 - }; 363 - 364 - render_gfx_update_distortion(rr, // 365 - 0, // view_index 366 - src_samplers[0], // 367 - src_image_views[0], // 368 - &distortion_data[0]); // 369 - 370 - render_gfx_update_distortion(rr, // 371 - 1, // view_index 372 - src_samplers[1], // 373 - src_image_views[1], // 374 - &distortion_data[1]); // 375 - 376 - 377 - /* 378 - * Target 379 - */ 380 - 381 - render_gfx_begin_target( // 382 - rr, // 383 - rtr); // 384 - 385 - 386 - /* 387 - * Viewport one 388 - */ 389 - 390 - render_gfx_begin_view(rr, // 391 - 0, // view_index 392 - &l_viewport_data); // viewport_data 393 - 394 - render_gfx_distortion(rr); 395 - 396 - render_gfx_end_view(rr); 397 - 398 - 399 - /* 400 - * Viewport two 401 - */ 402 - 403 - render_gfx_begin_view(rr, // 404 - 1, // view_index 405 - &r_viewport_data); // viewport_data 406 - 407 - render_gfx_distortion(rr); 408 - 409 - render_gfx_end_view(rr); 410 - 411 - 412 - /* 413 - * End 414 - */ 415 - 416 - render_gfx_end_target(rr); 417 - } 418 - 419 - /*! 420 322 * @pre comp_target_has_images(r->c->target) 421 323 * Update r->buffer_count before calling. 422 324 */ ··· 887 789 return image->views.no_alpha[array_index]; 888 790 } 889 791 792 + 793 + /* 794 + * 795 + * Graphics 796 + * 797 + */ 798 + 799 + static void 800 + do_gfx_mesh(struct comp_renderer *r, 801 + struct render_gfx *rr, 802 + struct render_gfx_target_resources *rtr, 803 + const struct render_viewport_data viewport_datas[2], 804 + const struct xrt_matrix_2x2 vertex_rots[2], 805 + VkSampler src_samplers[2], 806 + VkImageView src_image_views[2], 807 + const struct xrt_normalized_rect src_norm_rects[2]) 808 + { 809 + render_gfx_begin_target( // 810 + rr, // 811 + rtr); // 812 + 813 + for (uint32_t i = 0; i < 2; i++) { 814 + render_gfx_begin_view( // 815 + rr, // 816 + i, // view_index 817 + &viewport_datas[i]); // viewport_data 818 + 819 + struct render_gfx_mesh_ubo_data data = { 820 + .vertex_rot = vertex_rots[i], 821 + .post_transform = src_norm_rects[i], 822 + }; 823 + 824 + render_gfx_update_distortion( // 825 + rr, // rr 826 + i, // view, 827 + src_samplers[i], // sampler, 828 + src_image_views[i], // image_view, 829 + &data); // data 830 + 831 + render_gfx_distortion(rr); 832 + 833 + render_gfx_end_view(rr); 834 + } 835 + 836 + render_gfx_end_target(rr); 837 + } 838 + 890 839 /*! 891 840 * @pre render_gfx_init(rr, &c->nr) 892 841 */ ··· 894 843 do_gfx_mesh_and_proj(struct comp_renderer *r, 895 844 struct render_gfx *rr, 896 845 struct render_gfx_target_resources *rts, 846 + const struct render_viewport_data viewport_datas[2], 847 + const struct xrt_matrix_2x2 vertex_rots[2], 897 848 const struct comp_layer *layer, 898 849 const struct xrt_layer_projection_view_data *lvd, 899 850 const struct xrt_layer_projection_view_data *rvd) ··· 923 874 get_image_view(right, data->flags, right_array_index), 924 875 }; 925 876 926 - renderer_build_rendering(r, rr, rts, src_samplers, src_image_views, src_norm_rects); 877 + do_gfx_mesh( // 878 + r, // 879 + rr, // 880 + rts, // 881 + viewport_datas, // 882 + vertex_rots, // 883 + src_samplers, // 884 + src_image_views, // 885 + src_norm_rects); // 927 886 } 928 887 929 888 /*! ··· 946 905 // Sanity check. 947 906 assert(!fast_path || c->base.slot.layer_count >= 1); 948 907 908 + // Viewport information. 909 + struct render_viewport_data viewport_datas[2]; 910 + calc_viewport_data(r, &viewport_datas[0], &viewport_datas[1]); 911 + 912 + // Vertex rotation information. 913 + struct xrt_matrix_2x2 vertex_rots[2]; 914 + calc_vertex_rot_data(r, vertex_rots); 915 + 949 916 // Device view information. 950 917 struct xrt_fov fovs[2]; 951 918 struct xrt_pose world_poses[2]; ··· 967 934 c->base.slot.fovs[0] = lvd->fov; 968 935 c->base.slot.fovs[1] = rvd->fov; 969 936 970 - do_gfx_mesh_and_proj(r, rr, rtr, layer, lvd, rvd); 937 + do_gfx_mesh_and_proj( // 938 + r, // 939 + rr, // 940 + rtr, // 941 + viewport_datas, // 942 + vertex_rots, // 943 + layer, // 944 + lvd, // 945 + rvd); // 971 946 972 947 } else if (fast_path && layer->data.type == XRT_LAYER_STEREO_PROJECTION_DEPTH) { 973 948 // Fast path. ··· 980 955 c->base.slot.fovs[0] = lvd->fov; 981 956 c->base.slot.fovs[1] = rvd->fov; 982 957 983 - do_gfx_mesh_and_proj(r, rr, rtr, layer, lvd, rvd); 958 + do_gfx_mesh_and_proj( // 959 + r, // 960 + rr, // 961 + rtr, // 962 + viewport_datas, // 963 + vertex_rots, // 964 + layer, // 965 + lvd, // 966 + rvd); // 984 967 985 968 } else if (fast_path) { 986 969 ··· 1015 998 {.x = 0, .y = 0, .w = 1, .h = 1}, 1016 999 }; 1017 1000 1018 - renderer_build_rendering(r, rr, rtr, src_samplers, src_image_views, src_norm_rects); 1001 + // We are passing in the same old and new poses. 1002 + do_gfx_mesh( // 1003 + r, // 1004 + rr, // 1005 + rtr, // 1006 + viewport_datas, // 1007 + vertex_rots, // 1008 + src_samplers, // 1009 + src_image_views, // 1010 + src_norm_rects); // 1019 1011 } 1020 1012 1021 1013 // Make the command buffer submittable.