[Bf-blender-cvs] [16cbd0dd078] cycles-x: Reduce kernel type boiler plate code in Cycles X

Sergey Sharybin noreply at git.blender.org
Thu Jun 10 18:11:20 CEST 2021


Commit: 16cbd0dd078e83692887810841b27e65a80cf3b5
Author: Sergey Sharybin
Date:   Thu Jun 10 17:24:15 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB16cbd0dd078e83692887810841b27e65a80cf3b5

Reduce kernel type boiler plate code in Cycles X

This is kind of a step back from an initial idea of making it easier
to find where kernel type is handled. It worked fine when number of
kernels was low. Now there are so many kernels and only so few of
them require special case that being explicit is actually in a way.

Now there corner cases are really handled as a corner cases, and there
is a note about where to look for those written next to the kernel
enum definition.

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

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

M	intern/cycles/device/cuda/queue.cpp
M	intern/cycles/device/optix/queue.cpp
M	intern/cycles/integrator/path_trace_work_gpu.cpp
M	intern/cycles/kernel/kernel_types.h

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

diff --git a/intern/cycles/device/cuda/queue.cpp b/intern/cycles/device/cuda/queue.cpp
index 7b00e918a1d..6b958b6f29e 100644
--- a/intern/cycles/device/cuda/queue.cpp
+++ b/intern/cycles/device/cuda/queue.cpp
@@ -98,43 +98,8 @@ bool CUDADeviceQueue::enqueue(DeviceKernel kernel, const int work_size, void *ar
       /* See parall_active_index.h for why this amount of shared memory is needed. */
       shared_mem_bytes = (num_threads_per_block + 1) * sizeof(int);
       break;
-    case DEVICE_KERNEL_INTEGRATOR_INIT_FROM_CAMERA:
-    case DEVICE_KERNEL_INTEGRATOR_INIT_FROM_BAKE:
-    case DEVICE_KERNEL_INTEGRATOR_INTERSECT_CLOSEST:
-    case DEVICE_KERNEL_INTEGRATOR_INTERSECT_SHADOW:
-    case DEVICE_KERNEL_INTEGRATOR_INTERSECT_SUBSURFACE:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_LIGHT:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_RAYTRACE:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_VOLUME:
-    case DEVICE_KERNEL_INTEGRATOR_MEGAKERNEL:
-    case DEVICE_KERNEL_INTEGRATOR_COMPACT_STATES:
-    case DEVICE_KERNEL_INTEGRATOR_RESET:
-    case DEVICE_KERNEL_SHADER_EVAL_DISPLACE:
-    case DEVICE_KERNEL_SHADER_EVAL_BACKGROUND:
-    case DEVICE_KERNEL_FILM_CONVERT_DEPTH_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_MIST_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SAMPLE_COUNT_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW3_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_DIVIDE_EVEN_COLOR_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT3_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW4_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_MOTION_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_CRYPTOMATTE_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_DENOISING_COLOR_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW_CATCHER_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW_CATCHER_MATTE_WITH_SHADOW_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT4_HALF_RGBA:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_CHECK:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_X:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_Y:
-    case DEVICE_KERNEL_FILTER_CONVERT_TO_RGB:
-    case DEVICE_KERNEL_FILTER_CONVERT_FROM_RGB:
-    case DEVICE_KERNEL_PREFIX_SUM:
-    case DEVICE_KERNEL_NUM:
+
+    default:
       break;
   }
 
diff --git a/intern/cycles/device/optix/queue.cpp b/intern/cycles/device/optix/queue.cpp
index dc99e1e0ed7..bd8cd7e4a75 100644
--- a/intern/cycles/device/optix/queue.cpp
+++ b/intern/cycles/device/optix/queue.cpp
@@ -104,46 +104,9 @@ bool OptiXDeviceQueue::enqueue(DeviceKernel kernel, const int work_size, void *a
       sbt_params.raygenRecord = sbt_data_ptr + PG_RGEN_INTERSECT_SUBSURFACE * sizeof(SbtRecord);
       break;
 
-    case DEVICE_KERNEL_INTEGRATOR_INIT_FROM_CAMERA:
-    case DEVICE_KERNEL_INTEGRATOR_INIT_FROM_BAKE:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_LIGHT:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_VOLUME:
-    case DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW:
-    case DEVICE_KERNEL_INTEGRATOR_MEGAKERNEL:
-    case DEVICE_KERNEL_INTEGRATOR_QUEUED_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_QUEUED_SHADOW_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_ACTIVE_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_TERMINATED_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_SORTED_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_COMPACT_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_COMPACT_STATES:
-    case DEVICE_KERNEL_INTEGRATOR_RESET:
-    case DEVICE_KERNEL_SHADER_EVAL_DISPLACE:
-    case DEVICE_KERNEL_SHADER_EVAL_BACKGROUND:
-    case DEVICE_KERNEL_FILM_CONVERT_DEPTH_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_MIST_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SAMPLE_COUNT_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW3_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_DIVIDE_EVEN_COLOR_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT3_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW4_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_MOTION_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_CRYPTOMATTE_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_DENOISING_COLOR_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW_CATCHER_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW_CATCHER_MATTE_WITH_SHADOW_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT4_HALF_RGBA:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_CHECK:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_X:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_Y:
-    case DEVICE_KERNEL_FILTER_CONVERT_TO_RGB:
-    case DEVICE_KERNEL_FILTER_CONVERT_FROM_RGB:
-    case DEVICE_KERNEL_PREFIX_SUM:
-    case DEVICE_KERNEL_NUM:
-      LOG(ERROR) << "Invalid kernel is attempted to be enqueued.";
+    default:
+      LOG(ERROR) << "Invalid kernel " << device_kernel_as_string(kernel)
+                 << " is attempted to be enqueued.";
       return false;
   }
 
diff --git a/intern/cycles/integrator/path_trace_work_gpu.cpp b/intern/cycles/integrator/path_trace_work_gpu.cpp
index a5ccfbc6ced..04231016da0 100644
--- a/intern/cycles/integrator/path_trace_work_gpu.cpp
+++ b/intern/cycles/integrator/path_trace_work_gpu.cpp
@@ -333,43 +333,11 @@ void PathTraceWorkGPU::enqueue_path_iteration(DeviceKernel kernel)
       queue_->enqueue(kernel, work_size, args);
       break;
     }
-    case DEVICE_KERNEL_INTEGRATOR_INIT_FROM_CAMERA:
-    case DEVICE_KERNEL_INTEGRATOR_INIT_FROM_BAKE:
-    case DEVICE_KERNEL_INTEGRATOR_MEGAKERNEL:
-    case DEVICE_KERNEL_INTEGRATOR_QUEUED_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_QUEUED_SHADOW_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_ACTIVE_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_TERMINATED_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_SORTED_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_COMPACT_PATHS_ARRAY:
-    case DEVICE_KERNEL_INTEGRATOR_COMPACT_STATES:
-    case DEVICE_KERNEL_INTEGRATOR_RESET:
-    case DEVICE_KERNEL_SHADER_EVAL_DISPLACE:
-    case DEVICE_KERNEL_SHADER_EVAL_BACKGROUND:
-    case DEVICE_KERNEL_FILM_CONVERT_DEPTH_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_MIST_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SAMPLE_COUNT_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW3_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_DIVIDE_EVEN_COLOR_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT3_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW4_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_MOTION_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_CRYPTOMATTE_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_DENOISING_COLOR_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW_CATCHER_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_SHADOW_CATCHER_MATTE_WITH_SHADOW_HALF_RGBA:
-    case DEVICE_KERNEL_FILM_CONVERT_FLOAT4_HALF_RGBA:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_CHECK:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_X:
-    case DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_Y:
-    case DEVICE_KERNEL_FILTER_CONVERT_TO_RGB:
-    case DEVICE_KERNEL_FILTER_CONVERT_FROM_RGB:
-    case DEVICE_KERNEL_PREFIX_SUM:
-    case DEVICE_KERNEL_NUM: {
-      LOG(FATAL) << "Unhandled kernel " << kernel << ", should never happen.";
+
+    default:
+      LOG(FATAL) << "Unhandled kernel " << device_kernel_as_string(kernel)
+                 << " used for path iteration, should never happen.";
       break;
-    }
   }
 }
 
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index cf5151daa58..8b8b2f371cf 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -1554,7 +1554,12 @@ static_assert_align(KernelShaderEvalInput, 16);
 
 /* Device kernels.
  *
- * Identifier for kernels that can be executed in device queues. */
+ * Identifier for kernels that can be executed in device queues.
+ *
+ * Some implementation details.
+ *
+ * If the kernel uses shared CUDA memory, `CUDADeviceQueue::enqueue` is to be modified.
+ * The path iteration kernels are handled in `PathTraceWorkGPU::enqueue_path_iteration`. */
 
 typedef enum DeviceKernel {
   DEVICE_KERNEL_INTEGRATOR_INIT_FROM_CAMERA = 0,



More information about the Bf-blender-cvs mailing list