From c8b5982d0fae213096b48ad9ce5ef394bc2fd806 Mon Sep 17 00:00:00 2001 From: Stuart Carnie Date: Fri, 8 Aug 2025 06:15:54 +1000 Subject: [PATCH] Metal: Ensure correct output texture format selection --- .../storage_rd/render_scene_buffers_rd.cpp | 11 ++++++++++- servers/rendering/renderer_viewport.cpp | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp b/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp index 63aa4760e19..a822212a4fd 100644 --- a/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp +++ b/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp @@ -255,11 +255,20 @@ void RenderSceneBuffersRD::ensure_mfx(RendererRD::MFXSpatialEffect *p_effect) { if (mfx_spatial_context) { return; } + + RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); + RenderingDevice *rd = RD::get_singleton(); + + // Determine the output format of the render target. + RID dest = texture_storage->render_target_get_rd_texture(render_target); + RD::TextureFormat tf = rd->texture_get_format(dest); + RD::DataFormat output_format = tf.format; + RendererRD::MFXSpatialEffect::CreateParams params = { .input_size = internal_size, .output_size = target_size, .input_format = base_data_format, - .output_format = RD::DATA_FORMAT_R8G8B8A8_UNORM, + .output_format = output_format, }; mfx_spatial_context = p_effect->create_context(params); diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp index f87c90071fe..820b4c9dd0e 100644 --- a/servers/rendering/renderer_viewport.cpp +++ b/servers/rendering/renderer_viewport.cpp @@ -1352,6 +1352,7 @@ void RendererViewport::viewport_set_use_hdr_2d(RID p_viewport, bool p_use_hdr_2d } viewport->use_hdr_2d = p_use_hdr_2d; RSG::texture_storage->render_target_set_use_hdr(viewport->render_target, p_use_hdr_2d); + _configure_3d_render_buffers(viewport); } bool RendererViewport::viewport_is_using_hdr_2d(RID p_viewport) const {