diff --git a/projects/apis/vulkan/loader/vulkan_queue_loader.c b/projects/apis/vulkan/loader/vulkan_queue_loader.c index 25f29fc..d424f35 100644 --- a/projects/apis/vulkan/loader/vulkan_queue_loader.c +++ b/projects/apis/vulkan/loader/vulkan_queue_loader.c @@ -1,8 +1,12 @@ #include "vulkan_loader.h" #include "extensions/queues/vulkan_device_queues.h" +#include gnQueueExtFunctions loadVulkanQueueFunctions() { return (gnQueueExtFunctions) { - ._gnGetPhysicalDeviceQueueProperties = vulkanPhysicalDeviceQueueProperties + ._gnGetPhysicalDeviceQueueProperties = vulkanPhysicalDeviceQueueProperties, + ._gnQueueSubmit = vulkanSubmitQueue, + ._gnQueueSubmitSync = vulkanSubmitSyncQueue, + ._gnGetDeviceQueue = getVulkanDeviceQueue }; } diff --git a/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.c b/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.c index 6d9a1b8..d89ae85 100644 --- a/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.c +++ b/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.c @@ -22,7 +22,7 @@ gnReturnCode vulkanPhysicalDeviceQueueProperties(gnPhysicalOutputDeviceHandle de return GN_SUCCESS; } -void gnGetDeviceQueue(gnOutputDevice device, uint32_t queueFamily, uint32_t queueIndex, gnQueue* queue) { +void getVulkanDeviceQueue(gnOutputDevice device, uint32_t queueFamily, uint32_t queueIndex, gnQueue* queue) { VkQueue vulkanQueue; vkGetDeviceQueue(device->outputDevice->device, queueFamily, queueIndex, &vulkanQueue); *queue = (uint64_t)vulkanQueue; diff --git a/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.h b/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.h index b065ee5..5f6f875 100644 --- a/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.h +++ b/projects/apis/vulkan/src/extensions/queues/vulkan_device_queues.h @@ -5,3 +5,4 @@ #include gnReturnCode vulkanPhysicalDeviceQueueProperties(gnPhysicalOutputDeviceHandle device, uint32_t queueFamilyCount, gnQueueFamilyProperties* queues); +void getVulkanDeviceQueue(gnOutputDevice device, uint32_t queueFamily, uint32_t queueIndex, gnQueue* queue); diff --git a/projects/apis/vulkan/src/submit/vulkan_submit.c b/projects/apis/vulkan/src/submit/vulkan_submit.c index f43a48f..687f069 100644 --- a/projects/apis/vulkan/src/submit/vulkan_submit.c +++ b/projects/apis/vulkan/src/submit/vulkan_submit.c @@ -1,6 +1,6 @@ #include "vulkan_submit.h" -gnReturnCode vulkanSubmitSync(gnDevice device, gnSubmitSyncInfo info) { +gnReturnCode vulkanSubmitSyncQueue(gnOutputDevice device, gnQueue queue, gnSubmitSyncInfo info) { VkSemaphore* waitSemaphores = malloc(sizeof(VkSemaphore) * info.waitCount); VkPipelineStageFlags* waitStages = malloc(sizeof(VkPipelineStageFlags) * info.waitCount); for (int i = 0; i < info.waitCount; i++) waitSemaphores[i] = info.waitSemaphores[i]->semaphore->semaphore; @@ -23,10 +23,7 @@ gnReturnCode vulkanSubmitSync(gnDevice device, gnSubmitSyncInfo info) { .pSignalSemaphores = signalSemaphores }; - VkQueue queue; - vkGetDeviceQueue(device->outputDevice->device, info.queueIndex, 0, &queue); - - if (vkQueueSubmit(device->outputDevice->queues[device->outputDevice->graphicsQueueIndex].queue, 1, &submitInfo, info.fence->fence->fence) != VK_SUCCESS) { + if (vkQueueSubmit((VkQueue)queue, 1, &submitInfo, info.fence->fence->fence) != VK_SUCCESS) { free(waitSemaphores); free(waitStages); free(commandBuffers); @@ -40,7 +37,11 @@ gnReturnCode vulkanSubmitSync(gnDevice device, gnSubmitSyncInfo info) { return GN_SUCCESS; } -gnReturnCode vulkanSubmit(gnDevice device, gnSubmitInfo info) { +gnReturnCode vulkanSubmitSync(gnDevice device, gnSubmitSyncInfo info) { + return vulkanSubmitSyncQueue(device, (gnQueue)device->outputDevice->queues[device->outputDevice->graphicsQueueIndex].queue, info); +} + +gnReturnCode vulkanSubmitQueue(gnOutputDevice device, gnQueue queue, gnSubmitInfo info) { VkCommandBuffer* commandBuffers = malloc(sizeof(VkCommandBuffer) * info.commandBufferCount); for (int i = 0; i < info.commandBufferCount; i++) commandBuffers[i] = info.commandBuffers[i]->commandBuffer->buffer; @@ -56,8 +57,12 @@ gnReturnCode vulkanSubmit(gnDevice device, gnSubmitInfo info) { }; vkResetFences(device->outputDevice->device, 1, &device->outputDevice->barrierFence); - if (vkQueueSubmit(device->outputDevice->queues[device->outputDevice->graphicsQueueIndex].queue, 1, &submitInfo, device->outputDevice->barrierFence) != VK_SUCCESS) + if (vkQueueSubmit((VkQueue)queue, 1, &submitInfo, device->outputDevice->barrierFence) != VK_SUCCESS) return GN_FAILED_TO_SUBMIT_COMMAND_BUFFER; vkWaitForFences(device->outputDevice->device, 1, &device->outputDevice->barrierFence, VK_TRUE, UINT64_MAX); return GN_SUCCESS; } + +gnReturnCode vulkanSubmit(gnDevice device, gnSubmitInfo info) { + return vulkanSubmitQueue(device, (gnQueue)device->outputDevice->queues[device->outputDevice->graphicsQueueIndex].queue, info); +} diff --git a/projects/apis/vulkan/src/submit/vulkan_submit.h b/projects/apis/vulkan/src/submit/vulkan_submit.h index e9da050..2d3ace7 100644 --- a/projects/apis/vulkan/src/submit/vulkan_submit.h +++ b/projects/apis/vulkan/src/submit/vulkan_submit.h @@ -7,5 +7,7 @@ #include #include "extensions/synchronization/commands/gryphn_sync_submit.h" +gnReturnCode vulkanSubmitSyncQueue(gnOutputDevice device, gnQueue queue, gnSubmitSyncInfo info); gnReturnCode vulkanSubmitSync(gnDevice device, gnSubmitSyncInfo info); +gnReturnCode vulkanSubmitQueue(gnOutputDevice device, gnQueue queue, gnSubmitInfo info); gnReturnCode vulkanSubmit(gnDevice device, gnSubmitInfo info); diff --git a/projects/extensions/queues/gryphn_queue_submit.h b/projects/extensions/queues/gryphn_queue_submit.h index 7b8f244..3517600 100644 --- a/projects/extensions/queues/gryphn_queue_submit.h +++ b/projects/extensions/queues/gryphn_queue_submit.h @@ -1,5 +1,6 @@ #pragma once +#include +#include -typedef struct gnQueueSubmitInfo { - -} gnQueueSubmitInfo; +gnReturnCode gnQueueSubmit(gnOutputDevice device, gnQueue queue, gnSubmitInfo info); +gnReturnCode gnQueueSubmitSync(gnOutputDevice device, gnQueue queue, gnSubmitSyncInfo info); diff --git a/projects/extensions/queues/queues_functions.h b/projects/extensions/queues/queues_functions.h index eed8f1b..689fd3b 100644 --- a/projects/extensions/queues/queues_functions.h +++ b/projects/extensions/queues/queues_functions.h @@ -4,8 +4,13 @@ #include "core/src/gryphn_handles.h" typedef struct gnQueueFamilyProperties gnQueueFamilyProperties; +typedef struct gnSubmitInfo gnSubmitInfo; +typedef struct gnSubmitSyncInfo gnSubmitSyncInfo; typedef struct gnQueueExtFunctions { gnReturnCode (*_gnGetPhysicalDeviceQueueProperties)(gnPhysicalOutputDeviceHandle device, uint32_t queueCount, gnQueueFamilyProperties* queues); void (*_gnGetDeviceQueue)(gnOutputDevice device, uint32_t queueFamily, uint32_t queueIndex, gnQueue* queue); + + gnReturnCode (*_gnQueueSubmit)(gnOutputDevice device, gnQueue queue, gnSubmitInfo info); + gnReturnCode (*_gnQueueSubmitSync)(gnOutputDevice device, gnQueue queue, gnSubmitSyncInfo info); } gnQueueExtFunctions; diff --git a/projects/extensions/synchronization/commands/gryphn_sync_submit.h b/projects/extensions/synchronization/commands/gryphn_sync_submit.h index d87f8a4..09ebff5 100644 --- a/projects/extensions/synchronization/commands/gryphn_sync_submit.h +++ b/projects/extensions/synchronization/commands/gryphn_sync_submit.h @@ -2,8 +2,6 @@ #include "stdint.h" #include "core/src/renderpass/gryphn_render_pass_descriptor.h" #include "core/src/gryphn_handles.h" -#include "extensions/synchronization/semaphore/gryphn_semaphore.h" -#include "extensions/synchronization/fence/gryphn_fence.h" typedef struct gnSubmitSyncInfo { uint32_t waitCount;