diff --git a/docs/lectures/01/index.md b/docs/lectures/01/index.md index 3344875e3466b1c87b4b8f7bf904c11b38f444ca..1ae41838a2ff230af106418f5a55423c0995dbaf 100644 --- a/docs/lectures/01/index.md +++ b/docs/lectures/01/index.md @@ -130,7 +130,7 @@ Minden a gépen jelen levő Vulkan-képes processzort egy `vk::PhysicalDevice`-a throw std::runtime_error{ "No Vulkan physical device is available." }; } - auto ranked_devices_view{ + const auto ranked_devices_view{ physical_devices | std::views::transform([](vk::PhysicalDevice physical_device) { switch (physical_device.getProperties().deviceType) { case vk::PhysicalDeviceType::eDiscreteGpu: @@ -202,12 +202,15 @@ Adott minden, hogy a *Device*-t is létrehozzuk. static auto create_device(const vk::PhysicalDevice t_physical_device) -> vk::UniqueDevice { + constexpr static std::array queue_priorities{ 1.f }; + const vk::DeviceQueueCreateInfo queue_create_info{ .queueFamilyIndex = find_graphics_queue_family(t_physical_device), .queueCount = 1, + .pQueuePriorities = queue_priorities.data(), }; - vk::DeviceCreateInfo device_create_info{ + const vk::DeviceCreateInfo device_create_info{ .queueCreateInfoCount = 1, .pQueueCreateInfos = &queue_create_info, }; @@ -216,6 +219,33 @@ Adott minden, hogy a *Device*-t is létrehozzuk. } ``` -!!! tip "" - - A `Renderer`-hez adjuk hozzá az így létrejövő `vk::UniqueDevice`-t, és a kiválasztott `vk::Queue`-t is. (Utóbbi lentebb a végső kódban látható.) +!!! note "" + + Queue-k kérésekor meg kell adni egy köztük kialakított prioritási sorrendet, ami queue-k közti ütemezéshez hasznos. + Sajnos ha csak egy queue-t kérünk, annak a prioritását is specifikálni kell [0.0, 1.0] között. + +Végül a `Renderer`-hez adjuk hozzá az így létrejövő `vk::UniqueDevice`-t, és a kiválasztott `vk::Queue`-t is. + +```cpp title="Renderer.hpp" +class Renderer { +public: + Renderer(); + +private: + vk::UniqueInstance m_instance; + vk::PhysicalDevice m_physical_device; + uint32_t m_queue_family_index; + vk::UniqueDevice m_device; + vk::Queue m_queue; +}; +``` + +```cpp title="Renderer.cpp" +Renderer::Renderer() + : m_instance{ create_instance() }, + m_physical_device{ choose_physical_device(*m_instance) }, + m_queue_family_index{ find_graphics_queue_family(m_physical_device) }, + m_device{ create_device(m_physical_device) }, + m_queue{ m_device->getQueue(m_queue_family_index, 0) } +{} +```