Descriptor Set Managment
Wir setzen uns als Ziel, Vulkan descriptors effektiv und vor allem einfach in unserem Projekt umzusetzen. Zusätzlich soll der ganze Spaß so eingebunden sein in das rendering und asset loading, dass kein explizites Erstellen von irgendwelchen vkDescriptorPool
oder vkDescriptorSet
auf deren Seite notwendig ist. Das VkDescriptorSetLayoutBinding
soll implizit rausgelesen und erstellt werden können.
Erste Schritte:
- Lesen: die Spezifikation, ein einfaches Tutorial für den Einstieg, evtl. danach aufbauend das Konzept eines Allocators
- Branch auschecken, unser Projekt bauen und starten. Klappt alles soweit?
- Rumspielen: Ein descriptor pool mit Größe von nur einer Ressource reservieren. Daraus das descriptor set einmal allokieren. Was passiert, wenn man das mehrmals tut?
Bis hierhin sollte dann eigentlich das Meiste abgehandelt worden sein, was mit descriptor set Erstellung zu tun hat.
Erstes großes Ziel:
-
Einen großen descriptor pool erstellen. (zB.: pool sizes von jeweils 1000 zu jedem typischen descriptor type) -
binding layout mit jedem typischen descriptor type jeweils einmal erstellen -
1000x ein descriptor set versuchen zu allokieren
Wenn das klappt, dann kann man anfangen, an einem kleinen allocator System arbeiten
Zweites großes Ziel:
-
DescriptorAllocator
Klasse anfangen -
kleine API aufbereiten im Framework. AKA: allocateDescriptors(...)
undresetDescriptor{Pools}(...)
-
der allocator erstellt blockartig descriptor pools der oben genannten Größe -
der allocator "trackt" wie viele descriptor pools existieren und erstellt neue, sobald die existierenden voll sind -
der allocator reseted ordentlich alle descriptor pools bei Programmende.
Wenn der allocator ordentlich arbeitet, dann kann weitere Anbindung an andere Komponenten stattfinden, und eventuelle Abstraktionen (Materials, etc.).
Drittes großes Ziel:
- To Be Determined
- weitere Absprache mit Rendering- und Asset Loading-Teams notwendig.
CC: @susannedoetsch, @shermann04