[Bf-blender-cvs] [6953bae3afb] cycles-x: Cycles X: change requested device features to bitflags

Brecht Van Lommel noreply at git.blender.org
Wed Jul 14 17:50:46 CEST 2021


Commit: 6953bae3afb7ecef82cf8fac12ac43b6dcedf525
Author: Brecht Van Lommel
Date:   Tue Jul 13 19:21:33 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB6953bae3afb7ecef82cf8fac12ac43b6dcedf525

Cycles X: change requested device features to bitflags

So that they can be shared between host and device.

Differential Revision: https://developer.blender.org/D11914

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

M	intern/cycles/device/cpu/device_impl.cpp
M	intern/cycles/device/cpu/device_impl.h
M	intern/cycles/device/cuda/device_impl.cpp
M	intern/cycles/device/cuda/device_impl.h
M	intern/cycles/device/device.cpp
M	intern/cycles/device/device.h
M	intern/cycles/device/multi/device.cpp
M	intern/cycles/device/optix/device_impl.cpp
M	intern/cycles/device/optix/device_impl.h
M	intern/cycles/integrator/denoiser.cpp
M	intern/cycles/kernel/integrator/integrator_shade_background.h
M	intern/cycles/kernel/integrator/integrator_shade_shadow.h
M	intern/cycles/kernel/integrator/integrator_shade_surface.h
M	intern/cycles/kernel/kernel_bake.h
M	intern/cycles/kernel/kernel_emission.h
M	intern/cycles/kernel/kernel_shader.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/kernel/svm/svm.h
M	intern/cycles/kernel/svm/svm_attribute.h
M	intern/cycles/kernel/svm/svm_closure.h
M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/kernel/svm/svm_voronoi.h
M	intern/cycles/render/denoising.cpp
M	intern/cycles/render/graph.h
M	intern/cycles/render/nodes.h
M	intern/cycles/render/osl.cpp
M	intern/cycles/render/scene.cpp
M	intern/cycles/render/scene.h
M	intern/cycles/render/session.h
M	intern/cycles/render/shader.cpp
M	intern/cycles/render/shader.h
M	intern/cycles/render/svm.cpp

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

diff --git a/intern/cycles/device/cpu/device_impl.cpp b/intern/cycles/device/cpu/device_impl.cpp
index 0888acfbbd4..5b54d99303b 100644
--- a/intern/cycles/device/cpu/device_impl.cpp
+++ b/intern/cycles/device/cpu/device_impl.cpp
@@ -474,7 +474,7 @@ void *CPUDevice::get_cpu_osl_memory()
 #endif
 }
 
-bool CPUDevice::load_kernels(const DeviceRequestedFeatures & /*requested_features*/)
+bool CPUDevice::load_kernels(const uint /*kernel_features*/)
 {
   return true;
 }
diff --git a/intern/cycles/device/cpu/device_impl.h b/intern/cycles/device/cpu/device_impl.h
index 7d7949dbb93..7d222808652 100644
--- a/intern/cycles/device/cpu/device_impl.h
+++ b/intern/cycles/device/cpu/device_impl.h
@@ -93,7 +93,7 @@ class CPUDevice : public Device {
   virtual void *get_cpu_osl_memory() override;
 
  protected:
-  virtual bool load_kernels(const DeviceRequestedFeatures & /*requested_features*/) override;
+  virtual bool load_kernels(uint /*kernel_features*/) override;
 };
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/device/cuda/device_impl.cpp b/intern/cycles/device/cuda/device_impl.cpp
index c4f997cf6ec..5aa3b3e5014 100644
--- a/intern/cycles/device/cuda/device_impl.cpp
+++ b/intern/cycles/device/cuda/device_impl.cpp
@@ -147,7 +147,7 @@ CUDADevice::~CUDADevice()
   cuda_assert(cuCtxDestroy(cuContext));
 }
 
-bool CUDADevice::support_device(const DeviceRequestedFeatures & /*requested_features*/)
+bool CUDADevice::support_device(const uint /*kernel_features*/)
 {
   int major, minor;
   cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cuDevId);
@@ -220,8 +220,7 @@ bool CUDADevice::use_adaptive_compilation()
 /* Common NVCC flags which stays the same regardless of shading model,
  * kernel sources md5 and only depends on compiler or compilation settings.
  */
-string CUDADevice::compile_kernel_get_common_cflags(
-    const DeviceRequestedFeatures &requested_features)
+string CUDADevice::compile_kernel_get_common_cflags(const uint kernel_features)
 {
   const int machine = system_cpu_bits();
   const string source_path = path_get("source");
@@ -235,7 +234,7 @@ string CUDADevice::compile_kernel_get_common_cflags(
       machine,
       include_path.c_str());
   if (use_adaptive_compilation()) {
-    cflags += " " + requested_features.get_build_options();
+    cflags += " -D__KERNEL_FEATURES__=" + string_printf("%d", kernel_features);
   }
   const char *extra_cflags = getenv("CYCLES_CUDA_EXTRA_CFLAGS");
   if (extra_cflags) {
@@ -249,7 +248,7 @@ string CUDADevice::compile_kernel_get_common_cflags(
   return cflags;
 }
 
-string CUDADevice::compile_kernel(const DeviceRequestedFeatures &requested_features,
+string CUDADevice::compile_kernel(const uint kernel_features,
                                   const char *name,
                                   const char *base,
                                   bool force_ptx)
@@ -298,7 +297,7 @@ string CUDADevice::compile_kernel(const DeviceRequestedFeatures &requested_featu
   /* We include cflags into md5 so changing cuda toolkit or changing other
    * compiler command line arguments makes sure cubin gets re-built.
    */
-  string common_cflags = compile_kernel_get_common_cflags(requested_features);
+  string common_cflags = compile_kernel_get_common_cflags(kernel_features);
   const string kernel_md5 = util_md5_string(source_md5 + common_cflags);
 
   const char *const kernel_ext = force_ptx ? "ptx" : "cubin";
@@ -407,7 +406,7 @@ string CUDADevice::compile_kernel(const DeviceRequestedFeatures &requested_featu
   return cubin;
 }
 
-bool CUDADevice::load_kernels(const DeviceRequestedFeatures &requested_features)
+bool CUDADevice::load_kernels(const uint kernel_features)
 {
   /* TODO(sergey): Support kernels re-load for CUDA devices.
    *
@@ -424,12 +423,12 @@ bool CUDADevice::load_kernels(const DeviceRequestedFeatures &requested_features)
     return false;
 
   /* check if GPU is supported */
-  if (!support_device(requested_features))
+  if (!support_device(kernel_features))
     return false;
 
   /* get kernel */
   const char *kernel_name = "kernel";
-  string cubin = compile_kernel(requested_features, kernel_name);
+  string cubin = compile_kernel(kernel_features, kernel_name);
   if (cubin.empty())
     return false;
 
@@ -449,14 +448,14 @@ bool CUDADevice::load_kernels(const DeviceRequestedFeatures &requested_features)
         "Failed to load CUDA kernel from '%s' (%s)", cubin.c_str(), cuewErrorString(result)));
 
   if (result == CUDA_SUCCESS) {
-    reserve_local_memory(requested_features);
+    reserve_local_memory(kernel_features);
     kernels.load(this);
   }
 
   return (result == CUDA_SUCCESS);
 }
 
-void CUDADevice::reserve_local_memory(const DeviceRequestedFeatures & /* requested_features */)
+void CUDADevice::reserve_local_memory(const uint /* kernel_features */)
 {
   /* Together with CU_CTX_LMEM_RESIZE_TO_MAX, this reserves local memory
    * needed for kernel launches, so that we can reliably figure out when
@@ -471,7 +470,7 @@ void CUDADevice::reserve_local_memory(const DeviceRequestedFeatures & /* request
   /* Get kernel function. */
   CUfunction cuRender;
 
-  if (requested_features.use_baking) {
+  if (kernel_features & KERNEL_FEATURE_BAKING) {
     cuda_assert(cuModuleGetFunction(&cuRender, cuModule, "kernel_cuda_bake"));
   }
   else {
diff --git a/intern/cycles/device/cuda/device_impl.h b/intern/cycles/device/cuda/device_impl.h
index 9d80b4cc288..170e0e6ccfd 100644
--- a/intern/cycles/device/cuda/device_impl.h
+++ b/intern/cycles/device/cuda/device_impl.h
@@ -95,23 +95,22 @@ class CUDADevice : public Device {
 
   virtual ~CUDADevice();
 
-  bool support_device(const DeviceRequestedFeatures & /*requested_features*/);
+  bool support_device(const uint /*kernel_features*/);
 
   bool check_peer_access(Device *peer_device) override;
 
   bool use_adaptive_compilation();
 
-  virtual string compile_kernel_get_common_cflags(
-      const DeviceRequestedFeatures &requested_features);
+  virtual string compile_kernel_get_common_cflags(const uint kernel_features);
 
-  string compile_kernel(const DeviceRequestedFeatures &requested_features,
+  string compile_kernel(const uint kernel_features,
                         const char *name,
                         const char *base = "cuda",
                         bool force_ptx = false);
 
-  virtual bool load_kernels(const DeviceRequestedFeatures &requested_features) override;
+  virtual bool load_kernels(const uint kernel_features) override;
 
-  void reserve_local_memory(const DeviceRequestedFeatures &requested_features);
+  void reserve_local_memory(const uint kernel_features);
 
   void init_host_memory();
 
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp
index 2762c5746e7..6ccedcf54ef 100644
--- a/intern/cycles/device/device.cpp
+++ b/intern/cycles/device/device.cpp
@@ -49,35 +49,6 @@ vector<DeviceInfo> Device::optix_devices;
 vector<DeviceInfo> Device::cpu_devices;
 uint Device::devices_initialized_mask = 0;
 
-/* Device Requested Features */
-
-std::ostream &operator<<(std::ostream &os, const DeviceRequestedFeatures &requested_features)
-{
-  os << "Experimental features: " << (requested_features.experimental ? "On" : "Off") << std::endl;
-  /* TODO(sergey): Decode bitflag into list of names. */
-  os << "Nodes features: " << requested_features.nodes_features << std::endl;
-  os << "Use Hair: " << string_from_bool(requested_features.use_hair) << std::endl;
-  os << "Use Object Motion: " << string_from_bool(requested_features.use_object_motion)
-     << std::endl;
-  os << "Use Camera Motion: " << string_from_bool(requested_features.use_camera_motion)
-     << std::endl;
-  os << "Use Baking: " << string_from_bool(requested_features.use_baking) << std::endl;
-  os << "Use Subsurface: " << string_from_bool(requested_features.use_subsurface) << std::endl;
-  os << "Use Volume: " << string_from_bool(requested_features.use_volume) << std::endl;
-  os << "Use Patch Evaluation: " << string_from_bool(requested_features.use_patch_evaluation)
-     << std::endl;
-  os << "Use Transparent Shadows: " << string_from_bool(requested_features.use_transparent)
-     << std::endl;
-  os << "Use Principled BSDF: " << string_from_bool(requested_features.use_principled)
-     << std::endl;
-  os << "Use Denoising: " << string_from_bool(requested_features.use_denoising) << std::endl;
-  os << "Use Displacement: " << string_from_bool(requested_features.use_true_displacement)
-     << std::endl;
-  os << "Use Background Light: " << string_from_bool(requested_features.use_background_light)
-     << std::endl;
-  return os;
-}
-
 /* Device */
 
 Device::~Device() noexcept(false)
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 0ec319782c8..4413e02039d 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -104,145 +104,6 @@ class DeviceInfo {
   }
 };
 
-class DeviceRequestedFeatures {
- public:
-  /* Use experimental feature set. */
-  bool experimental;
-
-  /* Selective nodes compilation. */
-
-  /* Features bitfield indicating which features from the requested group
-   * will be compiled in. Nodes which corresponds to features which are not
-   * in this bitfield will be ignored even if they're in the requested group.
-   */
-  int nodes_features;
-
-  /* BVH/sampling kernel features. */
-  bool use_hair;
-  bool use_hair_thick;
-  bool use_object_motion;
-  bool use_camera_motion;
-
-  /* Denotes whether baking functionality is needed. */
-  bool use_baking;
-
-  /* Use subsurface scattering materials. */
-  bool use_subsurface;
-
-  /* Use volume materials. */
-  bool use_volume;
-
-  /* Use OpenSubdiv patch evaluation */
-  bool use_patch_evaluation;
-
-  /* Use Transparent shadows */
-  bool use_transparent;
-
-  /* Use shadow catcher. */
-  bool use_shadow_catcher;
-
-  /* Per-uber shader usage flags. */
-  bool use_principled;
-
-  /* Denoising features. */
-  bool use_denoising;
-
-  /* Use true displacement */
-  bool use_true_displacement;
-
-  /* Use background lights */
-  bool use_background_light;
-
-  /* Use path tracing kernels. */
-  bool use_path_tracing;
-
-  DeviceRequestedFeatures()
-  {
-    nodes_features = 0;
-    use

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list