From 7722467ceb127175e26553acc8c860037c6e440e Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Tue, 15 Jul 2025 09:06:17 -0400 Subject: [PATCH] gnIsExtensionSupported --- include/gryphn/gryphn.h | 2 ++ projects/apis/metal/loader/metal_extensions.m | 6 ++++ projects/apis/metal/loader/metal_loader.h | 3 ++ .../apis/vulkan/loader/vulkan_extensions.c | 6 ++++ projects/apis/vulkan/loader/vulkan_loader.h | 3 ++ projects/core/src/instance/gryphn_instance.h | 2 +- projects/loader/src/gryphn_extension_loader.c | 36 +++++++++++++++++++ projects/loader/src/gryphn_extension_loader.h | 6 ++++ 8 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 projects/apis/metal/loader/metal_extensions.m create mode 100644 projects/apis/vulkan/loader/vulkan_extensions.c create mode 100644 projects/loader/src/gryphn_extension_loader.c create mode 100644 projects/loader/src/gryphn_extension_loader.h diff --git a/include/gryphn/gryphn.h b/include/gryphn/gryphn.h index 300fffa..0c0e3fc 100644 --- a/include/gryphn/gryphn.h +++ b/include/gryphn/gryphn.h @@ -25,6 +25,8 @@ #include // extenions +#include + #include #include #include diff --git a/projects/apis/metal/loader/metal_extensions.m b/projects/apis/metal/loader/metal_extensions.m new file mode 100644 index 0000000..74fe590 --- /dev/null +++ b/projects/apis/metal/loader/metal_extensions.m @@ -0,0 +1,6 @@ +#include "metal_loader.h" + +gnBool metalIsExtensionSupported(gnExtension extension) { + if (extension == GN_EXT_SYNCHRONIZATION) return gnTrue; + return gnFalse; +} diff --git a/projects/apis/metal/loader/metal_loader.h b/projects/apis/metal/loader/metal_loader.h index 7373e1b..781b02d 100644 --- a/projects/apis/metal/loader/metal_loader.h +++ b/projects/apis/metal/loader/metal_loader.h @@ -3,8 +3,11 @@ #include "loader/src/gryphn_device_functions.h" #include "loader/src/gryphn_command_functions.h" #include "extensions/synchronization/loader/sync_functions.h" +#include "core/gryphn_extensions.h" gnInstanceFunctions loadMetalInstanceFunctions(); gnDeviceFunctions loadMetalDeviceFunctions(); gnCommandFunctions loadMetalCommandFunctions(); gnSyncExtFunctions loadMetalSyncFunctions(); + +gnBool metalIsExtensionSupported(gnExtension extension); diff --git a/projects/apis/vulkan/loader/vulkan_extensions.c b/projects/apis/vulkan/loader/vulkan_extensions.c new file mode 100644 index 0000000..3a93170 --- /dev/null +++ b/projects/apis/vulkan/loader/vulkan_extensions.c @@ -0,0 +1,6 @@ +#include "vulkan_loader.h" + +gnBool vulkanIsExtensionSupported(gnExtension extension){ + if (extension == GN_EXT_SYNCHRONIZATION) return gnTrue; + return gnFalse; +} diff --git a/projects/apis/vulkan/loader/vulkan_loader.h b/projects/apis/vulkan/loader/vulkan_loader.h index 8da5b3d..18bca8b 100644 --- a/projects/apis/vulkan/loader/vulkan_loader.h +++ b/projects/apis/vulkan/loader/vulkan_loader.h @@ -3,8 +3,11 @@ #include "loader/src/gryphn_device_functions.h" #include "loader/src/gryphn_command_functions.h" #include "extensions/synchronization/loader/sync_functions.h" +#include "core/gryphn_extensions.h" gnInstanceFunctions loadVulkanInstanceFunctions(); gnDeviceFunctions loadVulkanDeviceFunctions(); gnCommandFunctions loadVulkanCommandFunctions(); gnSyncExtFunctions loadVulkanSyncFunctions(); + +gnBool vulkanIsExtensionSupported(gnExtension extension); diff --git a/projects/core/src/instance/gryphn_instance.h b/projects/core/src/instance/gryphn_instance.h index fe50cb1..fb3712f 100644 --- a/projects/core/src/instance/gryphn_instance.h +++ b/projects/core/src/instance/gryphn_instance.h @@ -3,7 +3,6 @@ #include "core/src/gryphn_handles.h" #include "utils/gryphn_version.h" #include "utils/gryphn_error_code.h" -#include #include typedef struct gnInstanceInfo { @@ -21,6 +20,7 @@ typedef struct gnInstanceInfo { } gnInstanceInfo; #ifdef GN_REVEAL_IMPL +#include struct gnInstance_t { struct gnPlatformInstance_t* instance; gnBool valid; diff --git a/projects/loader/src/gryphn_extension_loader.c b/projects/loader/src/gryphn_extension_loader.c new file mode 100644 index 0000000..1d1d422 --- /dev/null +++ b/projects/loader/src/gryphn_extension_loader.c @@ -0,0 +1,36 @@ +#include "gryphn_extension_loader.h" + +#ifdef GN_API_VULKAN +#include +#endif +#ifdef GN_API_METAL +#include +#endif +#ifdef GN_API_OPENGL +#include +#endif + +gnBool gnIsExtensionSuppoted(gnRenderingAPI api, gnExtension extension) { + switch (api) { + case GN_RENDERINGAPI_NONE: return gnFalse; +#ifdef GN_API_VULKAN + case GN_RENDERINGAPI_VULKAN: return vulkanIsExtensionSupported(extension); +#endif +#ifdef GN_API_SOFTWARE + case GN_RENDERINGAPI_SOFTWARE: return softwareIsExtensionSupported(extension); +#endif +#ifdef GN_API_DX11 + case GN_RENDERINGAPI_DIRECTX11: return dx11IsExtensionSupported(extension); +#endif +#ifdef GN_API_DX12 + case GN_RENDERINGAPI_DIRECTX12: return dx12IsExtensionSupported(extension); +#endif +#ifdef GN_API_OPENGL + case GN_RENDERINGAPI_OPENGL: return openglIsExtensionSupported(extension); +#endif +#ifdef GN_API_METAL + case GN_RENDERINGAPI_METAL: return metalIsExtensionSupported(extension); +#endif + default: return gnFalse; + } +} diff --git a/projects/loader/src/gryphn_extension_loader.h b/projects/loader/src/gryphn_extension_loader.h new file mode 100644 index 0000000..779574d --- /dev/null +++ b/projects/loader/src/gryphn_extension_loader.h @@ -0,0 +1,6 @@ +#pragma once +#include +#include +#include + +gnBool gnIsExtensionSuppoted(gnRenderingAPI api, gnExtension extension);