Skip to content
Snippets Groups Projects
Commit 73905a51 authored by n0F4x's avatar n0F4x
Browse files

Update lecture 1 to account for lecture 2 fixes

parent 717f922f
Branches
No related tags found
No related merge requests found
......@@ -9,7 +9,7 @@ A példák kiinduló kódja megtalálható [ezen a linken](https://git.sch.bme.h
A példák Vulkan mellett [glm](https://github.com/g-truc/glm), [GLFW](https://www.glfw.org/) és [VulkanMemoryAllocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator?tab=readme-ov-file) könyvtárakat használnak.
Érdemes még a [bevezető előadás](https://git.sch.bme.hu/kszk/devteam/vulkan-workshop/-/blob/master/docs/Vulkan%20Bevezet%C5%91.pptx?ref_type=heads) áttanulmányozása.
Érdemes még a [bevezető](../Bevezető.pptx) és a [mostani leckéhez tartozó](./Inicializálás.pptx) előadások áttanulmányozása.
## Általános
......@@ -184,29 +184,50 @@ Ez a parancs feldolgozás *Queue*-kon keresztül történik, amelyek képesek p
Egy `vk::Queue` többféle feladat végrehajtására is képes lehet - legyen az grafikai, általános feldolgozás, adat-átvitel, vagy valami más.
A GPU tervezők számunkra a hasonló tulajdonságokkal rendelkező *Queue*-kat úgynevezett *Queue family*-kbe csoportosítják.
Válasszunk ki egy grafikai munkát támogató családot (ebből már következik, hogy adat-átvitelt is támogat), és abból is **egy** *Queue*-t.
Válasszunk ki egy grafikai munkát támogató családot (ebből már következik, hogy adat-átvitelt is támogat), és majd abból is **egy** *queue*-t.
A mi céljainkhoz ez az egy elég lesz mindenre.
!!! example ""
```cpp
[[nodiscard]]
static auto find_graphics_queue_family(
vk::PhysicalDevice t_physical_device
) -> uint32_t
{
static auto find_queue_family_index(
const vk::PhysicalDevice physical_device
) -> std::optional<uint32_t> {
uint32_t index{};
for (const auto& properties : t_physical_device.getQueueFamilyProperties())
{
for (const auto &properties : physical_device.getQueueFamilyProperties()) {
if (properties.queueFlags & vk::QueueFlagBits::eGraphics) {
return index;
}
index++;
}
throw std::runtime_error{ "Could not find graphics queue family" };
return std::nullopt;
}
```
!!! info "`vk::PhysicalDevice` kiválasztása"
Az előző pontban nem beszéltem róla, de `physical_device` választáskor egy fontos feltétel, hogy legyen abban *graphics queue* a továbbiakra nézve.
Így ezt a feltételt is hozzáadtam:
??? example "*Filter physical devices*"
```cpp
[[nodiscard]]
auto choose_physical_device(const vk::Instance instance) -> vk::PhysicalDevice {
std::vector<vk::PhysicalDevice> physical_devices{};
std::ranges::remove_copy_if(
instance.enumeratePhysicalDevices(),
std::back_inserter(physical_devices),
[](vk::PhysicalDevice physical_device) {
return !(
find_queue_family_index(physical_device).has_value()
);
}
);
// ...
```
Adott minden, hogy a *Device*-t is létrehozzuk.
!!! example ""
......@@ -219,7 +240,7 @@ Adott minden, hogy a *Device*-t is létrehozzuk.
constexpr static std::array queue_priorities{ 1.f };
const vk::DeviceQueueCreateInfo queue_create_info{
.queueFamilyIndex = find_graphics_queue_family(t_physical_device),
.queueFamilyIndex = find_queue_family_index(t_physical_device),
.queueCount = 1,
.pQueuePriorities = queue_priorities.data(),
};
......@@ -233,7 +254,7 @@ Adott minden, hogy a *Device*-t is létrehozzuk.
}
```
!!! note ""
!!! info ""
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.
......@@ -258,7 +279,7 @@ private:
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_queue_family_index{ find_queue_family_index(m_physical_device) },
m_device{ create_device(m_physical_device) },
m_queue{ m_device->getQueue(m_queue_family_index, 0) }
{}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment