From 088d5a2adfbc2c2181b01d156ab465f70467de2a Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Thu, 29 May 2025 14:04:18 -0400 Subject: [PATCH] only load device functions once per instance --- include/gryphn/gryphn.h | 1 + src/core/instance/gryphn_instance.c | 1 + src/core/instance/gryphn_instance.h | 3 ++- src/core/output_device/gryphn_output_device.c | 10 ++++++++-- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/include/gryphn/gryphn.h b/include/gryphn/gryphn.h index b40146e..8d6b08b 100644 --- a/include/gryphn/gryphn.h +++ b/include/gryphn/gryphn.h @@ -13,3 +13,4 @@ #include #include #include +#include diff --git a/src/core/instance/gryphn_instance.c b/src/core/instance/gryphn_instance.c index 6aec01c..e1af06a 100644 --- a/src/core/instance/gryphn_instance.c +++ b/src/core/instance/gryphn_instance.c @@ -5,6 +5,7 @@ gnReturnCode gnCreateInstance(gnInstance* instance, struct gnInstanceInfo_t info) { if (!gnIsAPISupported(info.renderingAPI)) return GN_UNSUPPORTED_RENDERING_API; + instance->loadDeviceFunctions = gnFalse; instance->debugger = NULL; instance->dynamicLib = gnLoadRenderingDLL(info.renderingAPI); if (instance->dynamicLib == NULL) return GN_UNABLE_TO_LOAD_DYNAMIC_LIBARRY; diff --git a/src/core/instance/gryphn_instance.h b/src/core/instance/gryphn_instance.h index 893b131..23a1fa0 100644 --- a/src/core/instance/gryphn_instance.h +++ b/src/core/instance/gryphn_instance.h @@ -19,9 +19,10 @@ typedef struct gnInstanceInfo_t { typedef struct gnInstance_t { struct gnPlatformInstance_t* instance; - gnBool valid; + gnBool valid, loadDeviceFunctions; struct gnFunctions_t* functions; + struct gnDeviceFunctions_t* deviceFunctions; struct gnDynamicLibrary_t* dynamicLib; struct gnDebugger_t* debugger; diff --git a/src/core/output_device/gryphn_output_device.c b/src/core/output_device/gryphn_output_device.c index 2418ada..5c89024 100644 --- a/src/core/output_device/gryphn_output_device.c +++ b/src/core/output_device/gryphn_output_device.c @@ -4,8 +4,14 @@ #include "core/instance/init/gryphn_init.h" gnReturnCode gnCreateOutputDevice(gnOutputDevice* outputDevice, gnInstance* instance, struct gnOutputDeviceInfo_t deviceInfo) { - outputDevice->deviceFunctions = malloc(sizeof(gnDeviceFunctions)); - gnLoadDeviceFunctions(instance->dynamicLib, outputDevice->deviceFunctions); + 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;