[Bf-blender-cvs] [be421bc7752] cycles-x: Cleanup: make shader raytracing a node feature flag

Brecht Van Lommel noreply at git.blender.org
Thu May 27 19:15:40 CEST 2021


Commit: be421bc77523e982fdbad283893c6c78e0fb721f
Author: Brecht Van Lommel
Date:   Thu May 27 11:38:52 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBbe421bc77523e982fdbad283893c6c78e0fb721f

Cleanup: make shader raytracing a node feature flag

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

M	intern/cycles/device/device.h
M	intern/cycles/device/opencl/device_impl.cpp
M	intern/cycles/device/optix/device_impl.cpp
M	intern/cycles/kernel/CMakeLists.txt
M	intern/cycles/kernel/device/cuda/kernel.cu
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_types.h
M	intern/cycles/kernel/svm/svm.h
M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/render/graph.h
M	intern/cycles/render/nodes.h
M	intern/cycles/render/osl.cpp
M	intern/cycles/render/shader.cpp
M	intern/cycles/render/shader.h
M	intern/cycles/render/svm.cpp

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

diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 68393c67fb7..180e33aebf3 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -157,9 +157,6 @@ class DeviceRequestedFeatures {
   /* Denoising features. */
   bool use_denoising;
 
-  /* Use raytracing in shaders. */
-  bool use_shader_raytrace;
-
   /* Use true displacement */
   bool use_true_displacement;
 
@@ -186,7 +183,6 @@ class DeviceRequestedFeatures {
     use_shadow_catcher = false;
     use_principled = false;
     use_denoising = false;
-    use_shader_raytrace = false;
     use_true_displacement = false;
     use_background_light = false;
     use_path_tracing = true;
@@ -208,7 +204,6 @@ class DeviceRequestedFeatures {
              use_shadow_catcher == requested_features.use_shadow_catcher &&
              use_principled == requested_features.use_principled &&
              use_denoising == requested_features.use_denoising &&
-             use_shader_raytrace == requested_features.use_shader_raytrace &&
              use_true_displacement == requested_features.use_true_displacement &&
              use_background_light == requested_features.use_background_light);
   }
@@ -257,9 +252,6 @@ class DeviceRequestedFeatures {
     if (!use_denoising) {
       build_options += " -D__NO_DENOISING__";
     }
-    if (!use_shader_raytrace) {
-      build_options += " -D__NO_SHADER_RAYTRACE__";
-    }
     return build_options;
   }
 };
diff --git a/intern/cycles/device/opencl/device_impl.cpp b/intern/cycles/device/opencl/device_impl.cpp
index da0d1abf8dc..8672fbb9297 100644
--- a/intern/cycles/device/opencl/device_impl.cpp
+++ b/intern/cycles/device/opencl/device_impl.cpp
@@ -158,10 +158,9 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures &requested_
     /* NOTE: currently possible to use surface nodes like `Hair Info`, `Bump` node.
      * Perhaps we should remove them in UI as it does not make any sense when
      * rendering background. */
-    features.nodes_features &= ~NODE_FEATURE_VOLUME;
+    features.nodes_features &= ~(NODE_FEATURE_VOLUME | NODE_FEATURE_RAYTRACE);
     features.use_subsurface = false;
     features.use_volume = false;
-    features.use_shader_raytrace = false;
     features.use_patch_evaluation = false;
     features.use_integrator_branched = false;
     return features.get_build_options();
@@ -197,7 +196,6 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures &requested_
     if (opencl_program_name == "split_bundle") {
       features.max_nodes_group = 0;
       features.nodes_features = 0;
-      features.use_shader_raytrace = false;
     }
 
     /* No specific settings, just add the regular ones */
diff --git a/intern/cycles/device/optix/device_impl.cpp b/intern/cycles/device/optix/device_impl.cpp
index 03bed23423c..1ffd3223675 100644
--- a/intern/cycles/device/optix/device_impl.cpp
+++ b/intern/cycles/device/optix/device_impl.cpp
@@ -162,12 +162,9 @@ string OptiXDevice::compile_kernel_get_common_cflags(
   }
 
   /* Specialization for shader raytracing. */
-  if (requested_features.use_shader_raytrace) {
+  if (requested_features.nodes_features & NODE_FEATURE_RAYTRACE) {
     common_cflags += " --keep-device-functions";
   }
-  else {
-    common_cflags += " -D __NO_SHADER_RAYTRACE__";
-  }
 
   return common_cflags;
 }
@@ -192,7 +189,7 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
   }
 
   /* TODO: Shader raytracing requires OptiX to overwrite the shading kernels too! */
-  if (requested_features.use_shader_raytrace) {
+  if (requested_features.nodes_features & NODE_FEATURE_RAYTRACE) {
     set_error("AO and Bevel shader nodes are not currently supported with OptiX");
     return false;
   }
@@ -269,9 +266,10 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
   }
 
   { /* Load and compile PTX module with OptiX kernels. */
-    string ptx_data, ptx_filename = path_get(requested_features.use_shader_raytrace ?
-                                                 "lib/kernel_optix_shader_raytrace.ptx" :
-                                                 "lib/kernel_optix.ptx");
+    string ptx_data,
+        ptx_filename = path_get((requested_features.nodes_features & NODE_FEATURE_RAYTRACE) ?
+                                    "lib/kernel_optix_shader_raytrace.ptx" :
+                                    "lib/kernel_optix.ptx");
     if (use_adaptive_compilation() || path_file_size(ptx_filename) == -1) {
       if (!getenv("OPTIX_ROOT_DIR")) {
         set_error(
@@ -375,7 +373,8 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
 #  endif
   }
 
-  if (requested_features.use_subsurface || requested_features.use_shader_raytrace) {
+  if (requested_features.use_subsurface ||
+      (requested_features.nodes_features & NODE_FEATURE_RAYTRACE)) {
     /* Add hit group for local intersections. */
     group_descs[PG_HITL].kind = OPTIX_PROGRAM_GROUP_KIND_HITGROUP;
     group_descs[PG_HITL].hitgroup.moduleAH = optix_module;
@@ -383,7 +382,7 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
   }
 
   /* Shader raytracing replaces some functions with direct callables. */
-  if (requested_features.use_shader_raytrace) {
+  if (requested_features.nodes_features & NODE_FEATURE_RAYTRACE) {
     group_descs[PG_CALL + 0].kind = OPTIX_PROGRAM_GROUP_KIND_CALLABLES;
     group_descs[PG_CALL + 0].callables.moduleDC = optix_module;
     group_descs[PG_CALL + 0].callables.entryFunctionNameDC = "__direct_callable__svm_eval_nodes";
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt
index 9a46e4bff19..756f943eed0 100644
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@ -547,7 +547,7 @@ if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES)
     delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${output}" ${CYCLES_INSTALL_PATH}/lib)
   endmacro()
 
-  CYCLES_OPTIX_KERNEL_ADD(kernel_optix "-D __NO_SHADER_RAYTRACE__")
+  CYCLES_OPTIX_KERNEL_ADD(kernel_optix "")
   CYCLES_OPTIX_KERNEL_ADD(kernel_optix_shader_raytrace "--keep-device-functions")
 
   add_custom_target(cycles_kernel_optix ALL DEPENDS ${optix_ptx})
diff --git a/intern/cycles/kernel/device/cuda/kernel.cu b/intern/cycles/kernel/device/cuda/kernel.cu
index 0ce3c1abd71..098c1f12cc9 100644
--- a/intern/cycles/kernel/device/cuda/kernel.cu
+++ b/intern/cycles/kernel/device/cuda/kernel.cu
@@ -207,7 +207,8 @@ extern "C" __global__ void CUDA_LAUNCH_BOUNDS(CUDA_KERNEL_BLOCK_NUM_THREADS,
 
   if (global_index < work_size) {
     const int path_index = (path_index_array) ? path_index_array[global_index] : global_index;
-    integrator_shade_surface(NULL, path_index, render_buffer);
+    integrator_shade_surface<NODE_FEATURE_MASK_SURFACE & ~NODE_FEATURE_RAYTRACE>(
+        NULL, path_index, render_buffer);
   }
 }
 
diff --git a/intern/cycles/kernel/integrator/integrator_shade_background.h b/intern/cycles/kernel/integrator/integrator_shade_background.h
index 93a61dbe962..4b81fdc347f 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_background.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_background.h
@@ -59,7 +59,7 @@ ccl_device_noinline_cpu float3 integrator_eval_background_shader(
                                  INTEGRATOR_STATE(ray, P),
                                  INTEGRATOR_STATE(ray, D),
                                  INTEGRATOR_STATE(ray, time));
-    shader_eval_surface<NODE_FEATURE_MASK_LIGHT>(
+    shader_eval_surface<NODE_FEATURE_MASK_SURFACE_LIGHT>(
         INTEGRATOR_STATE_PASS, emission_sd, render_buffer, path_flag | PATH_RAY_EMISSION);
 
     L = shader_background_eval(emission_sd);
diff --git a/intern/cycles/kernel/integrator/integrator_shade_shadow.h b/intern/cycles/kernel/integrator/integrator_shade_shadow.h
index 34d1a84314d..e8aad52a509 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_shadow.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_shadow.h
@@ -41,7 +41,7 @@ ccl_device_inline float3 integrate_transparent_shadow_shader_eval(INTEGRATOR_STA
 
   /* Evaluate shader. */
   if (!(shadow_sd->flag & SD_HAS_ONLY_VOLUME)) {
-    shader_eval_surface<NODE_FEATURE_MASK_SURFACE>(
+    shader_eval_surface<NODE_FEATURE_MASK_SURFACE_SHADOW>(
         INTEGRATOR_STATE_PASS, shadow_sd, NULL, PATH_RAY_SHADOW);
   }
 
diff --git a/intern/cycles/kernel/integrator/integrator_shade_surface.h b/intern/cycles/kernel/integrator/integrator_shade_surface.h
index cdce6236524..f0ec4474241 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_surface.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_surface.h
@@ -284,6 +284,7 @@ ccl_device bool integrate_surface_bounce(INTEGRATOR_STATE_ARGS,
   }
 }
 
+template<uint node_feature_mask>
 ccl_device_inline bool integrate_surface(INTEGRATOR_STATE_ARGS,
                                          ccl_global float *ccl_restrict render_buffer)
 
@@ -306,8 +307,7 @@ ccl_device_inline bool integrate_surface(INTEGRATOR_STATE_ARGS,
 #endif
   {
     /* Evaluate shader. */
-    shader_eval_surface<NODE_FEATURE_MASK_SURFACE>(
-        INTEGRATOR_STATE_PASS, &sd, render_buffer, path_flag);
+    shader_eval_surface<node_feature_mask>(INTEGRATOR_STATE_PASS, &sd, render_buffer, path_flag);
   }
 
 #ifdef __SUBSURFACE__
@@ -379,10 +379,11 @@ ccl_device_inline bool integrate_surface(INTEGRATOR_STATE_ARGS,
   return integrate_surface_bounce(INTEGRATOR_STATE_PASS, &sd, &rng_state);
 }
 
+template<uint node_feature_mask = NODE_FEATURE_MASK_SURFACE>
 ccl_device void integrator_shade_surface(INTEGRATOR_STATE_ARGS,
                                          ccl_global float *ccl_restrict render_buffer)
 {
-  if (integrate_surface(INTEGRATOR_STATE_PASS, render_buffer)) {
+  if (integrate_surface<node_feature_mask>(INTEGRATOR_STATE_PASS, render_buffer)) {
     if (INTEGRATOR_STATE(path, flag) & PATH_RAY_SUBSURFACE) {
       INTEGRATOR_PATH_NEXT(DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE,
                            DEVICE_KERNEL_INTEGRATOR_INTERSECT_SUBSURFACE);
diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h
index

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list