From 97f50c71b9ef3b2a4030b172d48e940f4aa5d87d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 14 May 2020 04:54:45 +0200 Subject: Fix --debug-cycles printing CUDA devices twice Reuse the CUDA devices list for Optix device detection. --- intern/cycles/device/device.cpp | 12 +++++++----- intern/cycles/device/device_intern.h | 2 +- intern/cycles/device/device_optix.cpp | 18 ++++++------------ 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp index dfbf57e8b88..bad156d40bf 100644 --- a/intern/cycles/device/device.cpp +++ b/intern/cycles/device/device.cpp @@ -494,16 +494,18 @@ vector Device::available_devices(uint mask) } #endif -#ifdef WITH_CUDA - if (mask & DEVICE_MASK_CUDA) { +#if defined(WITH_CUDA) || defined(WITH_OPTIX) + if (mask & (DEVICE_MASK_CUDA | DEVICE_MASK_OPTIX)) { if (!(devices_initialized_mask & DEVICE_MASK_CUDA)) { if (device_cuda_init()) { device_cuda_info(cuda_devices); } devices_initialized_mask |= DEVICE_MASK_CUDA; } - foreach (DeviceInfo &info, cuda_devices) { - devices.push_back(info); + if (mask & DEVICE_MASK_CUDA) { + foreach (DeviceInfo &info, cuda_devices) { + devices.push_back(info); + } } } #endif @@ -512,7 +514,7 @@ vector Device::available_devices(uint mask) if (mask & DEVICE_MASK_OPTIX) { if (!(devices_initialized_mask & DEVICE_MASK_OPTIX)) { if (device_optix_init()) { - device_optix_info(optix_devices); + device_optix_info(cuda_devices, optix_devices); } devices_initialized_mask |= DEVICE_MASK_OPTIX; } diff --git a/intern/cycles/device/device_intern.h b/intern/cycles/device/device_intern.h index 0c229ac24cf..94d63e8f333 100644 --- a/intern/cycles/device/device_intern.h +++ b/intern/cycles/device/device_intern.h @@ -45,7 +45,7 @@ Device *device_multi_create(DeviceInfo &info, Stats &stats, Profiler &profiler, void device_cpu_info(vector &devices); void device_opencl_info(vector &devices); void device_cuda_info(vector &devices); -void device_optix_info(vector &devices); +void device_optix_info(const vector &cuda_devices, vector &devices); void device_network_info(vector &devices); string device_cpu_capabilities(); diff --git a/intern/cycles/device/device_optix.cpp b/intern/cycles/device/device_optix.cpp index 37d6ae3d041..e839d852127 100644 --- a/intern/cycles/device/device_optix.cpp +++ b/intern/cycles/device/device_optix.cpp @@ -1534,14 +1534,11 @@ bool device_optix_init() return true; } -void device_optix_info(vector &devices) +void device_optix_info(const vector &cuda_devices, vector &devices) { // Simply add all supported CUDA devices as OptiX devices again - vector cuda_devices; - device_cuda_info(cuda_devices); - - for (auto it = cuda_devices.begin(); it != cuda_devices.end();) { - DeviceInfo &info = *it; + for (const DeviceInfo &cuda_info : cuda_devices) { + DeviceInfo info = cuda_info; assert(info.type == DEVICE_CUDA); info.type = DEVICE_OPTIX; info.id += "_OptiX"; @@ -1564,13 +1561,10 @@ void device_optix_info(vector &devices) } // Only add devices with RTX support - if (rtcore_version == 0 && !getenv("CYCLES_OPTIX_TEST")) - it = cuda_devices.erase(it); - else - ++it; + if (rtcore_version != 0 || getenv("CYCLES_OPTIX_TEST")) { + devices.push_back(info); + } } - - devices.insert(devices.end(), cuda_devices.begin(), cuda_devices.end()); } Device *device_optix_create(DeviceInfo &info, Stats &stats, Profiler &profiler, bool background) -- cgit v1.2.3