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.

What it solves

NoGraphicsAPI is an experimental implementation that simplifies the complexity of conventional graphics APIs. It explores a design where the heavy overhead of managing buffer objects, descriptor sets, and complex pipeline layouts is replaced by direct GPU memory addressing and simplified synchronization.

How it works

Built on Vulkan 1.4, the project removes traditional API abstractions like VkDescriptorSet and VkPipelineLayout. Instead, it uses:

  • GPU Pointers: Shaders use 64-bit GPU pointers to fetch vertices and data directly from memory, replacing traditional buffer bindings.
  • Application-Owned Heaps: The application manages its own descriptor heaps for textures and samplers, passing indices to shaders via a shared root payload.
  • Simplified Synchronization: It uses global stage and access barriers to describe execution and memory hazards rather than per-resource transition lists.
  • Shared Root ABI: A small, shared C++/Slang structure is copied directly to the GPU for each draw or dispatch call to provide essential pointers and values.

Who it’s for

This project is for graphics programmers and engine developers interested in low-level GPU architecture, experimental API design, and those wanting to explore a "pointer-based" approach to graphics programming using Vulkan.

Highlights

  • Eliminates Boilerplate: Removes the need for descriptor pools, layouts, and sampler objects.
  • Direct Memory Access: Leverages VK_EXT_descriptor_heap and VK_KHR_device_address_commands for raw GPU address-based operations.
  • Slang Integration: Uses the Slang shader language to implement a clean contract between CPU and GPU data structures.
  • Hardware Verified: Tested across a range of modern NVIDIA and AMD GPUs (RDNA 3+, Turing+).

Related

  • Project
  • Project
  • Project
  • Project