sebbbi/NoGraphicsAPI
Minimal graphics API. Built on top of latest Vulkan extensions. As close as possibly to my "No Graphics API" blog post and the SIGGRAPH talk.
解决的问题
NoGraphicsAPI 通过移除传统图形 API 的复杂机制,简化了 GPU 编程。它消除了对缓冲区对象、顶点布局声明和绑定表的需求,使 GPU 内存和数据结构感觉更像标准的 CPU 端编程。
工作原理
此库利用现代硬件特性(Metal 4 和 Vulkan 1.4)来实现无绑定数据模型:
- GPU 指针: 使用 64 位指针访问数据,让着色器可以跟随指针到数组和嵌套结构,而无需描述符集。
- 描述符堆: 实现无绑定纹理和采样器,由应用程序管理索引,而非重新绑定资源。
- 根参数: 以单个 GPU 指针取代绑定表,指向包含绘制或分派调用所需所有常量和资源索引的共享 C++/Slang 结构。
- 直接内存访问: 使用映射的堆,让 CPU 可以直接将数据写入 GPU 可访问的内存,绕过单独的缓冲区类型。
- 简化同步: 专注于基于工作生产和消费的同步,而非跟踪特定图像布局。
适用对象
适合想要减少现代硬件上传统渲染管线相关样板代码和状态耦合的低级图形程序员。
亮点
- 跨平台后端: 原生支持 Metal 4(macOS/iOS)和 Vulkan 1.4(Windows/Linux)。
- Slang 集成: 使用共享的 Slang 着色器,确保 CPU 和 GPU 共享相同的数据声明。
- 减少管线状态: 将资源绑定和顶点布局与管线创建解耦,减少管线排列组合的数量。
- 硬件优化: 特别针对高端现代 GPU(例如 Apple Silicon M1+、NVIDIA RTX 30/40/50 系列、AMD RDNA 3/4)。
相关
- 项目
- 项目
- 项目
- 项目
- 项目