Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/NVIDIAGameWorks/nvrhi
https://github.com/NVIDIAGameWorks/nvrhi
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/NVIDIAGameWorks/nvrhi
- Owner: NVIDIAGameWorks
- License: mit
- Created: 2021-07-13T08:41:32.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-05-17T22:30:18.000Z (6 months ago)
- Last Synced: 2024-05-17T23:28:52.153Z (6 months ago)
- Language: C++
- Size: 471 KB
- Stars: 709
- Watchers: 35
- Forks: 84
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- Blender-Guide - NVRHI (NVIDIA Rendering Hardware Interface)
- Unity-Guide - NVRHI (NVIDIA Rendering Hardware Interface)
- Retro-Gaming-Guide - NVRHI (NVIDIA Rendering Hardware Interface)
- Unreal-Engine-Guide - NVRHI (NVIDIA Rendering Hardware Interface)
README
# NVRHI
[![Build Status](https://github.com/NVIDIAGameWorks/nvrhi/actions/workflows/build.yml/badge.svg)](https://github.com/NVIDIAGameWorks/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 GameWorks SDKs:
- [Adaptive and Variable-Rate Shading SDK](https://github.com/NVIDIAGameWorks/nas-sample)
- [Donut Framework](https://github.com/NVIDIAGameWorks/donut) and its [Examples](https://github.com/NVIDIAGameWorks/donut_examples)
- [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.19041.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/NVIDIAGameWorks/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).