diff --git a/servers/rendering/renderer_rd/environment/sky.cpp b/servers/rendering/renderer_rd/environment/sky.cpp index 4abd30857ac..c6e2f9eae34 100644 --- a/servers/rendering/renderer_rd/environment/sky.cpp +++ b/servers/rendering/renderer_rd/environment/sky.cpp @@ -722,12 +722,6 @@ SkyRD::SkyRD() { roughness_layers = GLOBAL_GET("rendering/reflections/sky_reflections/roughness_layers"); sky_ggx_samples_quality = GLOBAL_GET("rendering/reflections/sky_reflections/ggx_samples"); sky_use_cubemap_array = GLOBAL_GET("rendering/reflections/sky_reflections/texture_array_reflections"); -#if defined(MACOS_ENABLED) && defined(__x86_64__) - if (OS::get_singleton()->get_current_rendering_driver_name() == "vulkan" && RenderingServer::get_singleton()->get_video_adapter_name().contains("Intel")) { - // Disable texture array reflections on macOS on Intel GPUs due to driver bugs. - sky_use_cubemap_array = false; - } -#endif } void SkyRD::init() { @@ -953,6 +947,15 @@ void SkyRD::set_texture_format(RD::DataFormat p_texture_format) { texture_format = p_texture_format; } +#if defined(MACOS_ENABLED) && defined(__x86_64__) +void SkyRD::check_cubemap_array() { + if (OS::get_singleton()->get_current_rendering_driver_name() == "vulkan" && RenderingServer::get_singleton()->get_video_adapter_name().contains("Intel")) { + // Disable texture array reflections on macOS on Intel GPUs due to driver bugs. + sky_use_cubemap_array = false; + } +} +#endif + SkyRD::~SkyRD() { // cleanup anything created in init... RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); diff --git a/servers/rendering/renderer_rd/environment/sky.h b/servers/rendering/renderer_rd/environment/sky.h index afc44925beb..5f71aae3143 100644 --- a/servers/rendering/renderer_rd/environment/sky.h +++ b/servers/rendering/renderer_rd/environment/sky.h @@ -280,6 +280,9 @@ public: uint32_t sky_ggx_samples_quality; bool sky_use_cubemap_array; +#if defined(MACOS_ENABLED) && defined(__x86_64__) + void check_cubemap_array(); +#endif Sky *dirty_sky_list = nullptr; mutable RID_Owner sky_owner; int roughness_layers; diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp index b84fd1ce640..f4247cfd31c 100644 --- a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp @@ -158,6 +158,11 @@ void RendererCompositorRD::initialize() { blit.sampler = RD::get_singleton()->sampler_create(RD::SamplerState()); } +#if defined(MACOS_ENABLED) && defined(__x86_64__) + if (scene) { + scene->get_sky()->check_cubemap_array(); + } +#endif } uint64_t RendererCompositorRD::frame = 1;