diff --git a/rendering_api/metal/src/core/sync/semaphore/metal_semaphore.h b/rendering_api/metal/src/core/sync/semaphore/metal_semaphore.h new file mode 100644 index 0000000..f359699 --- /dev/null +++ b/rendering_api/metal/src/core/sync/semaphore/metal_semaphore.h @@ -0,0 +1,7 @@ +#pragma once +#include "core/sync/semaphore/gryphn_semaphore.h" +#import + +typedef struct gnPlatformSemaphore_t { + id event; +} gnPlatformSemaphore; diff --git a/rendering_api/metal/src/core/sync/semaphore/metal_semaphore.m b/rendering_api/metal/src/core/sync/semaphore/metal_semaphore.m new file mode 100644 index 0000000..342e73a --- /dev/null +++ b/rendering_api/metal/src/core/sync/semaphore/metal_semaphore.m @@ -0,0 +1,13 @@ +#include "metal_semaphore.h" +#include "core/devices/metal_output_devices.h" + +gnReturnCode gnCreateSemaphoreFn(struct gnSemaphore_t* semaphore, struct gnOutputDevice_t* device) { + semaphore->semaphore = malloc(sizeof(gnPlatformSemaphore)); + semaphore->semaphore->event = [device->outputDevice->device newEvent]; + + return GN_SUCCESS; +} +void gnDestroySemaphoreFn(struct gnSemaphore_t* semaphore) { + [semaphore->semaphore->event release]; + free(semaphore->semaphore); +}