Skip to content

Commit 2a67a76

Browse files
committed
Merge pull request #114697 from brycehutchings/bryceh_fix_depth_view_dropped
Fix OpenXR depth submission data dropped
2 parents 728c159 + 14b6ca1 commit 2a67a76

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

modules/openxr/openxr_api.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)