The open source OpenXR runtime

Revert "c/main: clear the views when pose is invalid"

This reverts commit c7a5451db264fed72d9a781067cffaf9e8e77e35.

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

Bones 1cafc3a4 7eb1ea93

+28 -48
+28 -48
src/xrt/compositor/main/comp_renderer.c
··· 238 238 } 239 239 } 240 240 241 - static bool 241 + static void 242 242 calc_pose_data(struct comp_renderer *r, 243 243 enum comp_target_fov_source fov_source, 244 244 struct xrt_fov out_fovs[XRT_MAX_VIEWS], ··· 266 266 &head_relation, // out_head_relation 267 267 xdev_fovs, // out_fovs 268 268 xdev_poses); // out_poses 269 - 270 269 if (xret != XRT_SUCCESS) { 271 270 struct u_pp_sink_stack_only sink; 272 271 u_pp_delegate_t dg = u_pp_sink_stack_only_init(&sink); 273 272 u_pp_xrt_result(dg, xret); 274 273 U_LOG_E("xrt_device_get_view_poses failed: %s", sink.buffer); 275 - return false; 276 - } 277 - 278 - // Check if pose is valid (has valid position and orientation) 279 - bool pose_valid = (head_relation.relation_flags & XRT_SPACE_RELATION_POSITION_VALID_BIT) && 280 - (head_relation.relation_flags & XRT_SPACE_RELATION_ORIENTATION_VALID_BIT); 281 - 282 - if (!pose_valid) { 283 - return false; 274 + return; 284 275 } 285 276 286 277 struct xrt_fov dist_fov[XRT_MAX_VIEWS] = XRT_STRUCT_INIT; ··· 314 305 r->c->base.frame_params.fovs[i] = fov; 315 306 r->c->base.frame_params.poses[i] = result.pose; 316 307 } 317 - 318 - return true; 319 308 } 320 309 321 310 //! @pre comp_target_has_images(r->c->target) ··· 879 868 struct xrt_fov fovs[XRT_MAX_VIEWS]; 880 869 struct xrt_pose world_poses[XRT_MAX_VIEWS]; 881 870 struct xrt_pose eye_poses[XRT_MAX_VIEWS]; 882 - bool pose_valid = calc_pose_data( // 883 - r, // 884 - fov_source, // 885 - fovs, // 886 - world_poses, // 887 - eye_poses, // 888 - render->r->view_count); // 889 - 890 - // Skip layer rendering when pose is invalid 891 - if (!pose_valid) { 892 - layer_count = 0; 893 - } 871 + calc_pose_data( // 872 + r, // 873 + fov_source, // 874 + fovs, // 875 + world_poses, // 876 + eye_poses, // 877 + render->r->view_count); // 894 878 895 879 // Does everything. 896 880 chl_frame_state_gfx_default_pipeline( // ··· 942 926 struct xrt_fov fovs[XRT_MAX_VIEWS]; 943 927 struct xrt_pose world_poses[XRT_MAX_VIEWS]; 944 928 struct xrt_pose eye_poses[XRT_MAX_VIEWS]; 945 - bool pose_valid = calc_pose_data( // 946 - r, // 947 - fov_source, // 948 - fovs, // 949 - world_poses, // 950 - eye_poses, // 951 - render->r->view_count); // 929 + calc_pose_data( // 930 + r, // 931 + fov_source, // 932 + fovs, // 933 + world_poses, // 934 + eye_poses, // 935 + render->r->view_count); // 952 936 953 937 // Target Vulkan resources.. 954 938 VkImage target_image = r->c->target->images[r->acquired_buffer].handle; ··· 958 942 struct render_viewport_data target_viewport_datas[XRT_MAX_VIEWS]; 959 943 calc_viewport_data(r, target_viewport_datas, render->r->view_count); 960 944 961 - // Show clear shader when pose is invalid, otherwise normal rendering 962 - if (!pose_valid) { 963 - render_compute_clear(render, target_image, target_storage_view, target_viewport_datas); 964 - } else { 965 - chl_frame_state_cs_default_pipeline( // 966 - frame_state, // 967 - render, // 968 - layers, // 969 - layer_count, // 970 - world_poses, // 971 - eye_poses, // 972 - fovs, // 973 - target_image, // 974 - target_storage_view, // 975 - target_viewport_datas); // 976 - } 945 + // Does everything. 946 + chl_frame_state_cs_default_pipeline( // 947 + frame_state, // 948 + render, // 949 + layers, // 950 + layer_count, // 951 + world_poses, // 952 + eye_poses, // 953 + fovs, // 954 + target_image, // 955 + target_storage_view, // 956 + target_viewport_datas); // 977 957 978 958 // Everything is ready, submit to the queue. 979 959 ret = renderer_submit_queue(r, render->r->cmd, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT);