rename to projects (DOES NOT COMPILE)
This commit is contained in:
29
projects/core/src/output_device/gryphn_output_device.c
Normal file
29
projects/core/src/output_device/gryphn_output_device.c
Normal file
@@ -0,0 +1,29 @@
|
||||
#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) {
|
||||
*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);
|
||||
}
|
||||
void gnWaitForDevice(gnOutputDeviceHandle device) {
|
||||
device->deviceFunctions->_gnWaitForDevice(device);
|
||||
}
|
||||
void gnDestroyOutputDevice(gnOutputDeviceHandle device) {
|
||||
device->instance->functions->_gnDestroyOutputDevice(device);
|
||||
free(device);
|
||||
}
|
33
projects/core/src/output_device/gryphn_output_device.h
Normal file
33
projects/core/src/output_device/gryphn_output_device.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#pragma once
|
||||
#include <output_device/gryphn_physical_output_device.h>
|
||||
#include <utils/gryphn_error_code.h>
|
||||
|
||||
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;
|
||||
struct gnPhysicalDevice_t physicalDevice;
|
||||
} gnOutputDeviceInfo;
|
||||
|
||||
#ifdef GN_REVEAL_IMPL
|
||||
struct gnOutputDevice_t {
|
||||
struct gnPlatformOutputDevice_t* outputDevice;
|
||||
struct gnDeviceFunctions_t* deviceFunctions;
|
||||
struct gnOutputDeviceInfo_t deviceInfo;
|
||||
gnInstanceHandle instance;
|
||||
gnPhysicalDevice physicalDevice;
|
||||
};
|
||||
#endif
|
||||
|
||||
gnReturnCode gnCreateOutputDevice(gnOutputDeviceHandle* outputDevice, gnInstanceHandle instance, struct gnOutputDeviceInfo_t deviceInfo);
|
||||
void gnWaitForDevice(gnOutputDeviceHandle device);
|
||||
void gnDestroyOutputDevice(gnOutputDeviceHandle device);
|
@@ -0,0 +1,68 @@
|
||||
#include "gryphn_physical_output_device.h"
|
||||
#include "gryphn_platform_functions.h"
|
||||
|
||||
gnPhysicalDevice* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* count) {
|
||||
gnPhysicalDevice* devices = instance->functions->_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) {
|
||||
// if (queueIndex >= device.queueProperties.queueCount) {
|
||||
// gnDebuggerSetErrorMessage(device.instance->debugger,
|
||||
// (gnMessageData){
|
||||
// .message = gnCreateString("gnQueueCanPresentToSurface queue index passed in is large then queueProperties.queueCount")
|
||||
// }
|
||||
// );
|
||||
// return gnFalse;
|
||||
// }
|
||||
return device.instance->functions->_gnQueueCanPresentToSurface(device, queueIndex, windowSurface);
|
||||
}
|
||||
|
||||
gnBool gnHasGraphicsQueue(const struct gnPhysicalDevice_t device) {
|
||||
for (int i = 0; i < device.queueProperties.queueCount; i++) {
|
||||
if (device.queueProperties.queueProperties[i].queueType & GN_QUEUE_GRAPHICS) {
|
||||
return gnTrue;
|
||||
}
|
||||
}
|
||||
return gnFalse;
|
||||
}
|
||||
gnBool gnHasPresentQueue(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface) {
|
||||
for (int i = 0; i < device.queueProperties.queueCount; i++) {
|
||||
if (gnQueueCanPresentToSurface(device, i, windowSurface)) {
|
||||
return gnTrue;
|
||||
}
|
||||
}
|
||||
return gnFalse;
|
||||
}
|
||||
|
||||
int gnGetGraphicsQueueIndex(const struct gnPhysicalDevice_t 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) {
|
||||
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;
|
||||
}
|
@@ -0,0 +1,54 @@
|
||||
#pragma once
|
||||
#include "stdint.h"
|
||||
#include "utils/gryphn_string.h"
|
||||
#include "gryphn_handles.h"
|
||||
|
||||
struct gnPlatformPhysicalDevice_t;
|
||||
|
||||
typedef enum gnDeviceType_e {
|
||||
GN_DEDICATED_DEVICE, GN_INTEGRATED_DEVICE, GN_EXTERNAL_DEVICE
|
||||
} gnDeviceType;
|
||||
|
||||
typedef struct gnPhysicalDeviceProperties_t {
|
||||
gnString name;
|
||||
gnDeviceType deviceType;
|
||||
} gnPhysicalDeviceProperties;
|
||||
|
||||
typedef struct gnPhysicalDeviceFeatures_t {
|
||||
gnBool supportsGeometryShader;
|
||||
} gnPhysicalDeviceFeatures;
|
||||
|
||||
typedef enum gnQueueTypeFlags_e {
|
||||
GN_QUEUE_GRAPHICS = 0x00000001,
|
||||
GN_QUEUE_COMPUTE = 0x00000002,
|
||||
GN_QUEUE_TRANSFER = 0x00000004,
|
||||
GN_QUEUE_SPARSE_BINDING = 0x00000008
|
||||
} gnQueueTypeFlags;
|
||||
|
||||
typedef struct gnQueueProperties_t {
|
||||
uint32_t queueCount;
|
||||
enum gnQueueTypeFlags_e queueType;
|
||||
} gnQueueProperties;
|
||||
|
||||
typedef struct gnPhysicalDeviceQueueProperties_t {
|
||||
uint32_t queueCount;
|
||||
struct gnQueueProperties_t* queueProperties;
|
||||
} gnPhysicalDeviceQueueProperties;
|
||||
|
||||
typedef struct gnPhysicalDevice_t {
|
||||
struct gnPlatformPhysicalDevice_t* physicalDevice;
|
||||
struct gnPhysicalDeviceProperties_t properties;
|
||||
struct gnPhysicalDeviceFeatures_t features;
|
||||
struct gnPhysicalDeviceQueueProperties_t queueProperties;
|
||||
|
||||
gnInstanceHandle instance;
|
||||
} gnPhysicalDevice;
|
||||
|
||||
gnPhysicalDevice* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* count);
|
||||
gnBool gnQueueCanPresentToSurface(const struct gnPhysicalDevice_t device, uint32_t queueIndex, gnWindowSurfaceHandle windowSurface);
|
||||
|
||||
gnBool gnHasGraphicsQueue(const struct gnPhysicalDevice_t device);
|
||||
gnBool gnHasPresentQueue(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface);
|
||||
|
||||
int gnGetGraphicsQueueIndex(const struct gnPhysicalDevice_t device);
|
||||
int gnGetPresentQueueIndex(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface);
|
Reference in New Issue
Block a user