[Bf-blender-cvs] [97f50c71b9e] blender-v2.83-release: Fix --debug-cycles printing CUDA devices twice

Brecht Van Lommel noreply at git.blender.org
Thu May 14 16:08:01 CEST 2020


Commit: 97f50c71b9ef3b2a4030b172d48e940f4aa5d87d
Author: Brecht Van Lommel
Date:   Thu May 14 04:54:45 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rB97f50c71b9ef3b2a4030b172d48e940f4aa5d87d

Fix --debug-cycles printing CUDA devices twice

Reuse the CUDA devices list for Optix device detection.

===================================================================

M	intern/cycles/device/device.cpp
M	intern/cycles/device/device_intern.h
M	intern/cycles/device/device_optix.cpp

===================================================================

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<DeviceInfo> 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<DeviceInfo> 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<DeviceInfo> &devices);
 void device_opencl_info(vector<DeviceInfo> &devices);
 void device_cuda_info(vector<DeviceInfo> &devices);
-void device_optix_info(vector<DeviceInfo> &devices);
+void device_optix_info(const vector<DeviceInfo> &cuda_devices, vector<DeviceInfo> &devices);
 void device_network_info(vector<DeviceInfo> &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<DeviceInfo> &devices)
+void device_optix_info(const vector<DeviceInfo> &cuda_devices, vector<DeviceInfo> &devices)
 {
   // Simply add all supported CUDA devices as OptiX devices again
-  vector<DeviceInfo> 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<DeviceInfo> &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)



More information about the Bf-blender-cvs mailing list