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+)上進行測試。
相關
- 專案
- 專案
- 專案
- 專案