diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2019-03-13 14:31:48 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2019-03-15 18:18:21 +0300 |
commit | 2f6257fd7fe305e3b226a8b505eb614bbeaf762a (patch) | |
tree | fba47f34d5bc5f10d50be92e5dd8b14fa9ecc9a9 /intern/cycles/kernel | |
parent | 62377431114411c50ededadf98fda284ec4061c5 (diff) |
Cycles/OpenCL: Compile Kernels During Scene Update
The main goals of this change is faster starting when using foreground
rendering.
This patch will build kernels in parallel to the update process of
the scene. When these optimized kernels are not available (yet) an AO
kernel will be used.
These AO kernels are fast to compile (3-7 seconds) and can be
reused by all scenes. When the final kernels become available we
will switch to these kernels.
In background mode the AO kernels will not be used.
Some kernels are being used during Scene update (displace, background
light). When these kernels are being used the process can halt until
these become available.
Reviewed By: brecht, #cycles
Maniphest Tasks: T61752
Differential Revision: https://developer.blender.org/D4428
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r-- | intern/cycles/kernel/kernel_types.h | 90 |
1 files changed, 50 insertions, 40 deletions
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index caa0057d997..281d9a25047 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -121,52 +121,62 @@ CCL_NAMESPACE_BEGIN #ifdef __KERNEL_OPENCL__ -/* keep __KERNEL_ADV_SHADING__ in sync with opencl_kernel_use_advanced_shading! */ +# if defined(__KERNEL_OPENCL_AMD__) || defined(__KERNEL_OPENCL_INTEL_CPU__) +# define __CL_USE_NATIVE__ +# endif -# ifdef __KERNEL_OPENCL_NVIDIA__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ -# define __SUBSURFACE__ -# define __PRINCIPLED__ -# define __VOLUME__ -# define __VOLUME_SCATTER__ -# define __SHADOW_RECORD_ALL__ -# define __CMJ__ -# define __BRANCHED_PATH__ -# endif /* __KERNEL_OPENCL_NVIDIA__ */ +/* Preview kernel is used as a small kernel when the optimized kernel is still being compiled. */ +# ifdef __KERNEL_OPENCL_PREVIEW__ +# define __AO__ +# define __PASSES__ +# define __HAIR__ +# else + +/* keep __KERNEL_ADV_SHADING__ in sync with opencl_kernel_use_advanced_shading! */ -# ifdef __KERNEL_OPENCL_APPLE__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ -# define __PRINCIPLED__ -# define __CMJ__ +# ifdef __KERNEL_OPENCL_NVIDIA__ +# define __KERNEL_SHADING__ +# define __KERNEL_ADV_SHADING__ +# define __SUBSURFACE__ +# define __PRINCIPLED__ +# define __VOLUME__ +# define __VOLUME_SCATTER__ +# define __SHADOW_RECORD_ALL__ +# define __CMJ__ +# define __BRANCHED_PATH__ +# endif /* __KERNEL_OPENCL_NVIDIA__ */ + +# ifdef __KERNEL_OPENCL_APPLE__ +# define __KERNEL_SHADING__ +# define __KERNEL_ADV_SHADING__ +# define __PRINCIPLED__ +# define __CMJ__ /* TODO(sergey): Currently experimental section is ignored here, * this is because megakernel in device_opencl does not support * custom cflags depending on the scene features. */ -# endif /* __KERNEL_OPENCL_APPLE__ */ - -# ifdef __KERNEL_OPENCL_AMD__ -# define __CL_USE_NATIVE__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ -# define __SUBSURFACE__ -# define __PRINCIPLED__ -# define __VOLUME__ -# define __VOLUME_SCATTER__ -# define __SHADOW_RECORD_ALL__ -# define __CMJ__ -# define __BRANCHED_PATH__ -# endif /* __KERNEL_OPENCL_AMD__ */ - -# ifdef __KERNEL_OPENCL_INTEL_CPU__ -# define __CL_USE_NATIVE__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ -# define __PRINCIPLED__ -# define __CMJ__ -# endif /* __KERNEL_OPENCL_INTEL_CPU__ */ - +# endif /* __KERNEL_OPENCL_APPLE__ */ + +# ifdef __KERNEL_OPENCL_AMD__ +# define __KERNEL_SHADING__ +# define __KERNEL_ADV_SHADING__ +# define __SUBSURFACE__ +# define __PRINCIPLED__ +# define __VOLUME__ +# define __VOLUME_SCATTER__ +# define __SHADOW_RECORD_ALL__ +# define __CMJ__ +# define __BRANCHED_PATH__ +# endif /* __KERNEL_OPENCL_AMD__ */ + +# ifdef __KERNEL_OPENCL_INTEL_CPU__ +# define __KERNEL_SHADING__ +# define __KERNEL_ADV_SHADING__ +# define __PRINCIPLED__ +# define __CMJ__ +# endif /* __KERNEL_OPENCL_INTEL_CPU__ */ + +# endif /* KERNEL_OPENCL_PREVIEW__ */ #endif /* __KERNEL_OPENCL__ */ /* Kernel features */ |