Find queue families on the given physical device.
559{
560 QueueFamilyIndices indices;
561 auto queue_families =
device.getQueueFamilyProperties();
562
563 int i = 0;
564 for (const auto& queue_family : queue_families) {
565 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eGraphics) {
566 indices.graphics_family = i;
567 }
568
569 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eCompute && !(queue_family.queueFlags & vk::QueueFlagBits::eGraphics)) {
570 indices.compute_family = i;
571 }
572
573 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eTransfer && !(queue_family.queueFlags & vk::QueueFlagBits::eGraphics) && !(queue_family.queueFlags & vk::QueueFlagBits::eCompute)) {
574 indices.transfer_family = i;
575 }
576
577 i++;
578 }
579
580 if (indices.graphics_family.has_value()) {
581 if (!indices.compute_family.has_value()) {
582 indices.compute_family = indices.graphics_family;
583 }
584 if (!indices.transfer_family.has_value()) {
585 indices.transfer_family = indices.graphics_family;
586 }
587 }
588
589 return indices;
590}
vk::PhysicalDevice device