Skip to content

Support newer Houdini/USD SDKs and improve interactive rendering - #745

Draft
batson-j wants to merge 5 commits into
GPUOpen-LibrariesAndSDKs:masterfrom
batson-j:houdini-22-rocm7
Draft

batson-j wants to merge 5 commits into
GPUOpen-LibrariesAndSDKs:masterfrom
batson-j:houdini-22-rocm7

Conversation

@batson-j

@batson-j batson-j commented Sep 7, 2026

Copy link
Copy Markdown

The plugin now builds and renders against Houdini 22.0.429 and its USD 26.05
SDK. Header capability probes select the compatible Hydra, Sdr/Ndr, HDK,
Python and OpenVDB APIs while retaining the older code paths. Houdini 22 and
ROCm 7 are supported options, not new minimum requirements.

The SDK dependency is updated to v3.1.6.patch1. An optional private HIP 7 loader
allows the SDK to use an explicitly selected ROCm installation without replacing
system libraries. Leaving the build/runtime overrides empty retains the SDK's
default runtime selection.

Interactive rendering gains optional CPU OIDN for Northstar, Linux HybridPro
device selection, and independent temporal-denoising/upscaling controls. Native
resolution can be used with SVGF or ASVGF. The port also converts analytic USD
primitives when required and handles Houdini's concrete RGBA display-buffer
format and default beauty LPE.

Renderer lifecycle fixes address paused-worker shutdown, delegate/configuration
lifetime, per-delegate edit ownership, output-buffer allocation/rebinding, and
failure/convergence reporting. Backend/device settings use Houdini's native
context-restart mechanism. Additional corrections initialize camera/light/timing
state and fix undersized motion-mesh property storage.

Validation

  • Full build/install and GUI loading on Linux with Houdini 22.0.429, GCC 13.3,
    Python 3.13, USD 26.05, MaterialX 1.39.5 and OpenVDB 13.
  • AMD Radeon AI PRO R9700 renders while NVIDIA RTX 2070 Super drives the display.
    Glass, chrome, procedural materials, analytic-sphere conversion and emissive
    illumination checked in an isolated scene. Northstar raw/OIDN/adaptive+OIDN
    paths exercised; native-resolution HybridPro ASVGF also used interactively.
  • CPU render-thread tests pass under AddressSanitizer and UndefinedBehaviorSanitizer,
    including paused shutdown, concurrent pause/stop, cancellation and owner lifetime.
    LeakSanitizer was disabled for the sandbox. Repeated successfully on 2026-09-07.
  • With the diagnostic RADV synchronization flag, one GUI completed HybridPro
    32→128 samples, round trips through Northstar and Karma CPU, and a camera
    translation/restore. Returned HybridPro images were inspected; Karma's own
    image was not part of that comparison.
  • Separate SDK diagnostics completed six alternating AMD/NVIDIA contexts with
    material, light and camera changes and clean teardown. The retained output
    passes the supplied radiance/reset/teardown checker.
  • Configure checks also pass with the HIP override empty and OIDN disabled.
    git diff --check passes, and the branch is clean against the current upstream
    base. No production source changed after the installed build's validation.

Known limits

Older Houdini versions, other operating systems and alternative runtime
combinations retain their compatibility paths but were not tested here. Each
Houdini/USD ABI still needs its own build.

HybridPro on the tested R9700/RADV 25.2.8 stack exhibits an accumulation/reset
failure in the unmodified standalone SDK. RADV_DEBUG=syncshaders corrects the
tested images and enabled the GUI sequence above; the plugin does not force
this diagnostic flag. Earlier AMD and NVIDIA device-loss events also exposed
SDK cleanup crashes. Recovery after GPU device loss remains unresolved.

A subsequent HybridPro production-scene check found that generic
UsdPreviewSurface emission did not display the authored machine lights.
The same geometry rendered those sources with native RPR Uber materials and
explicit emission inputs. The generic emission mismatch is not yet isolated
or fixed by this port; that material path needs further validation.

FSR2 image quality and its internal ordering with ASVGF are not validated.
Production fluid/volume/MaterialX coverage, long playback and a matched
production-scene GPU benchmark are outside this validation. Render/resolve
counters measure CPU wall-time regions and can include GPU waits; they are not
isolated GPU-pass timings.

Build instructions and detailed limits are in BUILD_HOUDINI.md; standalone
CPU/SDK test instructions are in pxr/imaging/plugin/hdRpr/testenv/.

Probe the selected HDK/USD APIs and preserve legacy branches while following
its C++ standard, ABI, Python and OpenVDB requirements. Update the pinned RPR
SDK and add an opt-in private HIP 7 loader independent of Houdini version.

Convert modern Hydra implicit surfaces, honor the actual display-buffer
format, and map Houdini default beauty to native color. Expose nonduplicate
viewport sampling, device and resolution diagnostics.

Validated build and live material rendering on Houdini 22.0.429/Linux with
SDK 3.1.6.patch1, ROCm 7.2.4 and Radeon AI PRO R9700. The empty HIP override
configures successfully; other compatibility paths are retained but untested.
Document reproduction, observed HOM pause behavior and validation limits.
Add optional CPU OIDN filtering for Northstar beauty before display transforms,
with guide handling and an installed runtime search path for the selected OIDN.
Separate HybridPro denoising from FSR2 upscaling and expose backend/mode stats.

Register Linux HybridPro and discover advertised physical GPU indices through
the optional SDK export. Keep legacy GPU0 fallback when unavailable, and reject
explicit multiple or stale Hybrid device selections instead of changing cards.

Document tested Houdini runtime behavior, passive compatibility and the observed
AMD RADV HybridPro device loss. Northstar/HIP and NVIDIA HybridPro preview checks
passed; no matched GPU benchmark or AMD Vulkan stability claim is made.
Join workers before delegate state is destroyed, preserve stop/pause semantics, and refresh reallocated render buffers. Let Houdini own renderer restarts with optional per-context Hybrid GPU selection. Report failed rendering as incomplete and reset accumulation coherently.

Add bounded CPU thread regressions and correct motion-mesh property storage and undefined initialization. Document remaining HybridPro image corruption, GPU timeouts, and SDK teardown crashes; successful sample counters are not accepted image validation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant