// ============================================= // Aster: physical_device.cpp // Copyright (c) 2020-2024 Anish Bhobe // ============================================= #include "physical_device.h" std::vector PhysicalDevice::get_queue_families(const Window *_window) const { auto queue_families_ = device.getQueueFamilyProperties(); std::vector queue_family_infos; queue_family_infos.reserve(queue_families_.size()); u32 family_index = 0; for (const auto &queue_family : queue_families_) { QueueSupportFlags support; if (queue_family.queueFlags & vk::QueueFlagBits::eGraphics) { support |= QueueSupportFlagBits::eGraphics; } if (queue_family.queueFlags & vk::QueueFlagBits::eCompute) { support |= QueueSupportFlagBits::eCompute; } if (queue_family.queueFlags & vk::QueueFlagBits::eTransfer) { support |= QueueSupportFlagBits::eTransfer; } try { if (device.getSurfaceSupportKHR(family_index, *_window->surface)) { support |= QueueSupportFlagBits::ePresent; } } catch (const std::exception &err) { ERROR("Failure in finding surface support, all possibilities fatal. Failed with "s + err.what()); throw; } VERBOSE(fmt::format("Queue({}): {}", family_index, to_string(support))); queue_family_infos.push_back({ .index = family_index, .count = queue_family.queueCount, .queue_support = support, }); ++family_index; } return queue_family_infos; }