|
EBGeometry
Compact, header-only C++ library for fast evaluation of signed distance functions
|
The boxes of the K children of one interior node, in SoA layout: m_lo[axis][child] and m_hi[axis][child], so that one axis of all K children loads as one SIMD register. More...
#include <EBGeometry_BVHQuery.hpp>
Static Public Attributes | |
| static constexpr size_t | RowAlignment |
| Alignment of one axis row, in bytes. | |
The boxes of the K children of one interior node, in SoA layout: m_lo[axis][child] and m_hi[axis][child], so that one axis of all K children loads as one SIMD register.
What a query type tests when PackedBVH::traverse() expands a node. Read-only for users: a PackedBVH builds and refits its rows.
| T | Floating-point precision. |
| K | Branching factor. |
|
staticconstexpr |
Alignment of one axis row, in bytes.
A row is sizeof(T) * K bytes wide, and every SIMD path loads a whole row with one aligned load, so the row wants to be aligned to its own width. That width is only a legal alignment when it is a power of two, which it is for exactly the (T, K) combinations that have a SIMD path (16, 32 and 64 bytes). For every other K (3, 5, 6, 7, ...) no SIMD path is compiled, nothing performs an aligned vector load on the row, and T's natural alignment is both sufficient and legal. Asking for sizeof(T) * K unconditionally would make PackedBVH<double, P, 3> and its odd-K siblings fail to compile ("requested alignment 24 is not a positive power of 2").