Přístupnostní navigace
E-application
Search Search Close
Bachelor's Thesis
Author of thesis: Jaroslav Hucel
Acad. year: 2025/2026
Supervisor: Ing. Jan Pečiva, Ph.D.
Reviewer: Ing. Tomáš Chlubna, Ph.D.
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.
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)
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
Language of thesis
Czech
Faculty
Fakulta informačních technologií
Department
Department of Computer Graphics and Multimedia
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 reportIng. 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
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ů.
Sám si sháněl literaturu a potřebné informace.
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.
Práce byla dokončena včas a její obsah prokonzultován. Vedoucí zkontroloval funkčnost odevzdaných spustitelných souborů.
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.
Grade proposed by supervisor: A
Reviewer’s reportIng. 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 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++.
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.
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).
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.
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.
Evaluation level: zadání splněno
Všechny body zadání byly splněny.
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.
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.
Grade proposed by reviewer: B
Responsibility: Mgr. et Mgr. Hana Odstrčilová