NVIDIA-RTX/NVRHI
GitHub: NVIDIA-RTX/NVRHI
NVRHI 是 NVIDIA 提供的跨图形 API(D3D11/D3D12/Vulkan)渲染抽象层库,通过自动化资源管理和统一接口简化高性能渲染引擎的开发与移植。
Stars: 1865 | Forks: 200
# NVRHI
[](https://github.com/NVIDIA-RTX/NVRHI/actions/workflows/build.yml)
## 简介
NVRHI(**NV**IDIA **R**endering **H**ardware **I**nterface)是一个在多种图形 API (GAPI)(Direct3D 11、Direct3D 12 和 Vulkan 1.3)之上实现通用抽象层的库。它支持 Windows(仅限 x64)和 Linux(x64 和 ARM64)。
主要特性:
- 自动跟踪资源状态并放置屏障(可选)。
- 自动跟踪资源使用情况和生命周期,延迟且安全地销毁资源。
- 便捷高效的资源绑定模型,运行时开销极小。
- 在必要时可轻松与底层 GAPI 直接交互。
- 渲染代码在受支持的 GAPI 之间易于移植。
- 上传缓冲区的隐藏子分配和常量缓冲区的版本控制。
- 并行命令列表记录和多队列渲染。
- 支持所有类型的管线:Graphics、Compute、Ray Tracing 和 Meshlet。
- 验证层和资源反射,便于调试。
NVRHI 被用于多个 NVIDIA SDK 中:
- [Adaptive and Variable-Rate Shading SDK](https://github.com/NVIDIAGameWorks/nas-sample)
- [Donut Framework](https://github.com/NVIDIA-RTX/Donut) 及其 [示例](https://github.com/NVIDIA-RTX/Donut-Samples)
- [In-Game Inference (NVIGI) 示例](https://github.com/NVIDIA-RTX/NVIGI-3d-Sample)
- [Opacity Micro-Map SDK](https://github.com/NVIDIA-RTX/OMM)
- [RTX Character Rendering SDK](https://github.com/NVIDIA-RTX/RTXCR)
- [RTX Mega Geometry SDK](https://github.com/NVIDIA-RTX/RTXMG)
- [RTX Neural Shading SDK](https://github.com/NVIDIA-RTX/RTXNS)
- [RTX Neural Texture Compression SDK](https://github.com/NVIDIA-RTX/RTXNTC)
- [RTX Path Tracing SDK](https://github.com/NVIDIA-RTX/RTXPT)
- [RTX Texture Filtering SDK](https://github.com/NVIDIA-RTX/RTXTF)
- [RTX Texture Streaming SDK](https://github.com/NVIDIA-RTX/RTXTS)
- [RTXDI SDK](https://github.com/NVIDIA-RTX/RTXDI)
- [RTXGI SDK](https://github.com/NVIDIA-RTX/RTXGI)
使用 NVRHI 的著名第三方项目:
- [RBDoom3-BFG](https://github.com/RobertBeckebans/RBDOOM-3-BFG)
NVRHI 的各个早期版本已被用于在 NVIDIA 创建的多个项目中,包括:
- [Asteroids 演示](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)
## 环境要求
* Windows 或 Linux(x64 或 ARM64)
* CMake 3.10
* C++ 17 编译器(Visual Studio 2019、GCC 8 或 Clang 6)
* Windows SDK 版本 10.0.22621.0 或更高版本(用于支持 DX12)
## 构建 NVRHI
NVRHI 可以配置为在基于 CMake 的项目中用作一组静态库,或作为单个动态库使用。
要将 NVRHI 作为静态库包含到 CMake 项目中:
1. 将此仓库添加为 submodule。
2. 在父级的 CMakeLists.txt 中添加 `add_subdirectory(nvrhi)` 指令。
3. 为必要的目标添加依赖项:
* `nvrhi` 用于接口头文件、通用工具和验证;
* `nvrhi_d3d11` 用于 DX11(当 `NVRHI_WITH_DX11` 为 `ON` 时启用);
* `nvrhi_d3d12` 用于 DX12(当 `NVRHI_WITH_DX12` 为 `ON` 时启用);以及
* `nvrhi_vk` 用于 Vulkan(当 `NVRHI_WITH_VULKAN` 为 `ON` 时启用)。
要将 NVRHI 构建为共享库(DLL 或 .so):
1. 递归克隆此仓库(包括 submodule)。
2. 使用 CMake 生成项目:
* 将 `NVRHI_BUILD_SHARED` 变量设置为 `ON`。
* 确保将目标平台设置为 64 位。不支持 32 位构建。
3. 像往常一样进行构建和安装。
## 在应用程序中使用 NVRHI
参见[编程指南](doc/ProgrammingGuide.md)和[教程](doc/Tutorial.md)。
## NVAPI 支持
NVRHI 包含对通过 NVAPI 库提供的某些 DX11 和 DX12 扩展的可选支持。该库不随 NVRHI 一起分发,但可在[此处](https://developer.nvidia.com/nvapi)单独获取。
要启用 NVAPI 支持,请将 NVAPI SDK 解压到主项目的 `nvapi` 子文件夹中,并将 `NVRHI_WITH_NVAPI` CMake 变量设置为 `ON`。
支持以下扩展:
- Cluster Level Acceleration Structures (DX12)
- Linear Swept Spheres (DX12, Blackwell+)
- Opacity Micro-Maps (DX12, Ada+)
- Shader Execution Reordering on DX12 (DX12, Ada+)
- Single Pass Stereo (Pascal+)
- 带有可选坐标 swizzling 的 Fast Geometry Shader (Maxwell+)
- Conservative Raster 和其他光栅化器特性 (Maxwell+)
- 通过虚假 UAV 槽位实现的 HLSL 扩展(参见[此博客文章](https://developer.nvidia.com/unlocking-gpu-intrinsics-hlsl))
## RTXMU 集成
NVRHI 包含对 [RTXMU](https://github.com/NVIDIA-RTX/RTXMU) 库的可选集成。该库作为 git submodule 包含在内,可以通过 `NVRHI_WITH_RTXMU` CMake 变量启用。
当启用 RTXMU 集成时,所有底层光线追踪加速结构 (BLAS) 均由该库管理。当调用 `ICommandList::compactBottomLevelAccelStructs` 方法时,所有设置了 `AllowCompaction` 标志且已构建的 BLAS 都将被自动压缩。无需进行其他配置。
## 许可证
NVRHI 基于 [MIT 许可证](LICENSE.txt) 授权。
标签:Bash脚本, C++, Direct3D 11, Direct3D 12, GPU编程, NVRHI, RTX, Vulkan, 光线追踪, 图形API, 图形渲染, 图形调试, 多线程渲染, 实时渲染, 抽象层, 数据擦除, 游戏开发, 硬件接口, 网格着色, 计算管线, 资源管理, 镜像验证, 高性能计算