From 629036542a40d2a0f877172c8abe479ad2a9d1fd Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Mon, 25 May 2026 18:03:38 -0400 Subject: [PATCH] make gryphn create all queue familes --- .../GryphnLoader/src/device/gryphn_device.c | 1 - Gryphn/apis/GryphnVulkan/src/vulkan_device.c | 37 ++++++++++--------- Gryphn/apis/GryphnVulkan/src/vulkan_device.h | 2 + 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/Gryphn/GryphnLoader/src/device/gryphn_device.c b/Gryphn/GryphnLoader/src/device/gryphn_device.c index bf13d94..0fa10b7 100644 --- a/Gryphn/GryphnLoader/src/device/gryphn_device.c +++ b/Gryphn/GryphnLoader/src/device/gryphn_device.c @@ -1,6 +1,5 @@ #include "gryphn_device.h" #include "instance/gryphn_instance.h" -#include "stdio.h" #include "stdlib.h" gnReturnCode gnCreateDevice(gnInstance instance, gnDeviceCreateInfo* createInfo, gnDevice* device) { diff --git a/Gryphn/apis/GryphnVulkan/src/vulkan_device.c b/Gryphn/apis/GryphnVulkan/src/vulkan_device.c index 8c5317d..4b3dd36 100644 --- a/Gryphn/apis/GryphnVulkan/src/vulkan_device.c +++ b/Gryphn/apis/GryphnVulkan/src/vulkan_device.c @@ -71,26 +71,22 @@ gnReturnCode vulkanCreateDevice(gnInstance instance, gnDeviceCreateInfo* info, g } } - // find queue familes for managment (ive decided that gryphn will manage vulkan queues for you cuz fuck queue manangment) - uint32_t graphicsFamily; uint32_t queueFamilyCount = 0; vkGetPhysicalDeviceQueueFamilyProperties(info->physicalDevice->internalData, &queueFamilyCount, NULL); VkQueueFamilyProperties* queueFamilyProperties = malloc(sizeof(VkQueueFamilyProperties) * queueFamilyCount); vkGetPhysicalDeviceQueueFamilyProperties(info->physicalDevice->internalData, &queueFamilyCount, queueFamilyProperties); - for (int i = 0; i < queueFamilyCount; i++) - if ((queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) == VK_QUEUE_GRAPHICS_BIT) - graphicsFamily = i; - - float queuePriority = 1.0f; - VkDeviceQueueCreateInfo graphicsQueueCreateInfo = { - .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, - .pNext = NULL, - .flags = 0, - .queueFamilyIndex = graphicsFamily, - .queueCount = 1, - .pQueuePriorities = &queuePriority - }; + VkDeviceQueueCreateInfo* queueCreateInfos = malloc(sizeof(VkDeviceQueueCreateInfo) * queueFamilyCount); + for (int i = 0; i < queueFamilyCount; i++) { + queueCreateInfos[i] = (VkDeviceQueueCreateInfo){ + .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, + .pNext = NULL, + .flags = 0, + .queueFamilyIndex = i, + .queueCount = 1, + .pQueuePriorities = (float[]){ 1.0f } + }; + } VkPhysicalDeviceFeatures deviceFeatures = { @@ -100,8 +96,8 @@ gnReturnCode vulkanCreateDevice(gnInstance instance, gnDeviceCreateInfo* info, g .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, .pNext = NULL, .flags = 0, - .queueCreateInfoCount = 1, - .pQueueCreateInfos = (VkDeviceQueueCreateInfo[]){ graphicsQueueCreateInfo }, + .queueCreateInfoCount = queueFamilyCount, + .pQueueCreateInfos = queueCreateInfos, .enabledExtensionCount = realEnabledExtensionCount, .ppEnabledExtensionNames = extensions, .pEnabledFeatures = &deviceFeatures, @@ -112,7 +108,12 @@ gnReturnCode vulkanCreateDevice(gnInstance instance, gnDeviceCreateInfo* info, g device->internalData = malloc(sizeof(vulkanDevice)); ((vulkanDevice*)device->internalData)->device = vkDevice; - vkGetDeviceQueue(vkDevice, graphicsFamily, 0, &((vulkanDevice*)device->internalData)->graphicsQueue); + for (int i = 0; i < queueFamilyCount; i++) { + if ((queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) == VK_QUEUE_GRAPHICS_BIT) { + vkGetDeviceQueue(vkDevice, i, 0, &((vulkanDevice*)device->internalData)->graphicsQueue); + break; + } + } device->dispatchTable.destroyDevice = vulkanDestroyDevice; free(extensions); diff --git a/Gryphn/apis/GryphnVulkan/src/vulkan_device.h b/Gryphn/apis/GryphnVulkan/src/vulkan_device.h index 9b646c1..d5949ec 100644 --- a/Gryphn/apis/GryphnVulkan/src/vulkan_device.h +++ b/Gryphn/apis/GryphnVulkan/src/vulkan_device.h @@ -3,5 +3,7 @@ #include typedef struct vulkanDevice { VkDevice device; + uint32_t queueCount; + VkQueue graphicsQueue; } vulkanDevice;