@@ -9,7 +9,7 @@ A példák kiinduló kódja megtalálható [ezen a linken](https://git.sch.bme.h
...
@@ -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.
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
## Általános
...
@@ -184,29 +184,50 @@ Ez a parancs feldolgozás *Queue*-kon keresztül történik, amelyek képesek p
...
@@ -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.
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.
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.
A mi céljainkhoz ez az egy elég lesz mindenre.
!!! example ""
!!! example ""
```cpp
```cpp
[[nodiscard]]
[[nodiscard]]
static auto find_graphics_queue_family(
static auto find_queue_family_index(
vk::PhysicalDevice t_physical_device
const vk::PhysicalDevice physical_device
) -> uint32_t
) -> std::optional<uint32_t> {
{
uint32_t index{};
uint32_t index{};
for (const auto& properties : t_physical_device.getQueueFamilyProperties())
for (const auto &properties : physical_device.getQueueFamilyProperties()) {
{
if (properties.queueFlags & vk::QueueFlagBits::eGraphics) {
if (properties.queueFlags & vk::QueueFlagBits::eGraphics) {
return index;
return index;
}
}
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 {