Find queue families on the given physical device.
104{
105 QueueFamilyIndices indices;
106 auto queue_families = device.getQueueFamilyProperties();
107
108 int i = 0;
109 for (const auto& queue_family : queue_families) {
110 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eGraphics) {
111 indices.graphics_family = i;
112 }
113
114 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eCompute && !(queue_family.queueFlags & vk::QueueFlagBits::eGraphics)) {
115 indices.compute_family = i;
116 }
117
118 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eTransfer && !(queue_family.queueFlags & vk::QueueFlagBits::eGraphics) && !(queue_family.queueFlags & vk::QueueFlagBits::eCompute)) {
119 indices.transfer_family = i;
120 }
121
122 if (surface && queue_family.queueCount > 0) {
123 vk::Bool32 presentSupport = device.getSurfaceSupportKHR(i, surface);
124 if (presentSupport) {
125 indices.present_family = i;
127 "Found presentation support in queue family {}", i);
128 }
129 }
130
131 i++;
132 }
133
134 if (indices.graphics_family.has_value()) {
135 if (!indices.compute_family.has_value()) {
136 indices.compute_family = indices.graphics_family;
137 }
138 if (!indices.transfer_family.has_value()) {
139 indices.transfer_family = indices.graphics_family;
140 }
141 }
142
143 return indices;
144}
#define MF_INFO(comp, ctx,...)
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
@ Core
Core engine, backend, subsystems.