From 70f8d5f31d16cedae5fc027f79b6adada3f1a377 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Tue, 12 Aug 2025 18:03:41 -0400 Subject: [PATCH] fix transfer queue jazz --- .../apis/vulkan/src/output_device/vulkan_output_device.c | 9 +++++++-- .../src/presentation_queue/vulkan_presentation_queue.c | 2 -- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/projects/apis/vulkan/src/output_device/vulkan_output_device.c b/projects/apis/vulkan/src/output_device/vulkan_output_device.c index 3200ea9..ff102bd 100644 --- a/projects/apis/vulkan/src/output_device/vulkan_output_device.c +++ b/projects/apis/vulkan/src/output_device/vulkan_output_device.c @@ -8,6 +8,8 @@ #include "vulkan_result_converter.h" #include "string.h" +#include "stdio.h" + gnReturnCode createVulkanOutputDevice(gnInstanceHandle instance, gnOutputDeviceHandle device, gnOutputDeviceInfo deviceInfo) { device->outputDevice = malloc(sizeof(gnPlatformOutputDevice)); device->outputDevice->physicalDevice = deviceInfo.physicalDevice->physicalDevice->device; @@ -72,17 +74,20 @@ gnReturnCode createVulkanOutputDevice(gnInstanceHandle instance, gnOutputDeviceH device->outputDevice->queues = malloc(sizeof(vulkanQueue) * deviceInfo.physicalDevice->physicalDevice->neededQueueCount); uint32_t transferQueue = 0; + gnBool foundTransferQueue = GN_FALSE, foundGraphicsQueue = GN_FALSE; for (uint32_t i = 0; i < deviceInfo.physicalDevice->physicalDevice->neededQueueCount; i++) { device->outputDevice->queues[i].queueInfo = deviceInfo.physicalDevice->physicalDevice->neededQueues[i]; vkGetDeviceQueue(device->outputDevice->device, deviceInfo.physicalDevice->physicalDevice->neededQueues[i].queueIndex, 0, &device->outputDevice->queues[i].queue); - if ((device->outputDevice->queues[i].queueInfo.createFlags & VK_QUEUE_TRANSFER_BIT) == VK_QUEUE_TRANSFER_BIT) { + if ((device->outputDevice->queues[i].queueInfo.createFlags & VK_QUEUE_TRANSFER_BIT) == VK_QUEUE_TRANSFER_BIT && !foundTransferQueue) { device->outputDevice->transferQueueIndex = i; transferQueue = device->outputDevice->queues[i].queueInfo.queueIndex; + foundTransferQueue = GN_TRUE; } - if ((device->outputDevice->queues[i].queueInfo.createFlags & VK_QUEUE_GRAPHICS_BIT) == VK_QUEUE_GRAPHICS_BIT) { + if ((device->outputDevice->queues[i].queueInfo.createFlags & VK_QUEUE_GRAPHICS_BIT) == VK_QUEUE_GRAPHICS_BIT && !foundGraphicsQueue) { device->outputDevice->graphicsQueueIndex = i; + foundGraphicsQueue = GN_FALSE; } } diff --git a/projects/apis/vulkan/src/presentation_queue/vulkan_presentation_queue.c b/projects/apis/vulkan/src/presentation_queue/vulkan_presentation_queue.c index 04fe22e..656550b 100644 --- a/projects/apis/vulkan/src/presentation_queue/vulkan_presentation_queue.c +++ b/projects/apis/vulkan/src/presentation_queue/vulkan_presentation_queue.c @@ -6,8 +6,6 @@ #include "sync/semaphore/vulkan_semaphore.h" #include -#include "stdio.h" - gnReturnCode createPresentationQueue(gnPresentationQueueHandle presentationQueue, const gnDevice device, gnPresentationQueueInfo presentationInfo) { presentationQueue->presentationQueue = malloc(sizeof(struct gnPlatformPresentationQueue_t));