From f270f0a5bd202fe2c960fc6cf675b19ded96a317 Mon Sep 17 00:00:00 2001 From: Bastiaan Olij Date: Fri, 19 Dec 2025 15:43:34 +1100 Subject: [PATCH] Skip MSAA2D when OpenXR is used --- .../renderer_rd/storage_rd/texture_storage.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp b/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp index 083ade50c3b..3c079cc8b7a 100644 --- a/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp @@ -3493,12 +3493,16 @@ void TextureStorage::update_decal_buffer(const PagedArray &p_decals, const /* RENDER TARGET API */ RID TextureStorage::RenderTarget::get_framebuffer() { - // Note that if we're using an overridden color buffer, we're likely cycling through a texture chain. - // this is where our framebuffer cache comes in clutch.. + // We can't resolve into our overridden buffer as it won't be marked as a resolve buffer. + // This is only applicable when OpenXR is used and 2D rendering is skipped. - if (msaa != RS::VIEWPORT_MSAA_DISABLED) { - return FramebufferCacheRD::get_singleton()->get_cache_multiview(view_count, color_multisample, overridden.color.is_valid() ? overridden.color : color); + if (msaa != RS::VIEWPORT_MSAA_DISABLED && overridden.color.is_null()) { + // Render into our MSAA buffer and resolve into our color buffer. + return FramebufferCacheRD::get_singleton()->get_cache_multiview(view_count, color_multisample, color); } else { + // Note that if we're using an overridden color buffer, we're likely cycling through a texture chain. + // this is where our framebuffer cache comes in clutch.. + return FramebufferCacheRD::get_singleton()->get_cache_multiview(view_count, overridden.color.is_valid() ? overridden.color : color); } }