diff --git a/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.c b/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.c index 8735607..95c76fd 100644 --- a/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.c +++ b/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.c @@ -23,6 +23,11 @@ gnReturnCode gnCommandPoolAllocateCommandBuffersFn(struct gnCommandBuffer_t* com return GN_SUCCESS; } +void gnResetCommandBufferFn(struct gnCommandBuffer_t* commandBuffer) { + vkResetCommandBuffer(commandBuffer->commandBuffer->buffer, 0); +} + + gnReturnCode gnBeginCommandBufferFn(struct gnCommandBuffer_t* commandBuffer) { VkCommandBufferBeginInfo beginInfo = { .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO diff --git a/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c b/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c index fb582af..54f4631 100644 --- a/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c +++ b/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c @@ -4,6 +4,7 @@ #include "vulkan_surface/vulkan_surface.h" #include "core/debugger/gryphn_debugger.h" #include "textures/vulkan_texture.h" +#include "sync/semaphore/vulkan_semaphore.h" gnReturnCode gnCreatePresentationQueueFn(gnPresentationQueue* presentationQueue, const gnOutputDevice* device, struct gnPresentationQueueInfo_t presentationInfo) { presentationQueue->presentationQueue = malloc(sizeof(struct gnPlatformPresentationQueue_t)); @@ -109,6 +110,13 @@ gnReturnCode gnCreatePresentationQueueFn(gnPresentationQueue* presentationQueue, return GN_SUCCESS; } +void gnPresentationQueueGetImageFn(gnPresentationQueue* presentationQueue, uint64_t timeout, struct gnSemaphore_t* semaphore, uint32_t* imageIndex) { + vkAcquireNextImageKHR( + presentationQueue->outputDevice->outputDevice->device, + presentationQueue->presentationQueue->swapChain, + timeout, semaphore->semaphore->semaphore, VK_NULL_HANDLE, imageIndex); +} + void gnDestroyPresentationQueueFn(gnPresentationQueue* queue) { for (int i = 0; i < queue->imageCount; i++) vkDestroyImageView(queue->outputDevice->outputDevice->device, queue->presentationQueue->swapChainImageViews[i], NULL); diff --git a/src/core/command/command_buffer/gryphn_command_buffer.c b/src/core/command/command_buffer/gryphn_command_buffer.c index f157ed9..b92e539 100644 --- a/src/core/command/command_buffer/gryphn_command_buffer.c +++ b/src/core/command/command_buffer/gryphn_command_buffer.c @@ -9,6 +9,10 @@ gnReturnCode gnCommandPoolAllocateCommandBuffers(struct gnCommandBuffer_t* buffe return commandPool->commandFunctions->_gnCommandPoolAllocateCommandBuffers(buffers, count, commandPool); } +void gnResetCommandBuffer(struct gnCommandBuffer_t* commandBuffer) { + commandBuffer->commandPool->commandFunctions->_gnResetCommandBuffer(commandBuffer); +} + gnReturnCode gnBeginCommandBuffer(struct gnCommandBuffer_t* commandBuffer) { return commandBuffer->commandPool->commandFunctions->_gnBeginCommandBuffer(commandBuffer); } diff --git a/src/core/command/command_buffer/gryphn_command_buffer.h b/src/core/command/command_buffer/gryphn_command_buffer.h index 0f9d831..932968d 100644 --- a/src/core/command/command_buffer/gryphn_command_buffer.h +++ b/src/core/command/command_buffer/gryphn_command_buffer.h @@ -8,5 +8,6 @@ typedef struct gnCommandBuffer_t { gnReturnCode gnCommandPoolAllocateCommandBuffers(struct gnCommandBuffer_t* buffers, uint32_t count, struct gnCommandPool_t* commandPool); +void gnResetCommandBuffer(struct gnCommandBuffer_t* commandBuffer); gnReturnCode gnBeginCommandBuffer(struct gnCommandBuffer_t* commandBuffer); gnReturnCode gnEndCommandBuffer(struct gnCommandBuffer_t* commandBuffer); diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index 91de13f..e1d11f1 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -58,6 +58,7 @@ typedef struct gnFunctions_t { #include "core/presentation_queue/gryphn_presentation_queue.h" typedef struct gnDeviceFunctions_t { gnReturnCode (*_gnCreatePresentationQueue)(gnPresentationQueue* presentationQueue, const gnOutputDevice* device, struct gnPresentationQueueInfo_t presentationInfo); + void (*_gnPresentationQueueGetImage)(gnPresentationQueue* presentationQueue, uint64_t timeout, struct gnSemaphore_t* semaphore, uint32_t* imageIndex); void (*_gnDestroyPresentationQueue)(gnPresentationQueue *presentationQueue); gnReturnCode (*_gnCreateShaderModule)(struct gnShaderModule_t* module, struct gnOutputDevice_t* device, struct gnShaderModuleInfo_t shaderModuleInfo); @@ -88,6 +89,7 @@ typedef struct gnDeviceFunctions_t { typedef struct gnCommandFunctions_t { gnReturnCode (*_gnCommandPoolAllocateCommandBuffers)(struct gnCommandBuffer_t* commandBuffers, uint32_t count, struct gnCommandPool_t* pool); gnReturnCode (*_gnBeginCommandBuffer)(struct gnCommandBuffer_t* commandBuffer); + void (*_gnResetCommandBuffer)(struct gnCommandBuffer_t* commandBuffer); gnReturnCode (*_gnEndCommandBuffer)(struct gnCommandBuffer_t* commandBuffer); void (*_gnCommandBeginRenderPass)(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo); diff --git a/src/core/instance/init/gryphn_init.c b/src/core/instance/init/gryphn_init.c index 6c85556..eab3abe 100644 --- a/src/core/instance/init/gryphn_init.c +++ b/src/core/instance/init/gryphn_init.c @@ -70,6 +70,7 @@ void gnLoadFunctions(struct gnDynamicLibrary_t* lib, struct gnFunctions_t* funct void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFunctions_t* functions) { gnLoadDLLFunction(lib, functions->_gnCreatePresentationQueue, "gnCreatePresentationQueueFn"); + gnLoadDLLFunction(lib, functions->_gnPresentationQueueGetImage, "gnPresentationQueueGetImageFn"); gnLoadDLLFunction(lib, functions->_gnDestroyPresentationQueue, "gnDestroyPresentationQueueFn"); gnLoadDLLFunction(lib, functions->_gnCreateShaderModule, "gnCreateShaderModuleFn"); gnLoadDLLFunction(lib, functions->_gnDestroyShaderModule, "gnDestroyShaderModuleFn"); @@ -93,9 +94,12 @@ void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFuncti void gnLoadCommandFunctions(struct gnDynamicLibrary_t* lib, struct gnCommandFunctions_t* functions) { gnLoadDLLFunction(lib, functions->_gnCommandPoolAllocateCommandBuffers, "gnCommandPoolAllocateCommandBuffersFn"); gnLoadDLLFunction(lib, functions->_gnBeginCommandBuffer, "gnBeginCommandBufferFn"); + gnLoadDLLFunction(lib, functions->_gnResetCommandBuffer, "gnResetCommandBufferFn"); + gnLoadDLLFunction(lib, functions->_gnEndCommandBuffer, "gnEndCommandBufferFn"); gnLoadDLLFunction(lib, functions->_gnCommandBeginRenderPass, "gnCommandBeginRenderPassFn"); gnLoadDLLFunction(lib, functions->_gnCommandEndRenderPass, "gnCommandEndRenderPassFn"); + gnLoadDLLFunction(lib, functions->_gnCommandBindGraphicsPipeline, "gnCommandBindGraphicsPipelineFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetViewport, "gnCommandSetViewportFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetScissor, "gnCommandSetScissorFn"); - gnLoadDLLFunction(lib, functions->_gnCommandDraw, "gnCommandDraw"); + gnLoadDLLFunction(lib, functions->_gnCommandDraw, "gnCommandDrawFn"); } diff --git a/src/core/presentation_queue/gryphn_presentation_queue.c b/src/core/presentation_queue/gryphn_presentation_queue.c index 900d725..b7efd18 100644 --- a/src/core/presentation_queue/gryphn_presentation_queue.c +++ b/src/core/presentation_queue/gryphn_presentation_queue.c @@ -6,6 +6,10 @@ gnReturnCode gnCreatePresentationQueue(gnPresentationQueue* presentationQueue, s return device->deviceFunctions->_gnCreatePresentationQueue(presentationQueue, device, presentationInfo); } +void gnPresentationQueueGetImage(gnPresentationQueue* presentationQueue, uint64_t timeout, struct gnSemaphore_t* semaphore, uint32_t* imageIndex) { + presentationQueue->outputDevice->deviceFunctions->_gnPresentationQueueGetImage(presentationQueue, timeout, semaphore, imageIndex); +} + void gnDestroyPresentationQueue(gnPresentationQueue *presentationQueue) { presentationQueue->outputDevice->deviceFunctions->_gnDestroyPresentationQueue(presentationQueue); } diff --git a/src/core/presentation_queue/gryphn_presentation_queue.h b/src/core/presentation_queue/gryphn_presentation_queue.h index 969961e..a338703 100644 --- a/src/core/presentation_queue/gryphn_presentation_queue.h +++ b/src/core/presentation_queue/gryphn_presentation_queue.h @@ -3,6 +3,7 @@ #include #include #include +#include typedef struct gnPresentationQueueInfo_t { uint32_t minImageCount; @@ -25,4 +26,5 @@ typedef struct gnPresentationQueue_t { } gnPresentationQueue; gnReturnCode gnCreatePresentationQueue(gnPresentationQueue* presentationQueue, struct gnOutputDevice_t* device, struct gnPresentationQueueInfo_t presentationInfo); +void gnPresentationQueueGetImage(gnPresentationQueue* presentationQueue, uint64_t timeout, struct gnSemaphore_t* semaphore, uint32_t* imageIndex); void gnDestroyPresentationQueue(gnPresentationQueue* presentationQueue);