From 8653885bb6780a8ed42c431fa3fd4ba274ebcb2a Mon Sep 17 00:00:00 2001 From: Gabor Galgoczy <ggabor2002@gmail.com> Date: Thu, 15 Feb 2024 19:58:35 +0100 Subject: [PATCH] Revise the first lecture --- CMakeLists.txt | 1 - docs/lectures/01.md | 37 ++++++++++++++++++++----------------- mkdocs.yml | 2 +- src/Renderer.cpp | 9 ++++----- src/Renderer.hpp | 6 ++++-- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 08c0ced..7fe106f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,7 +85,6 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator) # GLFW -set(GLFW_VULKAN_STATIC ON) FetchContent_Declare(GLFW GIT_REPOSITORY https://github.com/glfw/glfw.git GIT_TAG 3.3.9 diff --git a/docs/lectures/01.md b/docs/lectures/01.md index 9fc96cb..93c4607 100644 --- a/docs/lectures/01.md +++ b/docs/lectures/01.md @@ -48,9 +48,11 @@ Mivel ez egy Vulkan handle, ezért használat után nekünk kell "felszabadítan Renderer::Renderer() : m_instance{ create_instance() } {} ``` -Bizonyos játékmotorokhoz külön hardveres támogatás van, amit a Vulkan-nak ilyenkor lehet jelezni. Ez, és a használni tervezett legnagyobb API verziót egy `vk::ApplicationInfo` struct-ba szerveződik. Mi az alapbeállításokat fogjuk használni, ami olyan, mintha az 1.0-s verziót kértük volna. +Bizonyos játékmotorokhoz és appokhoz külön hardveres támogatás van, amit a Vulkan-nak ilyenkor lehet jelezni. +Az applikációnk által használni tervezett legnagyobb API verzió *1.0* lesz. +Ezeket az értékeket gyűjti össze a `vk::Application` struct, amelyet mi default-inicializálunk. -??? example "Hozzunk létre egy `vk::ApplicationInfo` típusú változót!" +??? example "Hozzuk létre a `vk::ApplicationInfo`-t!" ```cpp constexpr vk::ApplicationInfo application_info{}; @@ -60,7 +62,7 @@ Bizonyos játékmotorokhoz külön hardveres támogatás van, amit a Vulkan-nak A mi kódunk és a Vulkan függvényeken keresztül hívott kód közé [**layer**](https://renderdoc.org/vulkan-layer-guide.html)-eket helyezhetünk el profiling-hoz, debug-oláshoz, stb... -Debug-oláshoz beállítünk [egy layer](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers)-t, ami majd üzenet küld, ha elrontottunk valamit. +Debug-oláshoz beállítünk [egy layer](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers)-t, ami majd üzenet küld, ha elrontanánk valamit. ??? example "Ezt egy globális változóba szervezzük, mert még később is jól jöhet." @@ -74,9 +76,9 @@ Debug-oláshoz beállítünk [egy layer](https://vulkan-tutorial.com/Drawing_a_t !!! info "" - A debug üzenetek megformázásához szokás egy úgynevezett [DebugUtilsMessenger](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers#page_Message-callback) használata. Mi ezzel most nem foglalkozunk. + A debug üzenetek megformázásához szokás [DebugUtilsMessenger](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers#page_Message-callback)-t használni. Mi ezzel most nem foglalkozunk. -Ezeknék több mindent is beállíthatnánk még az Instance létrehozásához, de egyelőre megelékszünk ennyivel. +Ezeknél több mindent is beállíthatnánk még az Instance létrehozásához, de egyelőre megelégszünk ennyivel. !!! example "" @@ -105,7 +107,7 @@ Ezeknék több mindent is beállíthatnánk még az Instance létrehozásához, ## Physical Device -Minden a gépen jelen levő Vulkan-képes processzort egy `vk::PhysicalDevice` reprezentál könyvtár. Ezeket a `vk::Instance::enumeratePhysicalDevices` függvénnyel le is kérhetjük. +Minden a gépen jelen levő Vulkan-képes processzort egy `vk::PhysicalDevice`-al reprezentál könyvtár. Ezeket a `vk::Instance::enumeratePhysicalDevices` függvénnyel le is kérhetjük. Érdemes egy diszkrét GPU-val dolgozni, ha az jelen van, rosszabb esetben integrálttal. Így válasszuk ki a számunkra legmegfelelőbb egységet. @@ -150,9 +152,9 @@ Minden a gépen jelen levő Vulkan-képes processzort egy `vk::PhysicalDevice` r ## (Logical) Device -Mielőtt elkezdünk a GPU-n dolgozni, azelőtt elengedhetetlen a használni tervezett funkciók megadása. Habár, mi most ezek közül nem fogunk sokat használni, azért érdemes ezt is megemlíteni. +Mielőtt elkezdünk a GPU-n dolgozni, azelőtt elengedhetetlen a használni tervezett extra funkciók megadása. Egyelőre ezzel mi még nem élünk. -A (Logical) Device szintaktikailag nagyon hasonlít az Instance-hez. Itt is lesz olyan amit majd csak később állítunk be. A mostani alkalommal egyedül a `vk::Queue`-kra fogunk koncentrálni. +A (Logical) Device szintaktikailag nagyon hasonlít az Instance-hez. Itt is lesz olyan, amit majd csak később állítunk be. A mostani alkalommal egyedül a `vk::Queue`-kra fogunk koncentrálunk. A grafikus kártya egy hihetetlenül parallelizált eszköz. Ám ennek a kihasználásához adatot kell neki küldeni, és megmondani hogy mit csináljon. Ez a parancs feldolgozás *Queue*-kon keresztül történik, amelyek képesek párhuzamosan több "command" végrehajtására. @@ -162,7 +164,7 @@ A grafikus kártya egy hihetetlenül parallelizált eszköz. Ám ennek a kihaszn Egy `vk::Queue` többféle feladat végrehajtására is képes - legyen az grafikai, általános, adat-átvitel, vagy valami más. A GPU tervezők számunkra a hasonló tulajdonságokkal rendelkező *Queue*-kat úgynevezett *Queue family*-kben teszik elérhetővé. -Válasszunk ki egy grafikai munkát támogató családot (ezek megkötése, hogy adat-átvitelre is képesek legyenek), és abból is egy *Queue*-t. A mi céljainkhoz ez az egy elég lesz mindenre. +Válasszunk ki egy grafikai munkát támogató családot (ennek megkötése, hogy adat-átvitelt is támogasson), és abból is **egy** *Queue*-t. A mi céljainkhoz ez az egy elég lesz mindenre. !!! example "" @@ -183,7 +185,7 @@ Válasszunk ki egy grafikai munkát támogató családot (ezek megkötése, hogy } ``` -Végül hozzuk létre a *Device*-t is. +Adott minden, hogy a *Device*-t is létrehozzuk. !!! example "" @@ -224,8 +226,10 @@ Végül hozzuk létre a *Device*-t is. private: vk::UniqueInstance m_instance; - vk::UniqueDevice m_device; - vk::Queue m_graphics_queue; + vk::PhysicalDevice m_physical_device; + uint32_t m_graphics_queue_family; + vk::UniqueDevice m_device; + vk::Queue m_graphics_queue; }; ``` @@ -324,10 +328,9 @@ Végül hozzuk létre a *Device*-t is. Renderer::Renderer() : m_instance{ create_instance() }, - m_device{ create_device(choose_physical_device(*m_instance)) }, - m_graphics_queue{ m_device->getQueue( - find_graphics_queue_family(choose_physical_device(*m_instance)), - 0 - ) } + m_physical_device{ choose_physical_device(*m_instance) }, + m_graphics_queue_family{ find_graphics_queue_family(m_physical_device) }, + m_device{ create_device(m_physical_device) }, + m_graphics_queue{ m_device->getQueue(m_graphics_queue_family, 0) } {} ``` diff --git a/mkdocs.yml b/mkdocs.yml index e090ce4..626d863 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -47,4 +47,4 @@ markdown_extensions: - pymdownx.tabbed: alternate_style: true nav: - - 1. alkalom: lectures/01.md + - 1. lecke: lectures/01.md diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 76a1ecb..99326af 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -92,9 +92,8 @@ const std::vector<const char*> g_layers{ Renderer::Renderer() : m_instance{ create_instance() }, - m_device{ create_device(choose_physical_device(*m_instance)) }, - m_graphics_queue{ m_device->getQueue( - find_graphics_queue_family(choose_physical_device(*m_instance)), - 0 - ) } + m_physical_device{ choose_physical_device(*m_instance) }, + m_graphics_queue_family{ find_graphics_queue_family(m_physical_device) }, + m_device{ create_device(m_physical_device) }, + m_graphics_queue{ m_device->getQueue(m_graphics_queue_family, 0) } {} diff --git a/src/Renderer.hpp b/src/Renderer.hpp index e55d085..8a2613f 100644 --- a/src/Renderer.hpp +++ b/src/Renderer.hpp @@ -8,6 +8,8 @@ public: private: vk::UniqueInstance m_instance; - vk::UniqueDevice m_device; - vk::Queue m_graphics_queue; + vk::PhysicalDevice m_physical_device; + uint32_t m_graphics_queue_family; + vk::UniqueDevice m_device; + vk::Queue m_graphics_queue; }; -- GitLab