MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ find_queue_families()

QueueFamilyIndices MayaFlux::Core::VKDevice::find_queue_families ( vk::PhysicalDevice  device,
vk::SurfaceKHR  surface = nullptr 
)
private

Find queue families on the given physical device.

Parameters
devicePhysical device to query
surfaceOptional surface to check for presentation support
Returns
QueueFamilyIndices with found queue family indices

Definition at line 143 of file VKDevice.cpp.

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.

References MayaFlux::Core::QueueFamilyIndices::compute_family, MayaFlux::Journal::Core, MayaFlux::Core::QueueFamilyIndices::graphics_family, MayaFlux::Journal::GraphicsBackend, MF_INFO, MayaFlux::Core::QueueFamilyIndices::present_family, and MayaFlux::Core::QueueFamilyIndices::transfer_family.

Referenced by pick_physical_device().

+ Here is the caller graph for this function: