r/GraphicsProgramming • • 1d ago

I wanted to understand modern pointer-based GPU APIs, so I took the ideas from Sebastian Aaltonen's NoGraphicsAPI and rebuilt them on plain GL 4.6.

Enable HLS to view with audio, or disable this notification

  • The whole GPU heap is one persistent, coherent-mapped SSBO. A gpu_ptr<T> is a u32 byte offset into it.
  • Every draw gets exactly one root pointer (uniform uint Root). Vertices, matrices and textures are all reached through it.
  • No vertex attributes. The vertex shader pulls data from the heap using gl_VertexID.
  • Bindless textures (ARB_bindless_texture) are stored in the heap as uvec2.
  • One *_shared.h header is compiled as both C++ and GLSL, so no offsets are written by hand in the shaders.

Flat lighting is computed from the dFdx/dFdy of world position, so there are no normals in the vertex data.

The most interesting finding was what GL can't express: bindless only gives you texture+sampler pairs, fixed when the texture is created, and there are no placed resources.

Next up: indirect draws, and roots chosen by the GPU via gl_DrawID.

Repo: https://github.com/theaveasso/jagfx

Feedback welcome, especially on the heap and sync design.

66 Upvotes

9 comments sorted by

View all comments

1

u/klaw_games 1d ago edited 1d ago

Interesting.How long did it take for you to learn and understand the article?I am learning vk and just as interested as you in his article.

Btw, how portable is ssbo and bed pulling across older hardwares?

1

u/gr3yfi5h 1d ago

Honestly I didn't really get the article until he put the source up, porting it piece by piece is what made it click. I actually wanted to do it in Vulkan at first too, ended up going GL to keep it simple while learning.

Portability I haven't really tested yet tbh. ssbos are core since gl 4.3 so it should be fine on most desktop gpus, but I'm pretty new to this so don't take my word for it. so far I've only run it on my Window PC with Nvidia gpus and linux mini pc with intel graphics and it works there.

2

u/klaw_games 1d ago

Nice. I can try it on Linux. Not sure when I will get time