Skip to content

vk_oidn 0.1.0

Choose a tag to compare

@mklefrancois mklefrancois released this 14 Oct 21:23
· 11 commits to main since this release

First release of vk_oidn: the Intel Open Image Denoise RT filter running on Vulkan. Your application records cmdDenoise() into its own command buffers, in the same style as DLSS. The library never submits work or waits on the host.

Highlights

  • Kernels written in Slang. They use the tensor cores through VK_KHR_cooperative_matrix, with a fallback kernel for other GPUs.
  • Each U-Net layer runs as a single fused kernel: convolution, bias, ReLU, pooling, upsampling and concatenation. Upsampling layers use a sub-pixel decomposition.
  • Inputs and outputs can be buffers (device addresses) or storage image views.
  • Supports HDR, LDR and sRGB input, with albedo and normal guides (noisy or clean), Fast, Balanced and High quality, and automatic exposure on the GPU. Large images are processed in tiles.
  • 11 networks from Open Image Denoise 2.5 are embedded in the library.

Performance

GPU time on an NVIDIA RTX PRO 4500 Blackwell, HDR color with albedo and normal:

Resolution Quality vk_oidn OIDN 2.5.1 CUDA
1920x1080 high 6.72 ms 8.10 ms
1920x1080 fast 3.65 ms 5.55 ms
3840x2160 high 27.83 ms 34.65 ms
3840x2160 fast 14.63 ms 23.41 ms

Validation

  • In every configuration, the output matches the Open Image Denoise CPU device about as closely as OIDN's CUDA backend does. The configurations cover:
    • HDR, LDR and sRGB color
    • albedo and normal guides, noisy and clean
    • all three quality levels
    • half-precision images
    • fixed input scale
    • tiling
    • buffers and image views
  • The Khronos validation layer reports no errors.
  • CI builds every push on Windows and Linux. On Linux, it also checks the results against the official Open Image Denoise release, using lavapipe (Mesa's CPU Vulkan driver).

The measurements and how they were made are in docs/validation_and_performance.md. How the library works is in docs/architecture.md.

Using it

include(FetchContent)
FetchContent_Declare(vk_oidn
  GIT_REPOSITORY https://github.com/mklefrancois/vk_oidn.git
  GIT_TAG        v0.1.0
  GIT_SHALLOW    TRUE
)
FetchContent_MakeAvailable(vk_oidn)
target_link_libraries(my_app PRIVATE vk_oidn::vk_oidn)

A complete example is the oidn_denoiser sample of vk_mini_samples: a path-traced Cornell box with its color, albedo and normal images, a denoiser toggle and image thumbnails.

Requirements and known limitations

  • Building requires CMake 3.21+, a C++17 compiler, Python 3 and the Vulkan SDK, which provides slangc. It is tested with SDK 1.4.363.0 and Slang 2026.17. The slangc from some Linux distribution packages is too old; CMake detects this and says so.
  • The library is optimized and measured on NVIDIA GPUs. On other GPUs, tensor cores are not used by default and the fallback kernel runs instead.
  • On Linux, the denoising has been validated on lavapipe only; no Linux GPU driver has been tested yet.
  • The API may still change in 0.x versions.
  • The README status checklist in this tag is outdated: all its steps are done.

License

Apache License 2.0. The network weights come from RenderKit/oidn-weights (Apache 2.0, Copyright Intel Corporation); see NOTICE.