From e16807c7f982538fd1c871ffaae09cef64095f1d Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Sat, 24 May 2025 15:53:19 -0400 Subject: [PATCH] more objective c --- .../src/core/debugger/metal_debugger.cpp | 11 -------- ...utput_device.cpp => metal_output_device.m} | 28 ++++++++++++++++--- .../src/core/devices/metal_output_devices.h | 4 ++- 3 files changed, 27 insertions(+), 16 deletions(-) delete mode 100644 rendering_api/metal/src/core/debugger/metal_debugger.cpp rename rendering_api/metal/src/core/devices/{metal_output_device.cpp => metal_output_device.m} (72%) diff --git a/rendering_api/metal/src/core/debugger/metal_debugger.cpp b/rendering_api/metal/src/core/debugger/metal_debugger.cpp deleted file mode 100644 index 4385cca..0000000 --- a/rendering_api/metal/src/core/debugger/metal_debugger.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include - -// these do nothing because I am too lazy to write a debugger for metal at this point in time -GN_EXPORT gnReturnCode gnCreateDebuggerFn(gnDebugger* debugger, gnInstance* instance, const gnDebuggerInfo_t info) { - return GN_SUCCESS; -} -GN_EXPORT void gnDestroyDebuggerFn(gnDebugger& instance) { - -} -// I will at some point but if you have chosen the fate of writing this on a mac than you should really -// hate yourself diff --git a/rendering_api/metal/src/core/devices/metal_output_device.cpp b/rendering_api/metal/src/core/devices/metal_output_device.m similarity index 72% rename from rendering_api/metal/src/core/devices/metal_output_device.cpp rename to rendering_api/metal/src/core/devices/metal_output_device.m index 7fc1eff..5648cf0 100644 --- a/rendering_api/metal/src/core/devices/metal_output_device.cpp +++ b/rendering_api/metal/src/core/devices/metal_output_device.m @@ -1,7 +1,27 @@ -// #include -// #include -// #include -// #include "metal_output_devices.h" +#include +#include +#include "metal_output_devices.h" +#include "core/instance/metal_instance.h" +#include "core/instance/gryphn_instance.h" + +gnReturnCode gnCreateOutputDeviceFn(gnOutputDevice* outputDevice, gnInstance* instance, struct gnOutputDeviceInfo_t deviceInfo) { + outputDevice->outputDevice = malloc(sizeof(gnPlatformOutputDevice)); + outputDevice->outputDevice->device = deviceInfo.physicalDevice.physicalDevice->device.retain; + outputDevice->outputDevice->queueCount = deviceInfo.queueInfoCount; + outputDevice->outputDevice->queues = malloc(sizeof(id) * deviceInfo.queueInfoCount); + for (int i = 0; i < deviceInfo.queueInfoCount; i++) { + outputDevice->outputDevice->queues[i] = outputDevice->outputDevice->device.newCommandQueue; + } + + return GN_SUCCESS; +} + +void gnDestroyOutputDeviceFn(gnOutputDevice* device) { + for (int i = 0; i < device->outputDevice->queueCount; i++) { + [device->outputDevice->queues[i] release]; + } + [device->outputDevice->device release]; +} // struct mtlFramebufferVertex { // float x, y; diff --git a/rendering_api/metal/src/core/devices/metal_output_devices.h b/rendering_api/metal/src/core/devices/metal_output_devices.h index 7646dae..76d78cd 100644 --- a/rendering_api/metal/src/core/devices/metal_output_devices.h +++ b/rendering_api/metal/src/core/devices/metal_output_devices.h @@ -10,6 +10,8 @@ struct gnPlatformPhysicalDevice_t { struct gnPlatformOutputDevice_t { id device; - // MTLCommandQueue* commandQueue; MTKView* contentView; + + int queueCount; + id* queues; } gnPlatformOutputDevice;