1
0
Fork 0

Merge pull request #114697 from brycehutchings/bryceh_fix_depth_view_dropped

Fix OpenXR depth submission data dropped
This commit is contained in:
Rémi Verschelde 2026-01-09 22:57:07 +01:00
commit 2a67a76f92
No known key found for this signature in database
GPG Key ID: C3336907360768E1
1 changed files with 14 additions and 12 deletions

View File

@ -1345,8 +1345,6 @@ bool OpenXRAPI::create_main_swapchains(const Size2i &p_size) {
render_state.projection_views[i].subImage.imageRect.extent.height = render_state.main_swapchain_size.height;
if (render_state.submit_depth_buffer && OpenXRCompositionLayerDepthExtension::get_singleton()->is_available() && !render_state.depth_views.is_empty()) {
render_state.projection_views[i].next = &render_state.depth_views[i];
render_state.depth_views[i].subImage.swapchain = render_state.main_swapchains[OPENXR_SWAPCHAIN_DEPTH].get_swapchain();
render_state.depth_views[i].subImage.imageArrayIndex = i;
render_state.depth_views[i].subImage.imageRect.offset.x = 0;
@ -2672,17 +2670,21 @@ void OpenXRAPI::end_frame() {
render_state.projection_layer.viewCount = (uint32_t)render_state.projection_views.size();
render_state.projection_layer.views = render_state.projection_views.ptr();
if (projection_views_extensions.size() > 0) {
for (uint32_t v = 0; v < render_state.projection_views.size(); v++) {
void *next_pointer = nullptr;
for (OpenXRExtensionWrapper *wrapper : projection_views_extensions) {
void *np = wrapper->set_projection_views_and_get_next_pointer(v, next_pointer);
if (np != nullptr) {
next_pointer = np;
}
}
render_state.projection_views[v].next = next_pointer;
const bool submit_depth_views = render_state.submit_depth_buffer && OpenXRCompositionLayerDepthExtension::get_singleton()->is_available() && !render_state.depth_views.is_empty();
for (uint32_t v = 0; v < render_state.projection_views.size(); v++) {
void *next_pointer = nullptr;
// Start next chain with depth_views if submitting the depth buffer since this is handled here as a special case currently.
// TODO: Depth composition logic should be moved out into OpenXRCompositionLayerDepthExtension and register as a projection views extension.
if (submit_depth_views) {
next_pointer = &render_state.depth_views[v];
}
for (OpenXRExtensionWrapper *wrapper : projection_views_extensions) {
void *np = wrapper->set_projection_views_and_get_next_pointer(v, next_pointer);
if (np != nullptr) {
next_pointer = np;
}
}
render_state.projection_views[v].next = next_pointer;
}
ordered_layers_list.push_back({ (const XrCompositionLayerBaseHeader *)&render_state.projection_layer, 0 });