allow destruction of surfaces

This commit is contained in:
2026-05-08 15:09:00 -04:00
parent 562b235f6a
commit 3ad8f10f50
9 changed files with 22 additions and 1 deletions
@@ -33,3 +33,4 @@ typedef struct gnPhysicalDevice_t {
gnReturnCode gnEnumeratePhysicalDevices(gnInstance instance, uint32_t* deviceCount, gnPhysicalDevice* devices); gnReturnCode gnEnumeratePhysicalDevices(gnInstance instance, uint32_t* deviceCount, gnPhysicalDevice* devices);
gnReturnCode gnGetPhysicalDeviceProperties(gnPhysicalDevice device, gnPhysicalDeviceProperties* properties); gnReturnCode gnGetPhysicalDeviceProperties(gnPhysicalDevice device, gnPhysicalDeviceProperties* properties);
gnReturnCode gnDoesDeviceSupportSurface(gnPhysicalDevice device, gnSurface surface);
@@ -8,10 +8,12 @@ typedef gnReturnCode (*PFN_gnCreateMetalSurface)(gnInstance, gnMetalSurfaceCreat
typedef gnReturnCode (*PFN_enumeratePhysicalDevices)(gnInstance, uint32_t*, gnPhysicalDevice*); typedef gnReturnCode (*PFN_enumeratePhysicalDevices)(gnInstance, uint32_t*, gnPhysicalDevice*);
typedef gnReturnCode (*PFN_gnGetPhysicalDeviceProperties)(gnPhysicalDevice, gnPhysicalDeviceProperties*); typedef gnReturnCode (*PFN_gnGetPhysicalDeviceProperties)(gnPhysicalDevice, gnPhysicalDeviceProperties*);
typedef gnReturnCode (*PFN_gnCreateDevice)(gnInstance, gnDeviceCreateInfo*, gnDevice); typedef gnReturnCode (*PFN_gnCreateDevice)(gnInstance, gnDeviceCreateInfo*, gnDevice);
typedef gnReturnCode (*PFN_gnDestroySurface)(gnInstance, gnSurface*);
typedef gnReturnCode (*PFN_gnDestroyInstance)(gnInstance); typedef gnReturnCode (*PFN_gnDestroyInstance)(gnInstance);
typedef struct gnInstanceDispatchTable { typedef struct gnInstanceDispatchTable {
PFN_gnCreateMetalSurface createMetalSurface; PFN_gnCreateMetalSurface createMetalSurface;
PFN_gnDestroySurface destroySurface;
PFN_enumeratePhysicalDevices enumeratePhysicalDevices; PFN_enumeratePhysicalDevices enumeratePhysicalDevices;
PFN_gnGetPhysicalDeviceProperties getPhysicalDeviceProperties; PFN_gnGetPhysicalDeviceProperties getPhysicalDeviceProperties;
PFN_gnCreateDevice createDevice; PFN_gnCreateDevice createDevice;
@@ -0,0 +1,6 @@
#include "gryphn_surface.h"
#include "instance/gryphn_instance.h"
gnReturnCode gnDestroySurface(gnInstance instance, gnSurface* surface) {
return instance->dispatchTable.destroySurface(instance, surface);
}
@@ -0,0 +1,4 @@
#pragma once
#include "gryphn_metal_surface.h"
gnReturnCode gnDestroySurface(gnInstance instance, gnSurface* surface);
@@ -4,3 +4,8 @@ gnReturnCode metalCreateSurface(gnInstance instance, gnMetalSurfaceCreateInfo* c
*surface = createInfo->metalLayer; *surface = createInfo->metalLayer;
return GN_SUCCESS; return GN_SUCCESS;
} }
gnReturnCode metalDestroySurface(gnInstance instance, gnSurface* surface) {
*surface = NULL;
return GN_SUCCESS;
}
+1
View File
@@ -26,6 +26,7 @@ gnReturnCode initBackend(gnInstance instance, gnInstanceCreateInfo* info) {
for (int i = 0; i < info->enabledExtensionCount; i++) { for (int i = 0; i < info->enabledExtensionCount; i++) {
if (strcmp(info->enabledExtensions[i], "GN_EXT_surface") == 0) { if (strcmp(info->enabledExtensions[i], "GN_EXT_surface") == 0) {
instance->dispatchTable.createMetalSurface = metalCreateSurface; instance->dispatchTable.createMetalSurface = metalCreateSurface;
instance->dispatchTable.destroySurface = metalDestroySurface;
} }
} }
@@ -13,3 +13,4 @@ gnReturnCode metalGetPhysicalDeviceProperties(gnPhysicalDevice device, gnPhysica
gnReturnCode metalCreateDevice(gnInstance instance, gnDeviceCreateInfo* createInfo, gnDevice device); gnReturnCode metalCreateDevice(gnInstance instance, gnDeviceCreateInfo* createInfo, gnDevice device);
gnReturnCode metalDestroyDevice(gnDevice device); gnReturnCode metalDestroyDevice(gnDevice device);
gnReturnCode metalCreateSurface(gnInstance instance, gnMetalSurfaceCreateInfo* createInfo, gnSurface* surface); gnReturnCode metalCreateSurface(gnInstance instance, gnMetalSurfaceCreateInfo* createInfo, gnSurface* surface);
gnReturnCode metalDestroySurface(gnInstance instance, gnSurface* surface);
+1 -1
View File
@@ -6,7 +6,7 @@ extern "C" {
#include "GryphnLoader/src/instance/gryphn_instance.h" #include "GryphnLoader/src/instance/gryphn_instance.h"
#include "GryphnLoader/src/device/gryphn_physical_device.h" #include "GryphnLoader/src/device/gryphn_physical_device.h"
#include "GryphnLoader/src/device/gryphn_device.h" #include "GryphnLoader/src/device/gryphn_device.h"
#include "GryphnLoader/src/surface/gryphn_metal_surface.h" #include "GryphnLoader/src/surface/gryphn_surface.h"
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+1
View File
@@ -112,6 +112,7 @@ int main() {
return 0; return 0;
} }
glfwDestroyWindow(window); glfwDestroyWindow(window);
gnDestroySurface(instance, &surface);
gnDestroyDevice(&device); gnDestroyDevice(&device);
gnDestroyInstance(&instance); gnDestroyInstance(&instance);
} }