Cycles: enable NanoVDB by default #81454

Closed
opened 2020-10-05 15:11:01 +02:00 by Brecht Van Lommel · 32 comments

For 2.92 we want to enable NanoVDB by default in Cycles. The implementation is available 3df90de6c2, but disabled by default.

  • Windows precompiled libraries (rBL62507)
  • macOS precompiled libraries (rBL62506)
  • Linux precompiled libraries (rBL62505)
  • Linux install deps (716b7a60df)
  • Enable by default in CMake (bd6bfba}

Potential features to add:

  • Half float support for grids to reduce memory usage further (a8c81ffa83)
For 2.92 we want to enable NanoVDB by default in Cycles. The implementation is available 3df90de6c2, but disabled by default. - [x] Windows precompiled libraries (rBL62507) - [x] macOS precompiled libraries (rBL62506) - [x] Linux precompiled libraries (rBL62505) - [x] Linux install deps (716b7a60df) - [x] Enable by default in CMake (bd6bfba} Potential features to add: - [x] Half float support for grids to reduce memory usage further (a8c81ffa83)
Author
Owner

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Author
Owner

Added subscribers: @brecht, @pmoursnv, @Stefan_Werner

Added subscribers: @brecht, @pmoursnv, @Stefan_Werner

Added subscriber: @SteffenD

Added subscriber: @SteffenD
Author
Owner

Added subscribers: @sebbas, @LazyDodo, @mont29, @Sergey

Added subscribers: @sebbas, @LazyDodo, @mont29, @Sergey
Author
Owner

Dear platform maintainers, can you add the NanoVDB library?

It's enabled by default in the CMake deps builder. This will install as a header only library in a new nanovdb folder, the openvdb library does not need to be updated.

@Sergey @sebbas @LazyDodo @mont29

Dear platform maintainers, can you add the NanoVDB library? It's enabled by default in the CMake deps builder. This will install as a header only library in a new `nanovdb` folder, the `openvdb` library does not need to be updated. @Sergey @sebbas @LazyDodo @mont29
Member

Added the libs, however enabling it leads to a single failed test

{F9142033, width=100%}

Added the libs, however enabling it leads to a single failed test {[F9142033](https://archive.blender.org/developer/F9142033/image.png), width=100%}

Added subscriber: @juang3d

Added subscriber: @juang3d

This comment was removed by @juang3d

*This comment was removed by @juang3d*

With Linux I get a redeclaration error as soon as I enable NanoVDB, without it Blender builds fine, with it I get this:

image.png

Just with CUDA/Optix BTW, without CUDA/Optix it builds fine with NanoVDB

With Linux I get a redeclaration error as soon as I enable NanoVDB, without it Blender builds fine, with it I get this: ![image.png](https://archive.blender.org/developer/F9142652/image.png) Just with CUDA/Optix BTW, without CUDA/Optix it builds fine with NanoVDB
Member

That's because NanoVDB includes stdint.h, but Cycles already declared those types in kernel_compat_cuda/optix.h (for NVRTC compatibility I guess). NanoVDB does the same when __CUDACC_RTC__ is defined, so I guess we could define that before including NanoVDB even in the NVCC case. Or instead too include stdint.h in the compat headers when __CUDACC_RTC__ is not defined instead of typedefing (probably the cleaner solution). @brecht Thoughts?
I'm thinking of this in the compat headers:

#ifdef __CUDACC_RTC__
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
- else
- include <stdint.h>
#endinf
typedef unsigned short half;
typedef unsigned long long CUtexObject;
That's because NanoVDB includes stdint.h, but Cycles already declared those types in kernel_compat_cuda/optix.h (for NVRTC compatibility I guess). NanoVDB does the same when `__CUDACC_RTC__` is defined, so I guess we could define that before including NanoVDB even in the NVCC case. Or instead too include stdint.h in the compat headers when `__CUDACC_RTC__` is not defined instead of typedefing (probably the cleaner solution). @brecht Thoughts? I'm thinking of this in the compat headers: ``` #ifdef __CUDACC_RTC__ typedef unsigned int uint32_t; typedef unsigned long long uint64_t; - else - include <stdint.h> #endinf typedef unsigned short half; typedef unsigned long long CUtexObject; ```
Author
Owner

@pmoursnv, the suggested code looks good to me. The typedefs are indeed there for NVRTC.

@pmoursnv, the suggested code looks good to me. The typedefs are indeed there for NVRTC.

Sorry for my lack of knowledge here, but I'm not sure if there is a typo here or if it's correct.

Meaning I'm not sure if its #ifdef or #ifndef, looking at other parts of the code I see several #ifndef in the kernel_compat files, also in the same way I'm not sure if it's #endif or #endinf.

Again this can be my lack of knowledge, I'm tyring to apply this code to kernel_compat_cuda.h and kernel_compat_optix.h, not sure if it's needed somewhere else too.

P.S.: ok, just changing the #endinf wiht an #endif solved it, I assume it was a typo in the code, and there is no need for #ifndef instead of #ifdef :)

Sorry for my lack of knowledge here, but I'm not sure if there is a typo here or if it's correct. Meaning I'm not sure if its #ifdef or #ifndef, looking at other parts of the code I see several #ifndef in the kernel_compat files, also in the same way I'm not sure if it's #endif or #endinf. Again this can be my lack of knowledge, I'm tyring to apply this code to kernel_compat_cuda.h and kernel_compat_optix.h, not sure if it's needed somewhere else too. P.S.: ok, just changing the #endinf wiht an #endif solved it, I assume it was a typo in the code, and there is no need for #ifndef instead of #ifdef :)

This issue was referenced by cf7343a355

This issue was referenced by cf7343a35559c7fec2047c3e5d7ef4dd7c1e64a5
Member

That was a typo and was supposed to be #endif, yes =P.

That was a typo and was supposed to be `#endif`, yes =P.

I detected the same as @LazyDodo the volume is shifted to the right of the picture, I compared a simple scene from 2.91 with 2.92

@pmoursnv not a problem, I was unsure if #endinf was something that I didn't knew, since there was #ifndef in the code, and I didn't knew that either :)

Thanks!

I detected the same as @LazyDodo the volume is shifted to the right of the picture, I compared a simple scene from 2.91 with 2.92 @pmoursnv not a problem, I was unsure if #endinf was something that I didn't knew, since there was #ifndef in the code, and I didn't knew that either :) Thanks!

I have a question regarding the implementation of this feature, I've noticed that the memory usage is greatly reduce, vastly I would say, so it's awesome, but there is a difference in render time, in some test my time went from 19 seconds to 25 seconds, making it slower, @brecht do you think that could be interesting to locate a check box in performance tab to enable / disable this?

I have a question regarding the implementation of this feature, I've noticed that the memory usage is greatly reduce, vastly I would say, so it's awesome, but there is a difference in render time, in some test my time went from 19 seconds to 25 seconds, making it slower, @brecht do you think that could be interesting to locate a check box in performance tab to enable / disable this?
Author
Owner

I don't think we should add an option. I don't want to maintain two different code paths for the same thing long term, and also for the GPU kernels isn't not great to increase in size that much.

Better focus would be to improve e.g. volume stepping performance by relying on NanoVDB traversal in addition to sampling.

I also imagine for that for CPU rendering there is still room for optimization in NanoVDB.

I don't think we should add an option. I don't want to maintain two different code paths for the same thing long term, and also for the GPU kernels isn't not great to increase in size that much. Better focus would be to improve e.g. volume stepping performance by relying on NanoVDB traversal in addition to sampling. I also imagine for that for CPU rendering there is still room for optimization in NanoVDB.

Ok, understood, if you think there is room for improvement then there is no reason to keep somethign older for the user :)

Ok, understood, if you think there is room for improvement then there is no reason to keep somethign older for the user :)

This issue was referenced by fd9124ed6b

This issue was referenced by fd9124ed6b35fc3701ec3a4a9980c6eda5324fac

OK, so after almost a day of work I managed to get install_deps to build this (why can't they use default standard way of doing things???), but when trying to build Blender I get lots of those errors:

FAILED: intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o 
/usr/lib/ccache/g++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_CHRONO_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_LOCALE_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK -DBOOST_WAVE_DYN_LINK -DCCL_NAMESPACE_BEGIN="namespace ccl {" -DCCL_NAMESPACE_END=} -DCYCLES_GFLAGS_NAMESPACE=gflags -DDEBUG -DEMBREE_STATIC_LIB -DGOOGLE_GLOG_DLL_DECL="" -DOSL_STATIC_BUILD -DOSL_STATIC_LIBRARY -DWITH_BLENDER_GUARDEDALLOC -DWITH_CYCLES_LOGGING -DWITH_EMBREE -DWITH_KERNEL_AVX -DWITH_KERNEL_AVX2 -DWITH_KERNEL_SSE2 -DWITH_KERNEL_SSE3 -DWITH_KERNEL_SSE41 -DWITH_NANOVDB -DWITH_OPENGL -DWITH_OPENSUBDIV -DWITH_OSL -DWITH_SYSTEM_PUGIXML -D_DEBUG -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D__LITTLE_ENDIAN__ -D__MMX__ -D__SSE2__ -D__SSE__ -I/home/bastien/blender/src/intern/cycles/../atomic -I/home/bastien/blender/src/intern/cycles/kernel/.. -isystem /opt/lib/osl/include -isystem /opt/lib/embree/include -isystem /opt/lib/nanovdb -isystem /opt/lib/osd/include -isystem /home/bastien/blender/src/extern/glog/include -isystem /home/bastien/blender/src/extern/gflags/src -isystem /usr/include/OpenImageIO -isystem /usr/include/OpenEXR -Wredundant-decls -Wall -Wno-invalid-offsetof -Wno-sign-compare -Wlogical-op -Winit-self -Wmissing-include-dirs -Wno-div-by-zero -Wtype-limits -Werror=return-type -Wno-char-subscripts -Wno-unknown-pragmas -Wpointer-arith  -Wwrite-strings -Wundef -Wformat-signedness -Wrestrict -Wuninitialized -Wundef -Wmissing-declarations -Wimplicit-fallthrough=5  -fuse-ld=gold -fuse-ld=lld -std=c++17   -msse -pipe -fPIC -funsigned-char -fno-strict-aliasing -msse2 -fmacro-prefix-map="/home/bastien/blender/src/"="" -fmacro-prefix-map="/home/bastien/blender/build_master_debug/"="" -fno-trapping-math -fno-math-errno -fno-signed-zeros -fno-signaling-nans -fno-rounding-math -mfpmath=sse -Werror=float-conversion -Werror=double-promotion -Wno-error=unused-macros -g -fsanitize=address -fsanitize=bool -fsanitize=bounds -fsanitize=enum -fsanitize=float-cast-overflow -fsanitize=float-divide-by-zero -fsanitize=nonnull-attribute -fsanitize=returns-nonnull-attribute -fsanitize=signed-integer-overflow -fsanitize=undefined -fsanitize=vla-bound -fno-sanitize=alignment  -fsanitize=leak -fsanitize=object-size -fno-sanitize=vptr -fno-trapping-math -fno-math-errno -fno-signed-zeros -fno-signaling-nans -fno-rounding-math -mfpmath=sse -msse -msse2 -msse3 -mssse3 -MD -MT intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o -MF intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o.d -o intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o -c /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h: In instantiation of ‘static ccl::float4 ccl::{anonymous}::NanoVDBInterpolator<T>::interp_3d(const TextureInfo&, float, float, float, ccl::InterpolationType) [with T = float; ccl::TextureInfo = ccl::TextureInfo; ccl::InterpolationType = ccl::InterpolationType]’:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:568:42:   required from here
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:500:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::NanoRoot<float>&)’
  500 |         return read(nanovdb::SampleFromVoxels<ReadAccessorT, 0, false>(root)(xyz));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 0, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’
  120 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                 ^~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:52: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’
  120 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                                  ~~~~~~~~~~~~~~~~~~^~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&)’
  112 | class SampleFromVoxels<TreeOrAccT, 0, false>
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&)’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&’
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:502:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::NanoRoot<float>&)’
  502 |         return read(nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 1, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’
  297 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {}
      |                 ^~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:52: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’
  297 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {}
      |                                  ~~~~~~~~~~~~~~~~~~^~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&)’
  288 | class SampleFromVoxels<TreeOrAccT, 1, false> : public TrilinearSampler<TreeOrAccT>
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&)’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&’
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:504:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::NanoRoot<float>&)’
  504 |         return read(nanovdb::SampleFromVoxels<ReadAccessorT, 3, false>(root)(xyz));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 3, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’
  958 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                 ^~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:52: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’
  958 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                                  ~~~~~~~~~~~~~~~~~~^~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&)’
  950 | class SampleFromVoxels<TreeOrAccT, 3, false> : public TricubicSampler<TreeOrAccT>
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&)’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&’
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h: In instantiation of ‘static ccl::float4 ccl::{anonymous}::NanoVDBInterpolator<T>::interp_3d(const TextureInfo&, float, float, float, ccl::InterpolationType) [with T = nanovdb::Vec3<float>; ccl::TextureInfo = ccl::TextureInfo; ccl::InterpolationType = ccl::InterpolationType]’:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:570:51:   required from here
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:500:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::NanoRoot<nanovdb::Vec3<float> >&)’
  500 |         return read(nanovdb::SampleFromVoxels<ReadAccessorT, 0, false>(root)(xyz));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 0, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’
  120 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                 ^~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:52: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’
  120 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                                  ~~~~~~~~~~~~~~~~~~^~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&)’
  112 | class SampleFromVoxels<TreeOrAccT, 0, false>
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&)’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&’
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:502:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::NanoRoot<nanovdb::Vec3<float> >&)’
  502 |         return read(nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 1, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’
  297 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {}
      |                 ^~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:52: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’
  297 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {}
      |                                  ~~~~~~~~~~~~~~~~~~^~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&)’
  288 | class SampleFromVoxels<TreeOrAccT, 1, false> : public TrilinearSampler<TreeOrAccT>
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&)’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&’
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:504:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::NanoRoot<nanovdb::Vec3<float> >&)’
  504 |         return read(nanovdb::SampleFromVoxels<ReadAccessorT, 3, false>(root)(xyz));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40,
                 from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41,
                 from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38:
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 3, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’
  958 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                 ^~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:52: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’
  958 |     __hostdev__ SampleFromVoxels(const TreeOrAccT& acc)
      |                                  ~~~~~~~~~~~~~~~~~~^~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&)’
  950 | class SampleFromVoxels<TreeOrAccT, 3, false> : public TricubicSampler<TreeOrAccT>
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&)’
/opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note:   no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&’

Any insight?

OK, so after almost a day of work I managed to get `install_deps` to build this (why can't they use default standard way of doing things???), but when trying to build Blender I get lots of those errors: ```lines=20 FAILED: intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o /usr/lib/ccache/g++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_CHRONO_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_LOCALE_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK -DBOOST_WAVE_DYN_LINK -DCCL_NAMESPACE_BEGIN="namespace ccl {" -DCCL_NAMESPACE_END=} -DCYCLES_GFLAGS_NAMESPACE=gflags -DDEBUG -DEMBREE_STATIC_LIB -DGOOGLE_GLOG_DLL_DECL="" -DOSL_STATIC_BUILD -DOSL_STATIC_LIBRARY -DWITH_BLENDER_GUARDEDALLOC -DWITH_CYCLES_LOGGING -DWITH_EMBREE -DWITH_KERNEL_AVX -DWITH_KERNEL_AVX2 -DWITH_KERNEL_SSE2 -DWITH_KERNEL_SSE3 -DWITH_KERNEL_SSE41 -DWITH_NANOVDB -DWITH_OPENGL -DWITH_OPENSUBDIV -DWITH_OSL -DWITH_SYSTEM_PUGIXML -D_DEBUG -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D__LITTLE_ENDIAN__ -D__MMX__ -D__SSE2__ -D__SSE__ -I/home/bastien/blender/src/intern/cycles/../atomic -I/home/bastien/blender/src/intern/cycles/kernel/.. -isystem /opt/lib/osl/include -isystem /opt/lib/embree/include -isystem /opt/lib/nanovdb -isystem /opt/lib/osd/include -isystem /home/bastien/blender/src/extern/glog/include -isystem /home/bastien/blender/src/extern/gflags/src -isystem /usr/include/OpenImageIO -isystem /usr/include/OpenEXR -Wredundant-decls -Wall -Wno-invalid-offsetof -Wno-sign-compare -Wlogical-op -Winit-self -Wmissing-include-dirs -Wno-div-by-zero -Wtype-limits -Werror=return-type -Wno-char-subscripts -Wno-unknown-pragmas -Wpointer-arith -Wwrite-strings -Wundef -Wformat-signedness -Wrestrict -Wuninitialized -Wundef -Wmissing-declarations -Wimplicit-fallthrough=5 -fuse-ld=gold -fuse-ld=lld -std=c++17 -msse -pipe -fPIC -funsigned-char -fno-strict-aliasing -msse2 -fmacro-prefix-map="/home/bastien/blender/src/"="" -fmacro-prefix-map="/home/bastien/blender/build_master_debug/"="" -fno-trapping-math -fno-math-errno -fno-signed-zeros -fno-signaling-nans -fno-rounding-math -mfpmath=sse -Werror=float-conversion -Werror=double-promotion -Wno-error=unused-macros -g -fsanitize=address -fsanitize=bool -fsanitize=bounds -fsanitize=enum -fsanitize=float-cast-overflow -fsanitize=float-divide-by-zero -fsanitize=nonnull-attribute -fsanitize=returns-nonnull-attribute -fsanitize=signed-integer-overflow -fsanitize=undefined -fsanitize=vla-bound -fno-sanitize=alignment -fsanitize=leak -fsanitize=object-size -fno-sanitize=vptr -fno-trapping-math -fno-math-errno -fno-signed-zeros -fno-signaling-nans -fno-rounding-math -mfpmath=sse -msse -msse2 -msse3 -mssse3 -MD -MT intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o -MF intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o.d -o intern/cycles/kernel/CMakeFiles/cycles_kernel.dir/kernels/cpu/kernel_split_sse3.cpp.o -c /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h: In instantiation of ‘static ccl::float4 ccl::{anonymous}::NanoVDBInterpolator<T>::interp_3d(const TextureInfo&, float, float, float, ccl::InterpolationType) [with T = float; ccl::TextureInfo = ccl::TextureInfo; ccl::InterpolationType = ccl::InterpolationType]’: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:568:42: required from here /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:500:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::NanoRoot<float>&)’ 500 | return read(nanovdb::SampleFromVoxels<ReadAccessorT, 0, false>(root)(xyz)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 0, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’ 120 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ^~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:52: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’ 120 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ~~~~~~~~~~~~~~~~~~^~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&)’ 112 | class SampleFromVoxels<TreeOrAccT, 0, false> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&)’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&’ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:502:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::NanoRoot<float>&)’ 502 | return read(nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 1, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’ 297 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {} | ^~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:52: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’ 297 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {} | ~~~~~~~~~~~~~~~~~~^~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&)’ 288 | class SampleFromVoxels<TreeOrAccT, 1, false> : public TrilinearSampler<TreeOrAccT> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&)’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&’ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:504:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::NanoRoot<float>&)’ 504 | return read(nanovdb::SampleFromVoxels<ReadAccessorT, 3, false>(root)(xyz)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 3, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’ 958 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ^~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:52: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’ 958 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ~~~~~~~~~~~~~~~~~~^~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&)’ 950 | class SampleFromVoxels<TreeOrAccT, 3, false> : public TricubicSampler<TreeOrAccT> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&)’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<float>’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<float, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&’ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h: In instantiation of ‘static ccl::float4 ccl::{anonymous}::NanoVDBInterpolator<T>::interp_3d(const TextureInfo&, float, float, float, ccl::InterpolationType) [with T = nanovdb::Vec3<float>; ccl::TextureInfo = ccl::TextureInfo; ccl::InterpolationType = ccl::InterpolationType]’: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:570:51: required from here /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:500:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::NanoRoot<nanovdb::Vec3<float> >&)’ 500 | return read(nanovdb::SampleFromVoxels<ReadAccessorT, 0, false>(root)(xyz)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 0, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’ 120 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ^~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:120:52: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’ 120 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ~~~~~~~~~~~~~~~~~~^~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&)’ 112 | class SampleFromVoxels<TreeOrAccT, 0, false> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&)’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:112:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 0, false>&&’ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:502:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::NanoRoot<nanovdb::Vec3<float> >&)’ 502 | return read(nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 1, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’ 297 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {} | ^~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:297:52: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’ 297 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) : BaseT(acc) {} | ~~~~~~~~~~~~~~~~~~^~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&)’ 288 | class SampleFromVoxels<TreeOrAccT, 1, false> : public TrilinearSampler<TreeOrAccT> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&)’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:288:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 1, false>&&’ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:504:30: error: no matching function for call to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::NanoRoot<nanovdb::Vec3<float> >&)’ 504 | return read(nanovdb::SampleFromVoxels<ReadAccessorT, 3, false>(root)(xyz)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_image.h:22, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/split/kernel_split_common.h:40, from /home/bastien/blender/src/intern/cycles/kernel/../kernel/kernels/cpu/kernel_cpu_impl.h:41, from /home/bastien/blender/src/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp:38: /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:17: note: candidate: ‘nanovdb::SampleFromVoxels<TreeOrAccT, 3, false>::SampleFromVoxels(const TreeOrAccT&) [with TreeOrAccT = nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>]’ 958 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ^~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:958:52: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>&’ 958 | __hostdev__ SampleFromVoxels(const TreeOrAccT& acc) | ~~~~~~~~~~~~~~~~~~^~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&)’ 950 | class SampleFromVoxels<TreeOrAccT, 3, false> : public TricubicSampler<TreeOrAccT> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘const nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: candidate: ‘constexpr nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>::SampleFromVoxels(nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&)’ /opt/lib/nanovdb/nanovdb/util/SampleFromVoxels.h:950:7: note: no known conversion for argument 1 from ‘nanovdb::NanoRoot<nanovdb::Vec3<float> >’ {aka ‘const nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >’} to ‘nanovdb::SampleFromVoxels<nanovdb::ReadAccessor<nanovdb::RootNode<nanovdb::InternalNode<nanovdb::InternalNode<nanovdb::LeafNode<nanovdb::Vec3<float>, nanovdb::Coord, nanovdb::Mask, 3>, 4>, 5> >, -1, -1, -1>, 3, false>&&’ ``` Any insight?

This issue was referenced by blender/cycles@69aa84faa8

This issue was referenced by blender/cycles@69aa84faa84e32b1a1d8f5a5e2bc7c99f8d2bd53

This issue was referenced by 118e31a0a9

This issue was referenced by 118e31a0a995ae4e8845376215d9c35017a8f781
Member

The regression test suite completes to 100% with NanoVDB enabled now for me. There were some changes that probably fix the above errors too.

The regression test suite completes to 100% with NanoVDB enabled now for me. There were some changes that probably fix the above errors too.

I wonder what was the urgency to add this lib? Current building/install process for it is completely unconventional to say the least, and it's extremely unstable...

BTW, next time please specify exact revision needed, since their current HEAD is already 100% incompatible with our own code (and the expected e62f7a0bf1e27397223c61ddeaaf57edf111b77f we use with Blender). Had to dig into cmake files to find that, lost a lot of time on this piece of unfinished software. :(

I wonder what was the urgency to add this lib? Current building/install process for it is completely unconventional to say the least, and it's extremely unstable... BTW, next time please specify exact revision needed, since their current `HEAD` is already 100% incompatible with our own code (and the expected `e62f7a0bf1e27397223c61ddeaaf57edf111b77f` we use with Blender). Had to dig into cmake files to find that, lost a lot of time on this piece of unfinished software. :(

And I really don't think such experimental lib should be enabled by default, this is call for all kind of issues imho. Would recommend waiting for it to be properly integrated in OpenVDB at least, i.e. be in their master, and be installable in a decent, standard way,

And I really don't think such experimental lib should be enabled by default, this is call for all kind of issues imho. Would recommend waiting for it to be **properly** integrated in OpenVDB at least, i.e. be in their master, and be installable in a decent, standard way,
Member

I'll admit, the whole, "oh just build this random git hash, but leave the original openvdb we have alone, and just copy these headers, it'll work" is somewhat unorthodox, but given @brecht signed off on it I didn't question it.

I'll admit, the whole, "oh just build this random git hash, but leave the original openvdb we have alone, and just copy these headers, it'll work" is somewhat unorthodox, but given @brecht signed off on it I didn't question it.
Member

NanoVDB is standalone and header-only, so I don't really see the problem. Being able to just copy the headers without invoking a build system is the whole point of that. And it's only part of the official OpenVDB repository for simplicity in finding it, but really wouldn't have to be. Handling it as a separate library in Blender makes it easier to update when NanoVDB changes, without having to update OpenVDB too, which may have wider implications. Building random Git hashes in Blender isn't new either, the same is done for some other dependencies (CLEW, CUEW, HIDAPI, ...). Could we have waited for it to land in some versioned OpenVDB release? Probably. But that is a) likely months away (the OpenVDB release cycles isn't all that quick) and b) would still throw up the question of whether we really want to update the entire OpenVDB library (based on the VFX reference platform requirements etc.). Keeping it separate avoids all that.
I'm sorry there have been API changes since the last revision was chosen, which I had missed, that prolonged your time investment. That was unfortunate and my mistake for not keeping track of upstream changes. But there is no need to call NanoVDB unfinished for it. We are mostly using only the data structure in Cycles, which is stable (see bottom of https://github.com/AcademySoftwareFoundation/openvdb/blob/feature/nanovdb/nanovdb/docs/FAQ.md). There are API improvements still happening around that, but that doesn't change how it works at its core.

NanoVDB is standalone and header-only, so I don't really see the problem. Being able to just copy the headers without invoking a build system is the whole point of that. And it's only part of the official OpenVDB repository for simplicity in finding it, but really wouldn't have to be. Handling it as a separate library in Blender makes it easier to update when NanoVDB changes, without having to update OpenVDB too, which may have wider implications. Building random Git hashes in Blender isn't new either, the same is done for some other dependencies (CLEW, CUEW, HIDAPI, ...). Could we have waited for it to land in some versioned OpenVDB release? Probably. But that is a) likely months away (the OpenVDB release cycles isn't all that quick) and b) would still throw up the question of whether we really want to update the entire OpenVDB library (based on the VFX reference platform requirements etc.). Keeping it separate avoids all that. I'm sorry there have been API changes since the last revision was chosen, which I had missed, that prolonged your time investment. That was unfortunate and my mistake for not keeping track of upstream changes. But there is no need to call NanoVDB unfinished for it. We are mostly using only the data structure in Cycles, which is stable (see bottom of https://github.com/AcademySoftwareFoundation/openvdb/blob/feature/nanovdb/nanovdb/docs/FAQ.md). There are API improvements still happening around that, but that doesn't change how it works at its core.

This issue was referenced by bd6bfba64d

This issue was referenced by bd6bfba64dad2e14cab2c8372ba0f3ad39b93cdc
Author
Owner

It's an important feature for volume rendering, that goes along with the volume object. It's unfortunate that this complicates building with install_deps.sh, but to me it's all the more reason to simplify that system to become something to use only system packages, and not bother trying to match Blender release builds by building libraries from source.

It's an important feature for volume rendering, that goes along with the volume object. It's unfortunate that this complicates building with `install_deps.sh`, but to me it's all the more reason to simplify that system to become something to use only system packages, and not bother trying to match Blender release builds by building libraries from source.

This issue was referenced by a63208823c

This issue was referenced by a63208823c8426b76270393f9217d3cf3ef66d0b
Author
Owner

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'
Brecht Van Lommel self-assigned this 2020-11-11 17:49:21 +01:00

This issue was referenced by a8c81ffa83

This issue was referenced by a8c81ffa83122661b80e842ddd641e366b3d5c04
Thomas Dinges added this to the 2.90 milestone 2023-02-08 16:25:39 +01:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
7 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#81454
No description provided.