Find queue families on the given physical device.
144{
145 QueueFamilyIndices indices;
146 auto queue_families = device.getQueueFamilyProperties();
147
148 int i = 0;
149 for (const auto& queue_family : queue_families) {
150 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eGraphics) {
151 indices.graphics_family = i;
152 }
153
154 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eCompute && !(queue_family.queueFlags & vk::QueueFlagBits::eGraphics)) {
155 indices.compute_family = i;
156 }
157
158 if (queue_family.queueCount > 0 && queue_family.queueFlags & vk::QueueFlagBits::eTransfer && !(queue_family.queueFlags & vk::QueueFlagBits::eGraphics) && !(queue_family.queueFlags & vk::QueueFlagBits::eCompute)) {
159 indices.transfer_family = i;
160 }
161
162 if (surface && queue_family.queueCount > 0) {
163 vk::Bool32 presentSupport = device.getSurfaceSupportKHR(i, surface);
164 if (presentSupport) {
165 indices.present_family = i;
167 "Found presentation support in queue family {}", i);
168 }
169 }
170
171 i++;
172 }
173
174 if (indices.graphics_family.has_value()) {
175 if (!indices.compute_family.has_value()) {
176 indices.compute_family = indices.graphics_family;
177 }
178 if (!indices.transfer_family.has_value()) {
179 indices.transfer_family = indices.graphics_family;
180 }
181 }
182
183 return indices;
184}
#define MF_INFO(comp, ctx,...)
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
@ Core
Core engine, backend, subsystems.