# NVRHI **Repository Path**: thecasttim/NVRHI ## Basic Information - **Project Name**: NVRHI - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-15 - **Last Updated**: 2025-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NVRHI [![Build Status](https://github.com/NVIDIA-RTX/NVRHI/actions/workflows/build.yml/badge.svg)](https://github.com/NVIDIA-RTX/NVRHI/actions/workflows/build.yml) ## Introduction NVRHI (**NV**IDIA **R**endering **H**ardware **I**nterface) is a library that implements a common abstraction layer over multiple graphics APIs (GAPIs): Direct3D 11, Direct3D 12, and Vulkan 1.2. It works on Windows (x64 only) and Linux (x64 and ARM64). Key features: - Automatic tracking of resource states and barrier placement (optional). - Automatic tracking of resource usage and lifetime, deferred and safe resource destruction. - Convenient and efficient resource binding model with little runtime overhead. - Easy direct interaction with the underlying GAPI when necessary. - Easy portability of the rendering code between the supported GAPIs. - Hidden sub-allocation of upload buffers and versioning of constant buffers. - Parallel command list recording and multi-queue rendering. - Supports all types of pipelines: Graphics, Compute, Ray Tracing, and Meshlet. - Validation layer and resource reflection for easy debugging. NVRHI is used in several NVIDIA SDKs: - [Adaptive and Variable-Rate Shading SDK](https://github.com/NVIDIAGameWorks/nas-sample) - [Donut Framework](https://github.com/NVIDIA-RTX/Donut) and its [Samples](https://github.com/NVIDIA-RTX/Donut-Samples) - [Opacity Micro-Map SDK](https://github.com/NVIDIAGameWorks/Opacity-MicroMap-SDK) - [Path Tracing SDK](https://github.com/NVIDIAGameWorks/Path-Tracing-SDK) - [RTXDI SDK](https://github.com/NVIDIAGameWorks/RTXDI) Notable third-party projects using NVRHI: - [RBDoom3-BFG](https://github.com/RobertBeckebans/RBDOOM-3-BFG) Various early versions of NVRHI have been used in various projects created at NVIDIA, including: - [Asteroids demo](https://developer.nvidia.com/blog/using-turing-mesh-shaders-nvidia-asteroids-demo) - [DLSS SDK](https://developer.nvidia.com/dlss) - [VRWorks](https://developer.nvidia.com/vrworks) - [VXGI](https://developer.nvidia.com/vxgi) - [WaveWorks](https://developer.nvidia.com/waveworks) ## Requirements * Windows or Linux (x64 or ARM64) * CMake 3.10 * A C++ 17 compiler (Visual Studio 2019, GCC 8 or Clang 6) * Windows SDK version 10.0.22621.0 or later for DX12 support ## Building NVRHI NVRHI can be configured to be used a set of static libraries in CMake-based projects, or as a single dynamic library. To include NVRHI into a CMake project as static libraries: 1. Add this repository as a submodule. 2. Add a `add_subdirectory(nvrhi)` directive to the parent CMakeLists.txt. 3. Add dependencies to the necessary targets: * `nvrhi` for the interface headers, common utilities, and validation; * `nvrhi_d3d11` for DX11 (enabled when `NVRHI_WITH_DX11` is `ON`); * `nvrhi_d3d12` for DX12 (enabled when `NVRHI_WITH_DX12` is `ON`); and * `nvrhi_vk` for Vulkan (enabled when `NVRHI_WITH_VULKAN` is `ON`). To build NVRHI as a shared library (DLL or .so): 1. Clone this repository recursively (including submodules). 2. Generate the project with CMake: * Set the `NVRHI_BUILD_SHARED` variable to `ON`. * Make sure to set the target platform to a 64-bit one. 32-bit builds are not supported. 3. Build and install as normal. ## Using NVRHI in Applications See the [programming guide](doc/ProgrammingGuide.md) and the [tutorial](doc/Tutorial.md). ## NVAPI Support NVRHI includes optional support for certain DX11 and DX12 extensions available through the NVAPI library. The library is not distributed with NVRHI but is available separately [here](https://developer.nvidia.com/nvapi). To enable NVAPI support, extract the NVAPI SDK into the `nvapi` subfolder of your main project and set the `NVRHI_WITH_NVAPI` CMake variable to `ON`. The following extensions are supported: - Opacity Micro-Maps (DX12, Ada+) - Shader Execution Reordering on DX12 (DX12, Ada+) - Single Pass Stereo (Pascal+) - Fast Geometry Shader with optional coordinate swizzling (Maxwell+) - Conservative Raster and other rasterizer features (Maxwell+) - HLSL Extensions through a fake UAV slot (see [this blog post](https://developer.nvidia.com/unlocking-gpu-intrinsics-hlsl)) ## RTXMU Integration NVRHI includes an optional integration of the [RTXMU](https://github.com/NVIDIA-RTX/RTXMU) library. The library is included as a git submodule, and can be enabled with the `NVRHI_WITH_RTXMU` CMake variable. When RTXMU integration is enabled, all bottom-level ray tracing acceleration structures (BLAS'es) are managed by that library. All built BLAS'es that have the `AllowCompaction` flag set are automatically compacted when `ICommandList::compactBottomLevelAccelStructs` method is called. No other configuration is necessary. ## License NVRHI is licensed under the [MIT License](LICENSE.txt).