Writing a bindless GPU abstraction layer
Inspiré par un billet de Sebastian Aaltonen, l'auteur a implémenté un prototype appelé Loon GPU qui fonctionne aujourd'hui sur des backends Vulkan 1.3 et Metal 4. L'API est centrée sur des pointeurs GPU alloués par malloc/free, supprime les objets tampon et les vertex buffers au profit du vertex pulling, et utilise des textures et des samplers bindless accessibles via un grand heap d'indices. En pratique le projet crée quand même des VkBuffer/MTLHeap internes et maintient une table triée pour convertir les pointeurs GPU en paire buffer+offset (limite qui pourrait disparaître avec VK_KHR_device_address_commands), en recommandant des allocations lourdes et des allocateurs applicatifs. Côté shaders, Slang a été choisi pour son support des pointeurs mais pose des problèmes pratiques (impossibilité de contrôler les plages de push constants partagées en Vulkan, support Metal expérimental, traductions manuelles et parsing hacky des tailles de threadgroups), ce qui complique le partage de code entre backends. Certaines fonctionnalités du design original n'ont pas été implémentables (découplage du blend state, barrières de type futex, heaps opaques via extensions récentes), et l'auteur travaille sur la débogabilité, plus d'exemples et le support d'extensions avant d'ajouter mesh shaders ou ray tracing, le projet étant disponible sur GitHub et ouvert aux retours.