implement core branching logic for metal enumeration of physical devices

This commit is contained in:
2026-05-07 17:18:36 -04:00
parent e11a705dbd
commit b46497d3e1
9 changed files with 48 additions and 2 deletions
@@ -0,0 +1,7 @@
#include "gryphn_physical_device.h"
#include "instance/gryphn_instance.h"
#include "stdint.h"
gnReturnCode gnEnumeratePhysicalDevices(gnInstance instance, uint32_t* deviceCount, gnPhysicalDevice* devices) {
return instance->dispatchTable.enumeratePhysicalDevices(instance, deviceCount, devices);
}
@@ -0,0 +1,6 @@
#pragma once
#include "gryphn_handle.h"
#include "gryphn_return_code.h"
#include "stdint.h"
gnReturnCode gnEnumeratePhysicalDevices(gnInstance instance, uint32_t* deviceCount, gnPhysicalDevice* devices);
+3
View File
@@ -1,4 +1,7 @@
#pragma once
#define GN_HANDLE(type) typedef struct type##_t* type
#define GN_IMPLEMENTATION_HANDLE(type) typedef void* type
GN_HANDLE(gnInstance);
GN_IMPLEMENTATION_HANDLE(gnPhysicalDevice);
@@ -2,7 +2,10 @@
#include "gryphn_handle.h"
typedef gnReturnCode (*PFN_gnDestroyInstance)(gnInstance);
typedef gnReturnCode (*PFN_enumeratePhysicalDevices)(gnInstance, uint32_t*, gnPhysicalDevice*);
typedef struct gnInstanceDispatchTable {
PFN_gnDestroyInstance destroyInstance;
PFN_enumeratePhysicalDevices enumeratePhysicalDevices;
} gnInstanceDispatchTable;
+2 -2
View File
@@ -2,6 +2,7 @@
#include "stdio.h"
#include "instance/gryphn_instance.h"
#include "gryphn_handle.h"
#include "metal_functions.h"
extern "C" uint32_t gnInternalIsApiSupported(gnVersion version) {
if (version != gnCreateVersion(1, 0, 0)) return 0;
@@ -13,12 +14,11 @@ extern "C" uint32_t gnInternalIsApiSupported(gnVersion version) {
}
gnReturnCode destroyBackend(gnInstance instance) {
printf("Calling destroy instance");
return GN_SUCCESS;
}
extern "C" gnReturnCode initBackend(gnInstance instance, gnInstanceCreateInfo* info) {
printf("calling init instance\n");
instance->dispatchTable.destroyInstance = destroyBackend;
instance->dispatchTable.enumeratePhysicalDevices = metalEnumeratePhysicalDevices;
return GN_SUCCESS;
}
@@ -0,0 +1,9 @@
#include "metal_functions.h"
#include "stdio.h"
#include "stdint.h"
gnReturnCode metalEnumeratePhysicalDevices(gnInstance instance, uint32_t* deviceCount, gnPhysicalDevice* devices) {
*deviceCount = 0;
return GN_SUCCESS;
}
c
@@ -0,0 +1,7 @@
#pragma once
#include "gryphn_handle.h"
#include "gryphn_return_code.h"
#include "stdint.h"
gnReturnCode metalEnumeratePhysicalDevices(gnInstance instance, uint32_t* deviceCount, gnPhysicalDevice* devices);
+1
View File
@@ -4,6 +4,7 @@
extern "C" {
#endif
#include "GryphnLoader/src/instance/gryphn_instance.h"
#include "GryphnLoader/src/device/gryphn_physical_device.h"
#ifdef __cplusplus
}
#endif
+10
View File
@@ -40,9 +40,19 @@ void createInstance() {
free(backends);
}
void createDevice() {
uint32_t physicalDeviceCount;
CHECK(gnEnumeratePhysicalDevices(instance, &physicalDeviceCount, nullptr));
gnPhysicalDevice* devices = (gnPhysicalDevice*)malloc(sizeof(gnPhysicalDevice) * physicalDeviceCount);
CHECK(gnEnumeratePhysicalDevices(instance, &physicalDeviceCount, devices));
std::cout << "Found " << physicalDeviceCount << " physical devices:\n";
}
int main() {
try {
createInstance();
createDevice();
} catch (const std::exception& e) {
std::cerr << "Caught Exception: " << e.what() << "\n";
return 0;