reimplement gnCreateOutputDevice

This commit is contained in:
Greg Wells
2025-05-23 15:01:59 -04:00
parent 273b1ad59e
commit 8744b56955
14 changed files with 43 additions and 104 deletions

View File

@@ -3,12 +3,13 @@
#include "core/gryphn_platform_functions.h"
#include "core/instance/init/gryphn_init.h"
gnReturnCode gnRegisterOutputDevice(gnOutputDevice* outputDevice, gnInstance* instance, const gnPhysicalDevice physicalDevice) {
gnReturnCode gnCreateOutputDevice(gnOutputDevice* outputDevice, gnInstance* instance, struct gnOutputDeviceInfo_t deviceInfo) {
outputDevice->deviceFunctions = malloc(sizeof(gnDeviceFunctions));
gnLoadDeviceFunctions(instance->dynamicLib, outputDevice->deviceFunctions);
outputDevice->physicalDevice = (gnPhysicalDevice*)(&physicalDevice);
return instance->functions->_gnRegisterOutputDevice(outputDevice, instance, physicalDevice);
outputDevice->instance = instance;
// outputDevice->physicalDevice = (gnPhysicalDevice*)(&deviceInfo.physicalDevice);
return instance->functions->_gnCreateOutputDevoce(outputDevice, instance, deviceInfo);
}
void gnDestroyOutputDevice(gnOutputDevice* device) {
device->physicalDevice->instance->functions->_gnDestroyOutputDevice(device);
device->instance->functions->_gnDestroyOutputDevice(device);
}

View File

@@ -4,13 +4,27 @@
struct gnPlatformOutputDevice_t;
struct gnDeviceFunctions_t;
typedef struct gnDeviceQueueInfo_t {
int queueIndex;
int queueCount;
// float* queuePriority;
} gnDeviceQueueInfo;
typedef struct gnOutputDeviceInfo_t {
uint32_t queueInfoCount;
struct gnDeviceQueueInfo_t* queueInfos;
struct gnPhysicalDeviceFeatures_t enabledFeatures;
const gnPhysicalDevice physicalDevice;
} gnOutputDeviceInfo;
typedef struct gnOutputDevice_t {
struct gnPlatformOutputDevice_t* outputDevice;
struct gnDeviceFunctions_t* deviceFunctions;
gnPhysicalDevice* physicalDevice;
gnInstance* instance;
// gnPhysicalDevice* physicalDevice;
} gnOutputDevice;
gnReturnCode gnRegisterOutputDevice(gnOutputDevice* outputDevice, gnInstance* instance, const gnPhysicalDevice physicalDevice);
gnReturnCode gnCreateOutputDevice(gnOutputDevice* outputDevice, gnInstance* instance, struct gnOutputDeviceInfo_t deviceInfo);
void gnDestroyOutputDevice(gnOutputDevice* device);
// inline void (*gnWaitForDevice)(const gnOutputDevice& device);

View File

@@ -8,6 +8,3 @@ gnPhysicalDevice* gnGetPhyscialDevices(gnInstance* instance, uint32_t* count) {
}
return devices;
}
gnBool gnDeviceSupportsAPI(const gnPhysicalDevice device) {
return device.instance->functions->_gnDeviceSupportsAPI(device);
}

View File

@@ -7,6 +7,10 @@ typedef struct gnPhysicalDeviceProperties_t {
gnString name;
} gnPhysicalDeviceProperties;
typedef struct gnPhysicalDeviceFeatures_t {
// no freatures
} gnPhysicalDeviceFeatures;
typedef enum gnQueueTypeFlags_e {
GN_QUEUE_GRAPHICS = 0x00000001,
GN_QUEUE_COMPUTE = 0x00000002,
@@ -27,6 +31,7 @@ typedef struct gnPhysicalDeviceQueueProperties_t {
typedef struct gnPhysicalDevice_t {
struct gnPlatformPhysicalDevice_t* physicalDevice;
struct gnPhysicalDeviceProperties_t properties;
struct gnPhysicalDeviceFeatures_t features;
struct gnPhysicalDeviceQueueProperties_t queueProperties;
gnInstance* instance;