Merge pull request #105424 from bruvzg/intel_mac_rd_crash

Fix RendererRD crash on start on Intel Macs.
This commit is contained in:
Thaddeus Crews 2025-04-21 08:24:22 -05:00
commit 93c13f8399
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
3 changed files with 17 additions and 6 deletions

View file

@ -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();

View file

@ -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, true> sky_owner;
int roughness_layers;

View file

@ -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;