Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/weekly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ jobs:
- { name: 'half', image: '2026', build: 'Release', components: 'core,python,bin,view,render,test', cmake: '-DUSE_BLOSC=OFF -DUSE_IMATH_HALF=ON' }
- { name: 'sse', image: '2026', build: 'Release', components: 'core,python,bin,view,render,test', cmake: '-DOPENVDB_SIMD=SSE42' }
- { name: 'avx', image: '2026', build: 'Release', components: 'core,python,bin,view,render,test', cmake: '-DOPENVDB_SIMD=AVX' }
- { name: 'simd', image: '2026', build: 'Release', components: 'core,python,bin,view,render,test', cmake: '-DOPENVDB_SIMD=AVX -DUSE_STD_SIMD=ON' }
- { name: 'simd-fallback', image: '2026', build: 'Release', components: 'core,python,bin,view,render,test', cmake: '-DOPENVDB_SIMD=AVX -DUSE_STD_SIMD=OFF' }
- { name: 'pygrid', image: '2026', build: 'Release', components: 'core,python,bin,view,render,test', cmake: '-DOPENVDB_PYTHON_WRAP_ALL_GRID_TYPES=ON' }
- { name: 'asan', image: '2026', build: 'asan', components: 'core,test', cmake: '-DDISABLE_DEPENDENCY_VERSION_CHECKS=ON -DNANOVDB_USE_OPENVDB=ON -DOPENVDB_AX_STATIC=OFF -DOPENVDB_CORE_STATIC=OFF -DUSE_BLOSC=OFF' } # We never called blosc_destroy(), so disable blosc to silence these errors
- { name: 'ubsan', image: '2026', build: 'ubsan', components: 'core,test', cmake: '-DDISABLE_DEPENDENCY_VERSION_CHECKS=ON -DCMAKE_CXX_FLAGS="-Wno-deprecated-declarations" ' }
Expand Down
12 changes: 12 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,13 @@ required.]=] ${USE_EXR})
option(USE_PNG "Use PNG while building openvdb components." OFF)
option(USE_AX "Use OpenVDB AX while building openvdb components." ${OPENVDB_BUILD_AX})
option(USE_NANOVDB "Use NanoVDB while building openvdb components." ${OPENVDB_BUILD_NANOVDB})
option(USE_STD_SIMD [=[
Suppress auto-detection of std::experimental::simd (C++ Parallelism TS v2) and
force the std::array fallback backend for openvdb::simd::Simd<T,W>. By default
the TS v2 header is used when the compiler provides it; set this to OFF to
disable. Has no effect on non-x86 or compilers that do not ship the TS header.
Note: unlike USE_VCL this option requires no external dependency — the TS header
is part of the compiler's standard library.]=] ON)

cmake_dependent_option(OPENVDB_DISABLE_BOOST_IMPLICIT_LINKING
"Disable the implicit linking of Boost libraries on Windows" ON "WIN32" OFF)
Expand Down Expand Up @@ -420,6 +427,11 @@ elseif(OPENVDB_SIMD STREQUAL "SSE42")
add_compile_definitions("$<$<COMPILE_LANGUAGE:CXX>:OPENVDB_USE_SSE42>")
endif()

# Suppress std::experimental::simd auto-detection if USE_STD_SIMD is OFF.
if(NOT USE_STD_SIMD)
add_compile_definitions("$<$<COMPILE_LANGUAGE:CXX>:OPENVDB_NO_STD_SIMD>")
endif()

#########################################################################

# Configure our cmake modules to only search for static libraries
Expand Down
11 changes: 11 additions & 0 deletions openvdb/openvdb/Platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,17 @@
#endif
#endif

/// Auto-detect std::experimental::simd (C++ Parallelism TS v2).
/// When available, openvdb::simd::Simd<T,W> wraps it to emit native SIMD
/// instructions without relying on the auto-vectorizer.
/// Suppress with -DOPENVDB_NO_STD_SIMD to force the std::array fallback.
#if !defined(OPENVDB_NO_STD_SIMD) && defined(__has_include) && __has_include(<experimental/simd>)
# include <experimental/simd>
# ifdef __cpp_lib_experimental_parallel_simd
# define OPENVDB_USE_STD_SIMD 1
# endif
#endif

/// Windows defines
#ifdef _WIN32
///Disable the non-portable Windows definitions of min() and max() macros
Expand Down
25 changes: 25 additions & 0 deletions openvdb/openvdb/points/impl/PointRasterizeEllipsoidsSDFImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,20 @@ struct EllipsoidTransferQuat final :
this->BaseT::rasterizePoint(ijk, id, bounds, R);
}

/// @brief Point-by-point dispatch — ellipsoids are not batchable via
/// the spherical SIMD path. This override prevents SphericalTransfer::
/// rasterizePoints (which calls rasterizeN2) from being instantiated for
/// the FixedBandRadius<Vec3f> radius type used by ellipsoids.
inline void rasterizePoints(const Coord& ijk,
const Index start,
const Index end,
const CoordBBox& bounds)
{
for (Index i = start; i < end; ++i) {
this->rasterizePoint(ijk, i, bounds);
}
}

private:
std::unique_ptr<QuatHandleT> mRotationHandle;
};
Expand Down Expand Up @@ -446,6 +460,17 @@ struct EllipsoidTransferMat3 final :
this->BaseT::rasterizePoint(ijk, id, bounds, mXformHandle->get(id));
}

/// @brief See EllipsoidTransferQuat::rasterizePoints.
inline void rasterizePoints(const Coord& ijk,
const Index start,
const Index end,
const CoordBBox& bounds)
{
for (Index i = start; i < end; ++i) {
this->rasterizePoint(ijk, i, bounds);
}
}

private:
std::unique_ptr<XformHandleT> mXformHandle;
};
Expand Down
Loading
Loading