move present over to sync extension
This commit is contained in:
@@ -53,7 +53,7 @@ gnDeviceFunctions loadVulkanDeviceFunctions() {
|
|||||||
._gnDestroyTexture = destroyTexture,
|
._gnDestroyTexture = destroyTexture,
|
||||||
|
|
||||||
._gnSubmit = vulkanSubmit,
|
._gnSubmit = vulkanSubmit,
|
||||||
._gnPresent = present,
|
._gnPresent = vulkanPresent,
|
||||||
|
|
||||||
._gnWaitForDevice = waitForDevice
|
._gnWaitForDevice = waitForDevice
|
||||||
};
|
};
|
||||||
|
@@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
}
|
@@ -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);
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -117,6 +117,7 @@ gnSyncExtFunctions loadFunctionLoaderSyncExtFunctions() {
|
|||||||
._gnResetFence = checkResetFence,
|
._gnResetFence = checkResetFence,
|
||||||
._gnDestroyFence = checkDestroyFence,
|
._gnDestroyFence = checkDestroyFence,
|
||||||
|
|
||||||
._gnSubmitSync = checkSubmitSync
|
._gnSubmitSync = checkSubmitSync,
|
||||||
|
._gnPresentSync = checkPresentSync
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user