Repository navigation
3.2.0.ceba893
Pre-release
Pre-release
HIPRT 3.2.0
Previous release: 3.1.0 (5 January 2026). This release covers 9 months of upstream work.
Breaking changes
hiprtFrameSRTlayout changed — ashearfield is inserted betweenscaleandtranslation; the struct grows from 48 to 64 bytes and its alignment from 16 to 64. Applications must be recompiled.HIPRT_API_VERSIONis now3002. A binary built against 3.1.x is rejected byhiprtCreateContextwithhiprtErrorInvalidApiVersioninstead of silently mismatching the new frame layout.- Traversal and stack types (
hiprtPrivateStack,hiprtGeomTraversalClosest, …) are now template aliases instead of opaque classes. All public names are preserved, but forward declarations no longer work and the exposed size/alignment constants are gone. - The
HIPRT_ASSERTmacro is replaced by thehiprtAssert()inline function. hiprt::ptr()is removed fromhiprt_math.h, replaced byhiprt::component()(see Bug fixes).- Most API structs now have default member initializers, including the build inputs, the function table, the stack buffers and both frame types.
Performance
- Triangle normals are decoded once after the traversal loop instead of for every candidate hit (RTIP 3.1).
- Transform functions are now actually unrolled.
New features
- Instance transforms can be read back from device code:
hiprtGetObjectToWorldFrameSRT,hiprtGetWorldToObjectFrameSRT,hiprtGetObjectToWorldFrameMatrix,hiprtGetWorldToObjectFrameMatrix, each with a two-level and a multi-level (MLAS) overload. - SRT frames support shear, exposed as
hiprtFrameSRT::shear. - Medusa support:
gfx1170,gfx1171,gfx115E. - CUDA 13 support; bundled hipRTC and comgr DLLs updated from 6.4 to 7.1; hipRTC 7.8 and newer can now be loaded.
- HIP and hipRTC libraries are now preferred from the SDK named by
HIP_PATH/ROCM_PATHover whatever the platform loader finds first. On Windows this stops the display driver's copy inSystem32from shadowing the SDK the application was built against. With neither variable set, the search order is unchanged.
Bug fixes
- Undefined behaviour in dynamic vector component access —
(&v.x)[i]let compilers assume no aliasing withv.yvia TBAA and drop stores to other members. Replaced throughout the builder by a member-pointer accessor. - Illegal memory access when packing a triangle pair that cannot be paired; the pairing test is now order-independent.
- Refit wrote vertices into build slots instead of reusing the packet's descriptor slots, corrupting nodes on update (gfx1201).
- BVH collapse now uses acquire/release ordering, and Morton code pointer arithmetic is corrected.
- Scene storage size was double-counted for batch-eligible scenes with custom BVH import, inflating the allocation.
compactScenescopied only half of each instance record (wrong element stride), corrupting compacted scenes.- The compiler is now initialised against the HIPRT context rather than whatever context was current, fixing multi-GPU setups.
- Kernel cache file names are sanitised; devices whose name contains a path separator, such as
AMD Instinct MI250X / MI250, no longer fail to write the cache. Existing caches stay valid. - Only the file name is passed to
orortcCreateProgram; an absolute module path made comgr fail silently on Windows. - The offload target is named explicitly when compiling kernels, instead of relying on the ambient context — should fix
hipErrorInvalidImageon toolchains whose default target set excludes the running device. - GPU architecture numbers are parsed as hexadecimal, so steppings with a letter (
gfx115E) are no longer truncated. - 64-bit lane masks are built with 64-bit shifts, and
gfx950is correctly detected as a wavefront-64 target; both broke warp-level logic on wave64 hardware. - Temporary build buffers are checked for alignment and report
hiprtErrorInvalidParameter.
Build and tooling
- CMake: fixed kernel output paths on multi-config generators, all files exported by the compile scripts are tracked as outputs so a missing one triggers a rebuild, and Python is only required when kernels are actually compiled. Incorporates public PRs #53 and #61.
- The precompilation script asks clang which
gfxtargets it supports instead of inferring them from the SDK version.
Internal
Large-scale modernisation of the codebase — RTIP namespaces, Pimpl removal, node and triangle-packet refactoring, const and [[nodiscard]] propagation, formatting unification. No intended behaviour change.