From f3fb3a9ecda8593d7ea656a57eb1e25160bf306d Mon Sep 17 00:00:00 2001 From: Alaska Date: Tue, 2 Jul 2024 16:02:53 +0200 Subject: [PATCH] Cycles: Update device entries more often This resolves two issues: 1. On macOS the GPU Compute device would be disabled by default unless the user opens user preferences. This is unexpected behaviour ever since 09ba1486f8224 2. Fixes incorrect automatic denoiser display settings and errors in terminal related to the denoising UI on macOS if the user hasn't opened user preferences. Pull Request: https://projects.blender.org/blender/blender/pulls/123911 --- intern/cycles/blender/addon/properties.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index c0c3a280447..ec1f60ff0fe 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -1648,14 +1648,18 @@ class CyclesPreferences(bpy.types.AddonPreferences): def get_num_gpu_devices(self): import _cycles compute_device_type = self.get_compute_device_type() - device_list = _cycles.available_devices(compute_device_type) + num = 0 - for device in device_list: - if device[1] != compute_device_type: - continue - for dev in self.devices: - if dev.use and dev.id == device[2]: - num += 1 + if compute_device_type != 'NONE': + device_list = _cycles.available_devices(compute_device_type) + # Device list might be out of sync if the user hasn't opened preference yet + self.update_device_entries(device_list) + for device in device_list: + if device[1] != compute_device_type: + continue + for dev in self.devices: + if dev.use and dev.id == device[2]: + num += 1 return num def has_multi_device(self): @@ -1680,7 +1684,10 @@ class CyclesPreferences(bpy.types.AddonPreferences): # We need non-CPU devices, used for rendering and supporting OIDN GPU denoising if compute_device_type != 'NONE': - for device in _cycles.available_devices(compute_device_type): + device_list = _cycles.available_devices(compute_device_type) + # Device list might be out of sync if the user hasn't opened preference yet + self.update_device_entries(device_list) + for device in device_list: device_type = device[1] if device_type == 'CPU': continue