move present over to sync extension

This commit is contained in:
Gregory Wells
2025-07-09 20:35:16 -04:00
parent f44b73665b
commit 9ae7689ab8
11 changed files with 64 additions and 8 deletions

View File

@@ -53,7 +53,7 @@ gnDeviceFunctions loadVulkanDeviceFunctions() {
._gnDestroyTexture = destroyTexture, ._gnDestroyTexture = destroyTexture,
._gnSubmit = vulkanSubmit, ._gnSubmit = vulkanSubmit,
._gnPresent = present, ._gnPresent = vulkanPresent,
._gnWaitForDevice = waitForDevice ._gnWaitForDevice = waitForDevice
}; };

View File

@@ -3,6 +3,7 @@
#include <sync/fence/vulkan_fence.h> #include <sync/fence/vulkan_fence.h>
#include "presentation_queue/vulkan_presentation_queue.h" #include "presentation_queue/vulkan_presentation_queue.h"
#include "submit/vulkan_submit.h" #include "submit/vulkan_submit.h"
#include "present/vulkan_present.h"
gnSyncExtFunctions loadVulkanSyncFunctions() { gnSyncExtFunctions loadVulkanSyncFunctions() {
return (gnSyncExtFunctions){ return (gnSyncExtFunctions){
@@ -16,6 +17,7 @@ gnSyncExtFunctions loadVulkanSyncFunctions() {
._gnResetFence = resetFence, ._gnResetFence = resetFence,
._gnDestroyFence = destroyFence, ._gnDestroyFence = destroyFence,
._gnSubmitSync = vulkanSubmitSync ._gnSubmitSync = vulkanSubmitSync,
._gnPresentSync = vulkanPresentSync
}; };
} }

View File

@@ -1,6 +1,7 @@
#include "vulkan_present.h" #include "vulkan_present.h"
#include "extensions/synchronization/commands/gryphn_sync_present.h"
gnReturnCode present(gnDevice device, gnPresentInfo info) { gnReturnCode vulkanPresentSync(gnDevice device, gnPresentSyncInfo info) {
VkSemaphore* waitSemaphores = malloc(sizeof(VkSemaphore) * info.waitCount); VkSemaphore* waitSemaphores = malloc(sizeof(VkSemaphore) * info.waitCount);
for (int i = 0; i < info.waitCount; i++) waitSemaphores[i] = info.waitSemaphores[i]->semaphore->semaphore; for (int i = 0; i < info.waitCount; i++) waitSemaphores[i] = info.waitSemaphores[i]->semaphore->semaphore;
@@ -24,3 +25,26 @@ gnReturnCode present(gnDevice device, gnPresentInfo info) {
if (result == VK_SUBOPTIMAL_KHR) return GN_SUBOPTIMAL_PRESENTATION_QUEUE; if (result == VK_SUBOPTIMAL_KHR) return GN_SUBOPTIMAL_PRESENTATION_QUEUE;
return GN_SUCCESS; return GN_SUCCESS;
} }
gnReturnCode vulkanPresent(gnDevice device, gnPresentInfo info) {
VkSwapchainKHR* swapchains = malloc(sizeof(VkSwapchainKHR) * info.presentationQueueCount);
for (int i = 0; i < info.presentationQueueCount; i++) swapchains[i] = info.presentationQueues[i]->presentationQueue->swapChain;
VkPresentInfoKHR presentInfo = {
.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
.waitSemaphoreCount = 0,
.pWaitSemaphores = NULL,
.swapchainCount = info.presentationQueueCount,
.pSwapchains = swapchains,
.pImageIndices = info.imageIndices
};
VkQueue queue;
vkGetDeviceQueue(device->outputDevice->device, info.queueIndex, 0, &queue);
VkResult result = vkQueuePresentKHR(queue, &presentInfo);
if (result == VK_ERROR_OUT_OF_DATE_KHR) return GN_OUT_OF_DATE_PRESENTATION_QUEUE;
if (result == VK_SUBOPTIMAL_KHR) return GN_SUBOPTIMAL_PRESENTATION_QUEUE;
return GN_SUCCESS;
}

View File

@@ -3,4 +3,5 @@
#include <presentation_queue/vulkan_presentation_queue.h> #include <presentation_queue/vulkan_presentation_queue.h>
#include <output_device/vulkan_output_devices.h> #include <output_device/vulkan_output_devices.h>
gnReturnCode present(gnDevice device, gnPresentInfo info); gnReturnCode vulkanPresentSync(gnDevice device, gnPresentSyncInfo info);
gnReturnCode vulkanPresent(gnDevice device, gnPresentInfo info);

View File

@@ -1,11 +1,9 @@
#pragma once #pragma once
#include "utils/gryphn_error_code.h"
#include "stdint.h" #include "stdint.h"
#include "utils/gryphn_error_code.h"
#include "gryphn_handles.h" #include "gryphn_handles.h"
typedef struct gnPresentInfo { typedef struct gnPresentInfo {
uint32_t waitCount;
gnSemaphoreHandle* waitSemaphores;
uint32_t presentationQueueCount; uint32_t presentationQueueCount;
gnPresentationQueueHandle* presentationQueues; gnPresentationQueueHandle* presentationQueues;
uint32_t* imageIndices; uint32_t* imageIndices;

View File

@@ -0,0 +1,7 @@
#include "gryphn_sync_present.h"
#include "core/src/output_device/gryphn_output_device.h"
#include "core/src/instance/gryphn_instance.h"
gnReturnCode gnPresentSync(gnOutputDeviceHandle device, gnPresentSyncInfo info) {
return device->instance->callingLayer->syncFunctions._gnPresentSync(device, info);
}

View File

@@ -0,0 +1,15 @@
#pragma once
#include "stdint.h"
#include "utils/gryphn_error_code.h"
#include "gryphn_handles.h"
typedef struct gnPresentSyncInfo {
uint32_t waitCount;
gnSemaphoreHandle* waitSemaphores;
uint32_t presentationQueueCount;
gnPresentationQueueHandle* presentationQueues;
uint32_t* imageIndices;
uint32_t queueIndex;
} gnPresentSyncInfo;
gnReturnCode gnPresentSync(gnOutputDeviceHandle device, gnPresentSyncInfo info);

View File

@@ -4,6 +4,7 @@
#include "core/src/gryphn_handles.h" #include "core/src/gryphn_handles.h"
typedef struct gnSubmitSyncInfo gnSubmitSyncInfo; typedef struct gnSubmitSyncInfo gnSubmitSyncInfo;
typedef struct gnPresentSyncInfo gnPresentSyncInfo;
typedef struct gnSyncExtFunctions { typedef struct gnSyncExtFunctions {
gnReturnCode (*_gnPresentationQueueGetImageAsync)(gnPresentationQueueHandle presentationQueue, uint64_t timeout, gnSemaphoreHandle semaphore, uint32_t* imageIndex); gnReturnCode (*_gnPresentationQueueGetImageAsync)(gnPresentationQueueHandle presentationQueue, uint64_t timeout, gnSemaphoreHandle semaphore, uint32_t* imageIndex);
@@ -17,4 +18,5 @@ typedef struct gnSyncExtFunctions {
void (*_gnDestroyFence)(gnFenceHandle fence); void (*_gnDestroyFence)(gnFenceHandle fence);
gnReturnCode (*_gnSubmitSync)(gnOutputDevice device, gnSubmitSyncInfo info); gnReturnCode (*_gnSubmitSync)(gnOutputDevice device, gnSubmitSyncInfo info);
gnReturnCode (*_gnPresentSync)(gnOutputDeviceHandle device, gnPresentSyncInfo info);
} gnSyncExtFunctions; } gnSyncExtFunctions;

View File

@@ -5,6 +5,7 @@
#include "synchronization/semaphore/gryphn_semaphore.h" #include "synchronization/semaphore/gryphn_semaphore.h"
#include "synchronization/fence/gryphn_fence.h" #include "synchronization/fence/gryphn_fence.h"
#include "synchronization/commands/gryphn_sync_submit.h" #include "synchronization/commands/gryphn_sync_submit.h"
#include "synchronization/commands/gryphn_sync_present.h"
gnReturnCode checkPresentationQueueGetImageAsync(gnPresentationQueueHandle presentationQueue, uint64_t timeout, gnSemaphoreHandle semaphore, uint32_t* imageIndex) { gnReturnCode checkPresentationQueueGetImageAsync(gnPresentationQueueHandle presentationQueue, uint64_t timeout, gnSemaphoreHandle semaphore, uint32_t* imageIndex) {
CHECK_FUNCTION_WITH_RETURN_CODE(presentationQueue->outputDevice->instance, _gnPresentationQueueGetImageAsync, syncFunctions, presentationQueue, timeout, semaphore, imageIndex); CHECK_FUNCTION_WITH_RETURN_CODE(presentationQueue->outputDevice->instance, _gnPresentationQueueGetImageAsync, syncFunctions, presentationQueue, timeout, semaphore, imageIndex);
@@ -33,3 +34,7 @@ void checkDestroyFence(gnFenceHandle fence) {
gnReturnCode checkSubmitSync(gnOutputDevice device, gnSubmitSyncInfo info) { gnReturnCode checkSubmitSync(gnOutputDevice device, gnSubmitSyncInfo info) {
CHECK_FUNCTION_WITH_RETURN_CODE(device->instance, _gnSubmitSync, syncFunctions, device, info); CHECK_FUNCTION_WITH_RETURN_CODE(device->instance, _gnSubmitSync, syncFunctions, device, info);
} }
gnReturnCode checkPresentSync(gnOutputDevice device, gnPresentSyncInfo info) {
CHECK_FUNCTION_WITH_RETURN_CODE(device->instance, _gnPresentSync, syncFunctions, device, info);
}

View File

@@ -10,3 +10,4 @@ void checkDestroyFence(gnFenceHandle fence);
// gnReturnCode fdsfsdf(gnOutputDevice device, gnSubmitSyncInfo info); // gnReturnCode fdsfsdf(gnOutputDevice device, gnSubmitSyncInfo info);
gnReturnCode checkSubmitSync(gnOutputDevice device, gnSubmitSyncInfo info); gnReturnCode checkSubmitSync(gnOutputDevice device, gnSubmitSyncInfo info);
gnReturnCode checkPresentSync(gnOutputDevice device, gnPresentSyncInfo info);

View File

@@ -117,6 +117,7 @@ gnSyncExtFunctions loadFunctionLoaderSyncExtFunctions() {
._gnResetFence = checkResetFence, ._gnResetFence = checkResetFence,
._gnDestroyFence = checkDestroyFence, ._gnDestroyFence = checkDestroyFence,
._gnSubmitSync = checkSubmitSync ._gnSubmitSync = checkSubmitSync,
._gnPresentSync = checkPresentSync
}; };
} }