@@ -1345,8 +1345,6 @@ bool OpenXRAPI::create_main_swapchains(const Size2i &p_size) {
13451345 render_state.projection_views [i].subImage .imageRect .extent .height = render_state.main_swapchain_size .height ;
13461346
13471347 if (render_state.submit_depth_buffer && OpenXRCompositionLayerDepthExtension::get_singleton ()->is_available () && !render_state.depth_views .is_empty ()) {
1348- render_state.projection_views [i].next = &render_state.depth_views [i];
1349-
13501348 render_state.depth_views [i].subImage .swapchain = render_state.main_swapchains [OPENXR_SWAPCHAIN_DEPTH].get_swapchain ();
13511349 render_state.depth_views [i].subImage .imageArrayIndex = i;
13521350 render_state.depth_views [i].subImage .imageRect .offset .x = 0 ;
@@ -2672,17 +2670,21 @@ void OpenXRAPI::end_frame() {
26722670 render_state.projection_layer .viewCount = (uint32_t )render_state.projection_views .size ();
26732671 render_state.projection_layer .views = render_state.projection_views .ptr ();
26742672
2675- if (projection_views_extensions.size () > 0 ) {
2676- for (uint32_t v = 0 ; v < render_state.projection_views .size (); v++) {
2677- void *next_pointer = nullptr ;
2678- for (OpenXRExtensionWrapper *wrapper : projection_views_extensions) {
2679- void *np = wrapper->set_projection_views_and_get_next_pointer (v, next_pointer);
2680- if (np != nullptr ) {
2681- next_pointer = np;
2682- }
2673+ const bool submit_depth_views = render_state.submit_depth_buffer && OpenXRCompositionLayerDepthExtension::get_singleton ()->is_available () && !render_state.depth_views .is_empty ();
2674+ for (uint32_t v = 0 ; v < render_state.projection_views .size (); v++) {
2675+ void *next_pointer = nullptr ;
2676+ // Start next chain with depth_views if submitting the depth buffer since this is handled here as a special case currently.
2677+ // TODO: Depth composition logic should be moved out into OpenXRCompositionLayerDepthExtension and register as a projection views extension.
2678+ if (submit_depth_views) {
2679+ next_pointer = &render_state.depth_views [v];
2680+ }
2681+ for (OpenXRExtensionWrapper *wrapper : projection_views_extensions) {
2682+ void *np = wrapper->set_projection_views_and_get_next_pointer (v, next_pointer);
2683+ if (np != nullptr ) {
2684+ next_pointer = np;
26832685 }
2684- render_state.projection_views [v].next = next_pointer;
26852686 }
2687+ render_state.projection_views [v].next = next_pointer;
26862688 }
26872689
26882690 ordered_layers_list.push_back ({ (const XrCompositionLayerBaseHeader *)&render_state.projection_layer , 0 });
0 commit comments