diff options
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h b/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h index 79e3a16ef19..d87e5f193ad 100644 --- a/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h +++ b/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h @@ -15,7 +15,20 @@ */ #ifdef WITH_NANOVDB +/* Data type to replace `double` used in the NanoVDB headers. Cycles don't need doubles, and is + * safer and more portable to never use double datatype on GPU. + * Use a special structure, so that the following is true: + * - No unnoticed implicit cast or mathermatical operations used on scalar 64bit type + * (which rules out trick like using `uint64_t` as a drop-in replacement for double). + * - Padding rules are matching exactly `double` + * (which rules out array of `uint8_t`). */ +typedef struct ccl_vdb_double_t { + uint64_t i; +} ccl_vdb_double_t; + +# define double ccl_vdb_double_t # include "nanovdb/CNanoVDB.h" +# undef double #endif /* For OpenCL we do manual lookup and interpolation. */ |