Files
Gryphn/projects/validation_layers/function_loader/src/instance_functions.c
2025-07-02 09:12:33 -04:00

106 lines
5.0 KiB
C

#include "instance_functions.h"
#include "core/src/debugger/gryphn_debugger.h"
#include "core/src/output_device/gryphn_output_device.h"
#include "core/src/window_surface/gryphn_surface.h"
gnReturnCode checkCreateInstance(gnInstanceHandle instance, gnInstanceInfo info) {
loaderLayer* nextLayer = loaderGetNextLayer(instance);
if (nextLayer->instanceFunctions._gnCreateInstance == NULL) {
gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load create instance function")
});
resetLayer(instance);
return GN_FAILED_TO_LOAD_FUNCTION;
}
return nextLayer->instanceFunctions._gnCreateInstance(instance, info);
}
void checkDestroyInstance(gnInstance instance) {
loaderLayer* nextLayer = loaderGetNextLayer(instance);
if (nextLayer->instanceFunctions._gnDestroyInstance == NULL) {
gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load destroy instance function")
});
resetLayer(instance);
return;
}
nextLayer->instanceFunctions._gnDestroyInstance(instance);
}
gnPhysicalDevice* checkGetPhysicalDevices(gnInstanceHandle instance, uint32_t* count) {
loaderLayer* nextLayer = loaderGetNextLayer(instance);
if (nextLayer->instanceFunctions._gnGetPhysicalDevices == NULL) {
gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load get physical devices function")
});
resetLayer(instance);
}
return nextLayer->instanceFunctions._gnGetPhysicalDevices(instance, count);
}
gnBool checkQueueCanPresentToSurface(const gnPhysicalDevice device, uint32_t queueIndex, const gnWindowSurfaceHandle windowSurface) {
loaderLayer* nextLayer = loaderGetNextLayer(device.instance);
if (nextLayer->instanceFunctions._gnQueueCanPresentToSurface == NULL) {
gnDebuggerSetErrorMessage(device.instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load queue can present to surface function")
});
resetLayer(device.instance);
return gnFalse;
}
return nextLayer->instanceFunctions._gnQueueCanPresentToSurface(device, queueIndex, windowSurface);
}
gnReturnCode checkCreateOutputDevice(gnOutputDeviceHandle device, gnInstanceHandle instance, gnOutputDeviceInfo deviceInfo) {
loaderLayer* nextLayer = loaderGetNextLayer(device->instance);
if (nextLayer->instanceFunctions._gnCreateOutputDevice == NULL) {
gnDebuggerSetErrorMessage(device->instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load create output device function")
});
resetLayer(device->instance);
return GN_FAILED_TO_LOAD_FUNCTION;
}
return nextLayer->instanceFunctions._gnCreateOutputDevice(device, instance, deviceInfo);
}
void checkDestroyOutputDevice(gnOutputDeviceHandle device) {
loaderLayer* nextLayer = loaderGetNextLayer(device->instance);
if (nextLayer->instanceFunctions._gnDestroyOutputDevice == NULL) {
gnDebuggerSetErrorMessage(device->instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load destroy output device function")
});
resetLayer(device->instance);
}
return nextLayer->instanceFunctions._gnDestroyOutputDevice(device);
}
gnReturnCode checkCreateSurfaceMacOS(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, gnMacOSWindowSurfaceInfo createInfo) {
loaderLayer* nextLayer = loaderGetNextLayer(instance);
if (nextLayer->instanceFunctions._gnCreateMacOSWindowSurface == NULL) {
gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load create window surface function")
});
resetLayer(instance);
return GN_FAILED_TO_LOAD_FUNCTION;
}
return nextLayer->instanceFunctions._gnCreateMacOSWindowSurface(windowSurface, instance, createInfo);
}
void checkDestroyWindowSurface(gnWindowSurfaceHandle windowSurface) {
loaderLayer* nextLayer = loaderGetNextLayer(windowSurface->instance);
if (nextLayer->instanceFunctions._gnDestroyWindowSurface == NULL) {
gnDebuggerSetErrorMessage(windowSurface->instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load destroy create surface function")
});
resetLayer(windowSurface->instance);
}
return nextLayer->instanceFunctions._gnDestroyWindowSurface(windowSurface);
}
gnSurfaceDetails checkGetSurfaceDetails(gnWindowSurfaceHandle windowSurface, gnPhysicalDevice device) {
loaderLayer* nextLayer = loaderGetNextLayer(windowSurface->instance);
if (nextLayer->instanceFunctions._gnGetSurfaceDetails == NULL) {
gnDebuggerSetErrorMessage(windowSurface->instance->debugger, (gnMessageData){
.message = gnCreateString("Failed to load get surface details function")
});
resetLayer(windowSurface->instance);
}
return nextLayer->instanceFunctions._gnGetSurfaceDetails(windowSurface, device);
}