creating the presentation queue

This commit is contained in:
Greg Wells
2025-05-25 07:05:23 -04:00
parent ffec572925
commit 5b6360f26f
9 changed files with 56 additions and 141 deletions

View File

@@ -49,4 +49,5 @@ 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 (*_gnDestroyPresentationQueue)(gnPresentationQueue *presentationQueue);
} gnDeviceFunctions;

View File

@@ -70,4 +70,5 @@ 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->_gnDestroyPresentationQueue, "gnDestroyPresentationQueueFn");
}

View File

@@ -8,6 +8,7 @@ gnReturnCode gnCreateOutputDevice(gnOutputDevice* outputDevice, gnInstance* inst
gnLoadDeviceFunctions(instance->dynamicLib, outputDevice->deviceFunctions);
outputDevice->instance = instance;
outputDevice->physicalDevice = deviceInfo.physicalDevice;
outputDevice->deviceInfo = deviceInfo;
return instance->functions->_gnCreateOutputDevoce(outputDevice, instance, deviceInfo);
}
void gnDestroyOutputDevice(gnOutputDevice* device) {

View File

@@ -14,12 +14,13 @@ typedef struct gnOutputDeviceInfo_t {
uint32_t queueInfoCount;
struct gnDeviceQueueInfo_t* queueInfos;
struct gnPhysicalDeviceFeatures_t enabledFeatures;
const gnPhysicalDevice physicalDevice;
struct gnPhysicalDevice_t physicalDevice;
} gnOutputDeviceInfo;
typedef struct gnOutputDevice_t {
struct gnPlatformOutputDevice_t* outputDevice;
struct gnDeviceFunctions_t* deviceFunctions;
struct gnOutputDeviceInfo_t deviceInfo;
gnInstance* instance;
gnPhysicalDevice physicalDevice;
} gnOutputDevice;

View File

@@ -1,11 +1,11 @@
#include "gryphn_presentation_queue.h"
#include "core/gryphn_platform_functions.h"
gnReturnCode gnCreatePresentationQueue(gnPresentationQueue* presentationQueue, const gnOutputDevice* device, struct gnPresentationQueueInfo_t presentationInfo){
gnReturnCode gnCreatePresentationQueue(gnPresentationQueue* presentationQueue, struct gnOutputDevice_t* device, struct gnPresentationQueueInfo_t presentationInfo){
presentationQueue->outputDevice = device;
return device->deviceFunctions->_gnCreatePresentationQueue(presentationQueue, device, presentationInfo);
}
// gnTexture* gnGetPresentationQueueImage(gnPresentationQueue& presentationQueue, int index) {
// // if (index < gnListLength(presentationQueue.images))
// return gnListGetPtr(presentationQueue.images, index); // zero fucking error checking in this file, im not doing that shit
// }
void gnDestroyPresentationQueue(gnPresentationQueue *presentationQueue) {
presentationQueue->outputDevice->deviceFunctions->_gnDestroyPresentationQueue(presentationQueue);
}

View File

@@ -9,27 +9,18 @@ typedef struct gnPresentationQueueInfo_t {
struct gnUInt2_t ImageSize;
struct gnWindowSurface_t surface;
struct gnSurfaceFormat_t format;
enum gnImageSharingMode_e imageSharingMode;
uint32_t queueFamilyCount;
uint32_t* queueFamilies;
} gnPresentationQueueInfo;
struct gnPlatformPresentationQueue_t;
typedef struct gnPresentationQueue_t {
struct gnPlatformPresentationQueue* presentationQueue;
struct gnPlatformPresentationQueue_t* presentationQueue;
struct gnOutputDevice_t* outputDevice;
gnBool valid;
// uint32_t textureCount;
// gnTexture* texturs;
} gnPresentationQueue;
// gnTexture* gnGetPresentationQueueImage(gnPresentationQueue& presentationQueue, int index);
gnReturnCode gnCreatePresentationQueue(gnPresentationQueue* presentationQueue, const gnOutputDevice* device, struct gnPresentationQueueInfo_t presentationInfo);
// inline gnReturnCode (*gnCreatePresentationQueue)(gnPresentationQueue* presentationQueue, const gnOutputDevice& device, gnPresentationDetails& details);
// inline void (*gnDestroyPresentationQueue)(gnPresentationQueue& queue);
// inline gnImageFormat (*_gnPresentationQueueGetImageFormat)(gnPresentationQueue& presentationQueue);
// inline gnImageFormat gnPresentationQueueGetImageFormat(gnPresentationQueue& presentationQueue) {
// std::cout << "gnPresentationQueueGetImageFormat should lowkey become supported\n";
// return _gnPresentationQueueGetImageFormat(presentationQueue);
// }
// inline gnPresentationQueueState (*gnPresentationQueueGetState)(gnPresentationQueue& presentationQueue);
// inline gnReturnCode (*gnPresentationQueueGetNextImageAsync)(gnPresentationQueue& presentationQueue, const gnSyncSemaphore& semaphore, gnUInt* imageIndex);
gnReturnCode gnCreatePresentationQueue(gnPresentationQueue* presentationQueue, struct gnOutputDevice_t* device, struct gnPresentationQueueInfo_t presentationInfo);
void gnDestroyPresentationQueue(gnPresentationQueue* presentationQueue);

View File

@@ -13,7 +13,8 @@ typedef enum gnReturnCode_t {
GN_DEBUGGER_EXISTS,
GN_NO_SUPPORTED_FORMATS,
GN_NO_SUPPORTED_PRESENT_MODES,
GN_UNKNOWN_IMAGE_FORMAT
GN_UNKNOWN_IMAGE_FORMAT,
GN_FAILED_TO_CREATE_PRESENTATION_QUEUE
// GN_UNKNOWN_ERROR,
// GN_UNKNOWN_FRAMEBUFFER_ATTACHMENT,
@@ -47,5 +48,6 @@ static const char* gnErrorCodeToCString(enum gnReturnCode_t returnCode) {
case GN_NO_SUPPORTED_FORMATS: return "GN_NO_SUPPORTED_FORMATS";
case GN_NO_SUPPORTED_PRESENT_MODES: return "GN_NO_SUPPORTED_PRESENT_MODES";
case GN_UNKNOWN_IMAGE_FORMAT: return "GN_UNKNOWN_IMAGE_FORMAT";
case GN_FAILED_TO_CREATE_PRESENTATION_QUEUE: return "GN_FAILED_TO_CREATE_PRESENTATION_QUEUE";
}
}

View File

@@ -8,3 +8,7 @@ typedef enum gnImageFormat_e {
typedef enum gnColorSpace_e {
GN_COLOR_SPACE_SRGB_NONLINEAR
} gnColorSpace;
typedef enum gnImageSharingMode_e {
GN_SHARING_MODE_EXCLUSIVE, GN_SHARING_MODE_CONCURRENT
} gnImageSharingMode;