From f9c76d026df09df679ad0b4b60ec22cba15d7333 Mon Sep 17 00:00:00 2001 From: David Snopek Date: Thu, 21 Aug 2025 15:03:14 -0500 Subject: [PATCH] OpenXR: Fix errors reported by XrApiLayer_core_validation --- .../openxr_fb_foveation_extension.cpp | 2 ++ .../platform/openxr_metal_extension.mm | 4 +-- .../platform/openxr_opengl_extension.cpp | 4 +-- .../platform/openxr_vulkan_extension.cpp | 4 +-- modules/openxr/openxr_api.cpp | 35 +++++++++++++++---- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/modules/openxr/extensions/openxr_fb_foveation_extension.cpp b/modules/openxr/extensions/openxr_fb_foveation_extension.cpp index fe110f5d373..26a1ec38578 100644 --- a/modules/openxr/extensions/openxr_fb_foveation_extension.cpp +++ b/modules/openxr/extensions/openxr_fb_foveation_extension.cpp @@ -182,6 +182,8 @@ void OpenXRFBFoveationExtension::_update_profile() { XrSwapchainStateFoveationFB foveation_update_state; foveation_update_state.type = XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB; + foveation_update_state.next = nullptr; + foveation_update_state.flags = 0; foveation_update_state.profile = foveation_profile; result = fov_ext->swapchain_update_state_ext->xrUpdateSwapchainFB(main_color_swapchain, (XrSwapchainStateBaseHeaderFB *)&foveation_update_state); diff --git a/modules/openxr/extensions/platform/openxr_metal_extension.mm b/modules/openxr/extensions/platform/openxr_metal_extension.mm index af3e3cfcc51..b5ed48a1745 100644 --- a/modules/openxr/extensions/platform/openxr_metal_extension.mm +++ b/modules/openxr/extensions/platform/openxr_metal_extension.mm @@ -155,7 +155,7 @@ bool OpenXRMetalExtension::get_swapchain_image_data(XrSwapchain p_swapchain, int uint32_t swapchain_length; XrResult result = xrEnumerateSwapchainImages(p_swapchain, 0, &swapchain_length, nullptr); if (XR_FAILED(result)) { - print_line("OpenXR: Failed to get swapchaim image count [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); + print_line("OpenXR: Failed to get swapchain image count [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); return false; } @@ -169,7 +169,7 @@ bool OpenXRMetalExtension::get_swapchain_image_data(XrSwapchain p_swapchain, int result = xrEnumerateSwapchainImages(p_swapchain, swapchain_length, &swapchain_length, (XrSwapchainImageBaseHeader *)images.ptr()); if (XR_FAILED(result)) { - print_line("OpenXR: Failed to get swapchaim images [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); + print_line("OpenXR: Failed to get swapchain images [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); return false; } diff --git a/modules/openxr/extensions/platform/openxr_opengl_extension.cpp b/modules/openxr/extensions/platform/openxr_opengl_extension.cpp index 08b3afb0192..c0e56cf59a8 100644 --- a/modules/openxr/extensions/platform/openxr_opengl_extension.cpp +++ b/modules/openxr/extensions/platform/openxr_opengl_extension.cpp @@ -228,7 +228,7 @@ bool OpenXROpenGLExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in uint32_t swapchain_length; XrResult result = xrEnumerateSwapchainImages(p_swapchain, 0, &swapchain_length, nullptr); if (XR_FAILED(result)) { - print_line("OpenXR: Failed to get swapchaim image count [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); + print_line("OpenXR: Failed to get swapchain image count [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); return false; } @@ -252,7 +252,7 @@ bool OpenXROpenGLExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in result = xrEnumerateSwapchainImages(p_swapchain, swapchain_length, &swapchain_length, (XrSwapchainImageBaseHeader *)images.ptr()); if (XR_FAILED(result)) { - print_line("OpenXR: Failed to get swapchaim images [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); + print_line("OpenXR: Failed to get swapchain images [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); return false; } diff --git a/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp b/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp index bec4940568a..395adc13ed8 100644 --- a/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp +++ b/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp @@ -251,7 +251,7 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in uint32_t swapchain_length; XrResult result = xrEnumerateSwapchainImages(p_swapchain, 0, &swapchain_length, nullptr); if (XR_FAILED(result)) { - print_line("OpenXR: Failed to get swapchaim image count [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); + print_line("OpenXR: Failed to get swapchain image count [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); return false; } @@ -279,7 +279,7 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in result = xrEnumerateSwapchainImages(p_swapchain, swapchain_length, &swapchain_length, (XrSwapchainImageBaseHeader *)images.ptr()); if (XR_FAILED(result)) { - print_line("OpenXR: Failed to get swapchaim images [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); + print_line("OpenXR: Failed to get swapchain images [", OpenXRAPI::get_singleton()->get_error_string(result), "]"); return false; } diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp index de29d30ede8..a7623ac74bd 100644 --- a/modules/openxr/openxr_api.cpp +++ b/modules/openxr/openxr_api.cpp @@ -1281,11 +1281,6 @@ bool OpenXRAPI::create_main_swapchains(Size2i p_size) { } for (uint32_t i = 0; i < render_state.views.size(); i++) { - render_state.views[i].type = XR_TYPE_VIEW; - render_state.views[i].next = nullptr; - - render_state.projection_views[i].type = XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW; - render_state.projection_views[i].next = nullptr; render_state.projection_views[i].subImage.swapchain = render_state.main_swapchains[OPENXR_SWAPCHAIN_COLOR].get_swapchain(); render_state.projection_views[i].subImage.imageArrayIndex = i; render_state.projection_views[i].subImage.imageRect.offset.x = 0; @@ -1296,8 +1291,6 @@ bool OpenXRAPI::create_main_swapchains(Size2i p_size) { 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].type = XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR; - render_state.depth_views[i].next = nullptr; 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; @@ -2116,8 +2109,36 @@ void OpenXRAPI::_allocate_view_buffers(uint32_t p_view_count, bool p_submit_dept openxr_api->render_state.views.resize(p_view_count); openxr_api->render_state.projection_views.resize(p_view_count); + for (uint32_t i = 0; i < p_view_count; i++) { + openxr_api->render_state.views[i] = { + XR_TYPE_VIEW, // type + nullptr, // next + {}, // pose + {}, // fov + }; + openxr_api->render_state.projection_views[i] = { + XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW, // type + nullptr, // next + {}, // pose + {}, // fov + {}, // subImage + }; + } + if (p_submit_depth_buffer && OpenXRCompositionLayerDepthExtension::get_singleton()->is_available()) { openxr_api->render_state.depth_views.resize(p_view_count); + + for (uint32_t i = 0; i < p_view_count; i++) { + openxr_api->render_state.depth_views[i] = { + XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR, // type + nullptr, // next + {}, // subImage + 0.0, // minDepth + 0.0, // maxDepth + 0.0, // nearZ + 0.0, // farZ + }; + } } }