Bachelor's Thesis

Vulkan C++ API Generator

Final Thesis 2.3 MB

Author of thesis: Jaroslav Hucel

Acad. year: 2025/2026

Supervisor: Ing. Jan Pečiva, Ph.D.

Reviewer: Ing. Tomáš Chlubna, Ph.D.

Abstract:

This thesis presents the design and implementation of a C++ application programming interface generator for the Vulkan graphics library. The official C++ binding Vulkan-Hpp suffers from long compilation times caused mainly by its monolithic, all-encompassing design. The proposed tool addresses this issue by generating, based on a user-supplied configuration, only the subset of the interface that a given project actually needs, thereby substantially reducing the compilation time of user code. The work builds on the educational project VulkanTutorial and its manually maintained vkg interface, preserving the design of vkg while automating its production. The generated code uses modern C++ features for automatic resource management and is available both as conventional header files and as a C++20 module; integration into third-party projects is handled by an accompanying CMake module. The functionality of the interface is verified by a sample rendering application and by batch compilation of examples from the VulkanTutorial project; a quantitative comparison with vulkan.hpp and the plain C header is carried out on two independent machines using the GCC, Clang and MSVC compilers.

Keywords:

Vulkan, C++, application programming interface, code generator, abstract syntax tree, XML parsing, topological sorting, C++ modules, CMake, computer graphics

Date of defence

16.06.2026

Result of the defence

Defended (thesis was successfully defended)

znamkaAznamka

Grading

A

Process of defence

Student nejprve prezentoval výsledky, kterých dosáhl v rámci své práce. Komise se poté seznámila s hodnocením vedoucího a posudkem oponenta práce. Student následně odpověděl na otázky oponenta a na další otázky přítomných. Komise se na základě posudku oponenta, hodnocení vedoucího, přednesené prezentace a odpovědí studenta na položené otázky rozhodla práci hodnotit stupněm A.

Topics for thesis defence

  1. V textu je několikrát zmíněn přístup RAII implementován v tzv. UniqueHandle objektech. Toto spojení může být matoucí z hlediska vk::raii struktur poskytnutých ve vulkan.hpp rozhraní. Definujte, zda Vaše vygenerované rozhraní nějakým způsobem poskytuje podobné funkce jako vk::raii, ne jen Unique struktury.
  2. V textu je zmíněn „vlastní kontejner vector“. Je ověřeno, že tento kontejner funguje stejně jako standardní C++ vector? Připravte si graf kde jednoduchým experimentem tyto struktury porovnáte z hlediska výkonu.
  3. V textu se nachází zdánlivě nekonzistentní tvrzení: „cílovou verzí navrhovaného rozhraní je C++20“ a „Zdrojové kódy navrhovaného nástroje budou využívat moderních prostředků standardů jazyka C++20 a C++23“. Vysvětlete.
  4. Syntaktický analyzátor využívá alokace paměti po blocích o velikosti 64 KB. Proč právě tato velikost?
  5. Vysvětlete pojem „obecný fallback, který zachovává pouze syntaktickou správnost“ v kontextu klasifikace příkazů. Co se děje v praxi? Jsou takové příkazy ponechány v původním C formátu?
  6. Jaké nástroje umělé inteligence jste použil při generování vašeho kódu? Jak moc jste musel vygenerované kódy ručně upravovat?

Language of thesis

Czech

Faculty

Department

Study programme

Information Technology (BIT)

Composition of Committee

prof. Ing. Adam Herout, Ph.D. (předseda)
doc. Ing. Michal Bidlo, Ph.D. (místopředseda)
Ing. Jaroslav Dytrych, Ph.D. (člen)
Ing. Ivana Burgetová, Ph.D. (člen)
Dr. Ing. Petr Peringer (člen)

Supervisor’s report
Ing. Jan Pečiva, Ph.D.

Student dobře naplánoval čas a dosáhl cíle projektu, tedy generování rozhraní Vulkan, které vychází z ideového návrhu ve VulkanTutorialu (*) navrženého vedoucím práce. Postupně budoval xml parser, což byl požadavek vedoucího. Parsoval xml soubor s oficiální specifikací Vulkan od organizace Khronos a budoval generátor nového rozhraní, který byl postupem času neustále vylepšován. Pak student integroval své řešení do CMake buildovacího systému a prozkoumal i možnosti využití C++ modulů, pro něž navrhl řešení. Na závěr úspěšně proměřil své řešení.


Projekt je svým rozsahem nadstandardní a kvalitně zpracovaný. Student ukázal schopnost a samostatnost při řešení rozsáhlejšího softwarového projektu. Navrhuji hodnocení A-90 bodů.


(*) https://github.com/Vulkan-FIT/VulkanTutorial

Evaluation criteria Verbal classification
Informace k zadání

Zadání práce je střední náročnosti. Většina práce se soustředila na implementační logiku a programátorský um, ale vyžadovala i pochopení četných principů a základů API Vulkan. Student projevil zájem o projekt a pilně na něm pracoval, splnil všechny body zadání a dosáhl velmi pěkných výsledků.

Práce s literaturou

Sám si sháněl literaturu a potřebné informace.

Aktivita během řešení, konzultace, komunikace

Pravidelně chodil na konzultace, na které, snad kromě výjimky nemoci, byl dobře připraven. Řešení aktivně konzultoval s vedoucím a ukazoval hluboké porozumění řešenému problému.

Aktivita při dokončování

Práce byla dokončena včas a její obsah prokonzultován. Vedoucí zkontroloval funkčnost odevzdaných spustitelných souborů.

Publikační činnost, ocenění

Projekt byl zveřejněn na serveru github na stránkách Vulkan-FIT jako open-source, včetně spustitelných binárek. Výsledky práce zvažuje vedoucí využít ve fakultních projektech týkající se spolupráce se Švýcarskou firmou Cadwork Informatik CI AG.

Points proposed by supervisor: 90

Grade proposed by supervisor: A

Reviewer’s report
Ing. Tomáš Chlubna, Ph.D.

Implementovaný nástroj je užitečný a velmi kvalitně zpracován, textová zpráva je celkově vyhovující, nicméně je zatížena menšími nedostatky.


Nástroj generuje optimální rozhraní pro C++ projekty využívající Vulkan API a tím urychlí kompilační čas. Řešení bylo pečlivě zhodnoceno a měření potvrzuje jeho užitečnost. Textová zpráva dobře popisuje celou práci, ale hodnocení je sníženo kvůli několika formálním a obsahovým nedostatkům v textu, které však nejsou kritické.


Autor projevil aktivitu navíc a své výsledky osobně demonstroval.

Evaluation criteria Verbal classification Points
Náročnost zadání

Evaluation level: obtížnější zadání

Zadání vyžaduje dobrou znalost komplexního Vulkan API a pokročilých konceptů jazyka C++.

Jelikož je realizace koncipována jako samostatný projekt bez externích knihoven tak využívá také metod formálních jazyků (lexikální a syntaktická analýza). Autor také musí rozumět dobře mechanismům použitým v překladačích jazyka C++.

Prezentační úroveň technické zprávy

Struktura práce je standardní a kapitoly na sebe dobře navazují. U kapitol návrhu a implementace dochází k menšímu překryvu.

Kapitoly jsou obsahově vyvážené a celkově je text pochopitelný. Jelikož je výsledkem práce generátor C++ kódu, tak je nevyhnutelné se kódem samotným zabývat i v kapitole návrhu, a proto lze tuto část hodnotit mírněji. Nicméně některé detaily se zdají být umístěny v návrhu nevhodně, například věta ...je uzel naimplementován jako datová struktura sjednocení (union).

Kapitola implementace místy příliš zachází do detailů a tím se stává méně pochopitelnou, například popis jak se jmenuje funkce pro analýzu argumentů příkazové řádky apod. Některé popisy kódu by bylo lépe vyjádřit pomocí schémat.

85
Formální úprava technické zprávy

Kvalita textu je dobrá a ve zprávě se vyskytuje jen menší množství formálních nedostatků.

První mluvnická osoba v úvodu je tolerovatelná, nicméně není nutná a lehce kazí technický styl. V úvodu jsou také odkazy na kapitoly, avšak nejsou klikací jako podobné odkazy dále v textu. V jednom případě byla detekována spojka  nevhodně na konci řádku. Na začátku kapitoly 5, před nadpisem 5.1 chybí úvodní text.

Většina obrázků, které autor vytvořil, je vektorová a velmi pěkná. Nicméně některé obrázky jsou rastrové snímky obrazovky a mohly být zpracovány mnohem lépe ve vektorové podobě  (např. snímky z analyzátoru kódu na obr. 2.3) nebo jako textový výpis (např. snímek z editoru kódu na obr. C.1). Obrázky 5.5-5.7 nejsou odkazovány v textu.

Některé kódy jsou v uvedeny přímo v textu. Jelikož zabírají více řádků, tak by bylo vhodnější je vysázet jako objekt typu výpis (např. na str. 30 a 34).

85
Realizační výstup

Z hlediska realizace je práce na vysoké úrovni a splňuje očekávání.

Efektivita vygenerovaného rozhraní pomocí implementovaného nástroje byla důkladně změřena na několika příkladech a dvou odlišných sestavách s operačními systémy Linux a Windows. Provedené měření jasně ukazuje výhody této práce oproti standardním postupům. Vygenerované rozhraní významně urychluje překlad ve srovnání s oficiálním kódem. Pomocné skripty pro překlad usnadňují použití a projekt lze bez problémů spustit.

100
Využitelnost výsledků

Výsledný nástroj je užitečný a originálním způsobem zlepšuje výkon při překladu Vulkan aplikací.

Nástroj podporuje také přímou integraci do existujících projektů přes CMake rozhraní, což významně zjednodušuje jeho použití. Celý projekt je volně dostupný pro použití komunitou jako open-source kód. Jelikož vychází z rozhraní definovaného v existujícím tutorialu pro Vulkan tak je přímo využitelný v tomto projektu. Jelikož podobných projektů moc neexistuje tak výsledek zaujímá poměrně unikátní místo.

Rozsah splnění požadavků zadání

Evaluation level: zadání splněno

Všechny body zadání byly splněny.

Rozsah technické zprávy

Evaluation level: je v obvyklém rozmezí

Text je informačně hodnotný a dobře vysvětluje celou práci.

Redundantní informace se vyskytují jen v menší míře, např. na straně 22 a 37 se nachází téměř totožná ukázka použití výsledné aplikace s argumenty. Také uvedené údaje o počtu řádků kódu ve výsledném projektu nejsou nutné. Příloha E nemá velkou informační hodnotu a obsahuje hlavně dva snímky obrazovky z GitHub repositáře.

Práce s literaturou

V textu je na vhodných místech citováno 26 zdrojů, většinou odborných a  relevantních, avšak některé jsou duplicitní, případně nevhodné jako citace.

Zdroje [1, 8, 11, 23, 24, 25] nejsou odkazy na odbornou literaturu, ale spíše na weby produktů a kratší články. Bylo by lépe je vysázet pouze jako poznámky pod čarou. Zdroje [13, 14] jsou duplicitní. Podobně zdroje [12, 15, 16] odkazují na stejný zdroj a bylo by lépe je sloučit do jednoho. Zdroj [5] je odkazem na populárně naučný web a bylo by jej možno nahradit odbornou knihou zabývající se C++.

V textu se vyskytuje hodně poznámek pod čarou, které vhodně doplňují potřebné informace. 

87
Topics for thesis defence:
  1. V textu se nachází zdánlivě nekonzistentní tvrzení: „cílovou verzí navrhovaného rozhraní je C++20“ a „Zdrojové kódy navrhovaného nástroje budou využívat moderních prostředků standardů jazyka C++20 a C++23“. Vysvětlete.
  2. V textu je několikrát zmíněn přístup RAII implementován v tzv. UniqueHandle objektech. Toto spojení může být matoucí z hlediska vk::raii struktur poskytnutých ve vulkan.hpp rozhraní. Definujte, zda Vaše vygenerované rozhraní nějakým způsobem poskytuje podobné funkce jako vk::raii, ne jen Unique struktury.
  3. V textu je zmíněn „vlastní kontejner vector“. Je ověřeno, že tento kontejner funguje stejně jako standardní C++ vector? Připravte si graf kde jednoduchým experimentem tyto struktury porovnáte z hlediska výkonu.
  4. Syntaktický analyzátor využívá alokace paměti po blocích o velikosti 64 KB. Proč právě tato velikost?
  5. Vysvětlete pojem „obecný fallback, který zachovává pouze syntaktickou správnost“ v kontextu klasifikace příkazů. Co se děje v praxi? Jsou takové příkazy ponechány v původním C formátu?
Points proposed by reviewer: 89

Grade proposed by reviewer: B

Responsibility: Mgr. et Mgr. Hana Odstrčilová