make some gryphn stuff happen (DOES NOT COMPILE)

This commit is contained in:
Gregory Wells
2025-06-24 13:04:33 -04:00
parent 78202825db
commit 1915166c82
21 changed files with 150 additions and 294 deletions

View File

@@ -1,29 +1,20 @@
#include "gryphn_output_device.h"
#include "instance/gryphn_instance.h"
#include "gryphn_platform_functions.h"
#include "instance/init/gryphn_init.h"
#include "utils/gryphn_bool.h"
gnReturnCode gnCreateOutputDevice(gnOutputDeviceHandle* outputDevice, gnInstanceHandle instance, struct gnOutputDeviceInfo_t deviceInfo) {
gnReturnCode gnCreateOutputDevice(gnOutputDeviceHandle* outputDevice, gnInstanceHandle instance, gnOutputDeviceInfo deviceInfo) {
*outputDevice = malloc(sizeof(struct gnOutputDevice_t));
if (instance->loadDeviceFunctions == gnFalse) {
instance->deviceFunctions = malloc(sizeof(struct gnDeviceFunctions_t));
gnLoadDeviceFunctions(instance->dynamicLib, instance->deviceFunctions);
instance->loadDeviceFunctions = gnTrue;
}
(*outputDevice)->deviceFunctions = instance->deviceFunctions;
(*outputDevice)->instance = instance;
(*outputDevice)->physicalDevice = deviceInfo.physicalDevice;
(*outputDevice)->deviceInfo = deviceInfo;
return instance->functions->_gnCreateOutputDevice(*outputDevice, instance, deviceInfo);
return instance->instanceFunctions._gnCreateOutputDevice(*outputDevice, instance, deviceInfo);
}
void gnWaitForDevice(gnOutputDeviceHandle device) {
device->deviceFunctions->_gnWaitForDevice(device);
}
void gnDestroyOutputDevice(gnOutputDeviceHandle device) {
device->instance->functions->_gnDestroyOutputDevice(device);
device->instance->instanceFunctions._gnDestroyOutputDevice(device);
free(device);
}

View File

@@ -2,32 +2,29 @@
#include <output_device/gryphn_physical_output_device.h>
#include <utils/gryphn_error_code.h>
struct gnPlatformOutputDevice_t;
struct gnDeviceFunctions_t;
typedef struct gnDeviceQueueInfo_t {
typedef struct gnDeviceQueueInfo {
int queueIndex;
int queueCount;
// float* queuePriority;
} gnDeviceQueueInfo;
typedef struct gnOutputDeviceInfo_t {
typedef struct gnOutputDeviceInfo {
uint32_t queueInfoCount;
struct gnDeviceQueueInfo_t* queueInfos;
struct gnPhysicalDeviceFeatures_t enabledFeatures;
struct gnPhysicalDevice_t physicalDevice;
gnDeviceQueueInfo* queueInfos;
gnPhysicalDeviceFeatures enabledFeatures;
gnPhysicalDevice physicalDevice;
} gnOutputDeviceInfo;
#ifdef GN_REVEAL_IMPL
struct gnOutputDevice_t {
struct gnPlatformOutputDevice_t* outputDevice;
struct gnDeviceFunctions_t* deviceFunctions;
struct gnOutputDeviceInfo_t deviceInfo;
gnOutputDeviceInfo deviceInfo;
gnInstanceHandle instance;
gnPhysicalDevice physicalDevice;
};
#endif
gnReturnCode gnCreateOutputDevice(gnOutputDeviceHandle* outputDevice, gnInstanceHandle instance, struct gnOutputDeviceInfo_t deviceInfo);
gnReturnCode gnCreateOutputDevice(gnOutputDeviceHandle* outputDevice, gnInstanceHandle instance, gnOutputDeviceInfo deviceInfo);
void gnWaitForDevice(gnOutputDeviceHandle device);
void gnDestroyOutputDevice(gnOutputDeviceHandle device);

View File

@@ -1,15 +1,15 @@
#include "gryphn_physical_output_device.h"
#include "gryphn_platform_functions.h"
#include "instance/gryphn_instance.h"
gnPhysicalDevice* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* count) {
gnPhysicalDevice* devices = instance->functions->_gnGetPhysicalDevices(instance, count);
gnPhysicalDevice* devices = instance->instanceFunctions._gnGetPhysicalDevices(instance, count);
for (int i = 0; i < *count; i++) {
devices[i].instance = instance;
}
return devices;
}
gnBool gnQueueCanPresentToSurface(const struct gnPhysicalDevice_t device, uint32_t queueIndex, gnWindowSurfaceHandle windowSurface) {
gnBool gnQueueCanPresentToSurface(const gnPhysicalDevice device, uint32_t queueIndex, gnWindowSurfaceHandle windowSurface) {
// if (queueIndex >= device.queueProperties.queueCount) {
// gnDebuggerSetErrorMessage(device.instance->debugger,
// (gnMessageData){
@@ -18,10 +18,10 @@ gnBool gnQueueCanPresentToSurface(const struct gnPhysicalDevice_t device, uint32
// );
// return gnFalse;
// }
return device.instance->functions->_gnQueueCanPresentToSurface(device, queueIndex, windowSurface);
return device.instance->instanceFunctions._gnQueueCanPresentToSurface(device, queueIndex, windowSurface);
}
gnBool gnHasGraphicsQueue(const struct gnPhysicalDevice_t device) {
gnBool gnHasGraphicsQueue(const gnPhysicalDevice device) {
for (int i = 0; i < device.queueProperties.queueCount; i++) {
if (device.queueProperties.queueProperties[i].queueType & GN_QUEUE_GRAPHICS) {
return gnTrue;
@@ -29,7 +29,7 @@ gnBool gnHasGraphicsQueue(const struct gnPhysicalDevice_t device) {
}
return gnFalse;
}
gnBool gnHasPresentQueue(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface) {
gnBool gnHasPresentQueue(const gnPhysicalDevice device, gnWindowSurfaceHandle windowSurface) {
for (int i = 0; i < device.queueProperties.queueCount; i++) {
if (gnQueueCanPresentToSurface(device, i, windowSurface)) {
return gnTrue;
@@ -38,31 +38,21 @@ gnBool gnHasPresentQueue(const struct gnPhysicalDevice_t device, gnWindowSurface
return gnFalse;
}
int gnGetGraphicsQueueIndex(const struct gnPhysicalDevice_t device) {
int gnGetGraphicsQueueIndex(const gnPhysicalDevice device) {
for (int i = 0; i < device.queueProperties.queueCount; i++) {
if (device.queueProperties.queueProperties[i].queueType & GN_QUEUE_GRAPHICS) {
return i;
break;
}
}
// gnDebuggerSetErrorMessage(device.instance->debugger,
// (gnMessageData){
// .message = gnCreateString("gnGetGraphicsQueueIndex failed no queue that support graphics on this device")
// }
// );
return -1;
}
int gnGetPresentQueueIndex(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface) {
int gnGetPresentQueueIndex(const gnPhysicalDevice device, gnWindowSurfaceHandle windowSurface) {
for (int i = 0; i < device.queueProperties.queueCount; i++) {
if (gnQueueCanPresentToSurface(device, i, windowSurface)) {
return i;
break;
}
}
// gnDebuggerSetErrorMessage(device.instance->debugger,
// (gnMessageData){
// .message = gnCreateString("gnGetPresentQueueIndex failed no queue that support presenting to this window surface")
// }
// );
return -1;
}

View File

@@ -3,52 +3,50 @@
#include "utils/gryphn_string.h"
#include "gryphn_handles.h"
struct gnPlatformPhysicalDevice_t;
typedef enum gnDeviceType_e {
typedef enum gnDeviceType {
GN_DEDICATED_DEVICE, GN_INTEGRATED_DEVICE, GN_EXTERNAL_DEVICE
} gnDeviceType;
typedef struct gnPhysicalDeviceProperties_t {
typedef struct gnPhysicalDeviceProperties {
gnString name;
gnDeviceType deviceType;
} gnPhysicalDeviceProperties;
typedef struct gnPhysicalDeviceFeatures_t {
typedef struct gnPhysicalDeviceFeatures {
gnBool supportsGeometryShader;
} gnPhysicalDeviceFeatures;
typedef enum gnQueueTypeFlags_e {
typedef enum gnQueueTypeFlags {
GN_QUEUE_GRAPHICS = 0x00000001,
GN_QUEUE_COMPUTE = 0x00000002,
GN_QUEUE_TRANSFER = 0x00000004,
GN_QUEUE_SPARSE_BINDING = 0x00000008
} gnQueueTypeFlags;
typedef struct gnQueueProperties_t {
typedef struct gnQueueProperties {
uint32_t queueCount;
enum gnQueueTypeFlags_e queueType;
gnQueueTypeFlags queueType;
} gnQueueProperties;
typedef struct gnPhysicalDeviceQueueProperties_t {
typedef struct gnPhysicalDeviceQueueProperties {
uint32_t queueCount;
struct gnQueueProperties_t* queueProperties;
gnQueueProperties* queueProperties;
} gnPhysicalDeviceQueueProperties;
typedef struct gnPhysicalDevice_t {
typedef struct gnPhysicalDevice {
struct gnPlatformPhysicalDevice_t* physicalDevice;
struct gnPhysicalDeviceProperties_t properties;
struct gnPhysicalDeviceFeatures_t features;
struct gnPhysicalDeviceQueueProperties_t queueProperties;
gnPhysicalDeviceProperties properties;
gnPhysicalDeviceFeatures features;
gnPhysicalDeviceQueueProperties queueProperties;
gnInstanceHandle instance;
} gnPhysicalDevice;
gnPhysicalDevice* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* count);
gnBool gnQueueCanPresentToSurface(const struct gnPhysicalDevice_t device, uint32_t queueIndex, gnWindowSurfaceHandle windowSurface);
gnBool gnQueueCanPresentToSurface(const gnPhysicalDevice device, uint32_t queueIndex, gnWindowSurfaceHandle windowSurface);
gnBool gnHasGraphicsQueue(const struct gnPhysicalDevice_t device);
gnBool gnHasPresentQueue(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface);
gnBool gnHasGraphicsQueue(const gnPhysicalDevice device);
gnBool gnHasPresentQueue(const gnPhysicalDevice device, gnWindowSurfaceHandle windowSurface);
int gnGetGraphicsQueueIndex(const struct gnPhysicalDevice_t device);
int gnGetPresentQueueIndex(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface);
int gnGetGraphicsQueueIndex(const gnPhysicalDevice device);
int gnGetPresentQueueIndex(const gnPhysicalDevice device, gnWindowSurfaceHandle windowSurface);