From b3f72c94ae20117876a6b10b4029a8801ae7f2a9 Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Wed, 16 Jul 2025 19:10:20 -0400 Subject: [PATCH] device queue create infos --- .../src/output_device/vulkan_output_device.c | 34 ++++++++++++++----- .../src/output_device/gryphn_output_device.h | 17 +++++----- 2 files changed, 34 insertions(+), 17 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 63a8615..56b9ea1 100644 --- a/projects/apis/vulkan/src/output_device/vulkan_output_device.c +++ b/projects/apis/vulkan/src/output_device/vulkan_output_device.c @@ -8,14 +8,30 @@ gnReturnCode createOutputDevice(gnOutputDeviceHandle outputDevice, gnInstanceHandle instance, gnOutputDeviceInfo deviceInfo) { outputDevice->outputDevice = malloc(sizeof(gnPlatformOutputDevice)); - VkDeviceQueueCreateInfo* queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * deviceInfo.physicalDevice->physicalDevice->neededQueueCount); - float queuePriority = 1.0f; - for (int i = 0; i < deviceInfo.physicalDevice->physicalDevice->neededQueueCount; i++) { - queueCreateInfos[i].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; - queueCreateInfos[i].flags = 0; - queueCreateInfos[i].queueFamilyIndex = deviceInfo.physicalDevice->physicalDevice->neededQueues[i].queueIndex; - queueCreateInfos[i].queueCount = 1; - queueCreateInfos[i].pQueuePriorities = &queuePriority; + int createQueueCount = 0; + VkDeviceQueueCreateInfo* queueCreateInfos = NULL; + + if (!instance->enabledExtensions[GN_EXT_QUEUES]) { + queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * deviceInfo.physicalDevice->physicalDevice->neededQueueCount); + createQueueCount = deviceInfo.physicalDevice->physicalDevice->neededQueueCount; + float queuePriority = 1.0f; + for (int i = 0; i < deviceInfo.physicalDevice->physicalDevice->neededQueueCount; i++) { + queueCreateInfos[i].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queueCreateInfos[i].flags = 0; + queueCreateInfos[i].queueCount = 1; + queueCreateInfos[i].queueFamilyIndex = deviceInfo.physicalDevice->physicalDevice->neededQueues[i].queueIndex; + queueCreateInfos[i].pQueuePriorities = &queuePriority; + } + } else { + createQueueCount = deviceInfo.queueInfoCount; + queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * deviceInfo.queueInfoCount); + for (int i = 0; i < deviceInfo.queueInfoCount; i++) { + queueCreateInfos[i].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queueCreateInfos[i].flags = 0; + queueCreateInfos[i].queueCount = deviceInfo.queueInfos[i].queueCount; + queueCreateInfos[i].queueFamilyIndex = deviceInfo.queueInfos[i].queueFamilyIndex; + queueCreateInfos[i].pQueuePriorities = deviceInfo.queueInfos[i].queuePrioritys; + } } VkPhysicalDeviceFeatures deviceFeatures = { @@ -24,7 +40,7 @@ gnReturnCode createOutputDevice(gnOutputDeviceHandle outputDevice, gnInstanceHan VkDeviceCreateInfo deviceCreateInfo = { .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, - .queueCreateInfoCount = deviceInfo.physicalDevice->physicalDevice->neededQueueCount, + .queueCreateInfoCount = createQueueCount, .pQueueCreateInfos = queueCreateInfos, .pEnabledFeatures = &deviceFeatures }; diff --git a/projects/core/src/output_device/gryphn_output_device.h b/projects/core/src/output_device/gryphn_output_device.h index 75e4dc2..8b1dbad 100644 --- a/projects/core/src/output_device/gryphn_output_device.h +++ b/projects/core/src/output_device/gryphn_output_device.h @@ -2,19 +2,20 @@ #include #include -// typedef struct gnDeviceQueueInfo { -// int queueIndex; -// int queueCount; -// // float* queuePriority; -// } gnDeviceQueueInfo; - typedef struct gnOutputDeviceEnabledFeatures { } gnOutputDeviceEnabledFeatures; +typedef struct gnDeviceQueueInfo { + int queueFamilyIndex; + int queueCount; + float* queuePrioritys; +} gnDeviceQueueInfo; + typedef struct gnOutputDeviceInfo { - // uint32_t queueInfoCount; - // gnDeviceQueueInfo* queueInfos; + uint32_t queueInfoCount; + gnDeviceQueueInfo* queueInfos; // only used if GN_EXT_QUEUES is enabled + gnOutputDeviceEnabledFeatures enabledFeatures; gnPhysicalDevice physicalDevice; } gnOutputDeviceInfo;