diff --git a/graphics/src/vulkan_base.c b/graphics/src/vulkan_base.c index 89cd30e9..63a4d6d9 100644 --- a/graphics/src/vulkan_base.c +++ b/graphics/src/vulkan_base.c @@ -387,6 +387,7 @@ uint8_t pick_physical_device() */ uint8_t create_device() { + size_t device_queues_count = 0; uint32_t queue_families_property_count = 0U; ssize_t graphics_family_idx = -1; ssize_t presentation_familiy_idx = -1; @@ -413,6 +414,7 @@ uint8_t create_device() graphics_family_idx = familyIdx; LOGI("Setting graphics family idx to %d", familyIdx); numberOfQueues = queue_family_properties[familyIdx].queueCount; + device_queues_count++; } } @@ -421,6 +423,11 @@ uint8_t create_device() vkGetPhysicalDeviceSurfaceSupportKHR(g_vulkan_state.physical_device, familyIdx, g_vulkan_state.surface, &presentSupport); if (presentSupport) { presentation_familiy_idx = familyIdx; + /* If this is the same queue family as in graphics family, don't increase queue count */ + //TODO: This is still ugly, but fixes an error. Change later. + if (presentation_familiy_idx != graphics_family_idx) { + device_queues_count++; + } LOGI("Setting present family idx to %d", familyIdx); } @@ -466,7 +473,7 @@ uint8_t create_device() device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; device_create_info.pNext = NULL; device_create_info.flags = 0U; - device_create_info.queueCreateInfoCount = 2u; /* For now one is enough. TODO: Change when needed. */ + device_create_info.queueCreateInfoCount = device_queues_count; device_create_info.pQueueCreateInfos = device_queue_createinfos; device_create_info.enabledLayerCount = 0; device_create_info.ppEnabledLayerNames = NULL;