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 内存寻址和简化的同步机制,取代管理缓冲区对象、描述符集和复杂管线布局所带来的沉重开销。
它如何工作
基于 Vulkan 1.4 构建,该项目移除了传统的 API 抽象,如 VkDescriptorSet 和 VkPipelineLayout。取而代之的是使用:
- GPU 指针:着色器使用 64 位 GPU 指针直接从内存中获取顶点和数据,取代传统的缓冲区绑定。
- 应用程序拥有的堆:应用程序自行管理纹理和采样器的描述符堆,并通过共享根有效载荷将索引传递给着色器。
- 简化的同步机制:使用全局阶段和访问屏障来描述执行和内存危险,而非每个资源的过渡列表。
- 共享根 ABI:一个小型的、共享的 C++/Slang 结构在每次绘制或分派调用时直接复制到 GPU,以提供必要的指针和值。
适合谁
该项目适合对底层 GPU 架构、实验性 API 设计感兴趣的图形程序员和引擎开发者,以及希望探索使用 Vulkan 的“基于指针”图形编程方法的人。
特色亮点
- 消除样板代码:无需再创建描述符池、布局或采样器对象。
- 直接内存访问:利用
VK_EXT_descriptor_heap和VK_KHR_device_address_commands实现基于 GPU 地址的原始操作。 - Slang 集成:使用 Slang 着色器语言在 CPU 和 GPU 数据结构之间建立清晰的契约。
- 硬件验证:已在一系列现代 NVIDIA 和 AMD GPU(RDNA 3+、Turing+)上进行测试。
该实现展示了如何通过直接 GPU 内存寻址和简化同步,显著降低图形编程的复杂性 — @noamross
相关
- 项目
- 项目
- 项目
- 项目