Module Sarek_metal.Metal_bindings

Library Loading

val metal_lib : Dl.library option Stdlib.Lazy.t

Load Metal framework dynamically (lazy)

val is_available : unit -> bool

Check if Metal library is available

val get_metal_lib : unit -> Dl.library

Get Metal library, raising if not available

Objective-C Runtime Helpers

val objc_lib : Dl.library option Stdlib.Lazy.t

We need libobjc for calling Objective-C methods

val get_objc_lib : unit -> Dl.library
val objc_msgSend_lazy : (unit Ctypes_static.ptr -> unit Ctypes_static.ptr -> unit Ctypes_static.ptr) lazy_t

objc_msgSend - the core Objective-C message dispatch

val objc_msgSend : unit Ctypes_static.ptr -> unit Ctypes_static.ptr -> unit Ctypes_static.ptr
val sel_registerName_lazy : (string -> unit Ctypes_static.ptr) lazy_t

sel_registerName - register a selector

val sel_registerName : string -> unit Ctypes_static.ptr
val objc_getClass_lazy : (string -> unit Ctypes_static.ptr) lazy_t

objc_getClass - get a class by name

val objc_getClass : string -> unit Ctypes_static.ptr

Foundation Helpers

val foundation_lib : Dl.library option Stdlib.Lazy.t

Load Foundation framework for NSString, NSArray, etc

val get_foundation_lib : unit -> Dl.library
val nsstring_from_cstring : string -> unit Ctypes_static.ptr

Helper: Create NSString from C string

val cstring_from_nsstring : unit Ctypes_static.ptr -> string

Helper: Get C string from NSString

val nserror_description : unit Ctypes.ptr -> string

Helper: Get NSError description

Metal Device API

val mtl_create_system_default_device_lazy : (unit -> Metal_types.mtl_device) lazy_t

MTLCreateSystemDefaultDevice - get default GPU

val mtl_create_system_default_device : unit -> Metal_types.mtl_device
val mtl_copy_all_devices_lazy : (unit -> unit Ctypes_static.ptr) lazy_t

MTLCopyAllDevices - get all Metal devices

val mtl_copy_all_devices : unit -> unit Ctypes_static.ptr
val mtl_device_name : unit Ctypes_static.ptr -> string

Device property getters via objc_msgSend

val mtl_device_max_threads_per_threadgroup : unit Ctypes_static.ptr -> Metal_types.mtl_size Ctypes.structure
val mtl_device_max_threadgroup_memory_length : unit Ctypes_static.ptr -> int

Command Queue API

val mtl_device_new_command_queue : unit Ctypes_static.ptr -> unit Ctypes_static.ptr
val mtl_command_queue_command_buffer : unit Ctypes_static.ptr -> unit Ctypes_static.ptr

Command Buffer API

val mtl_command_buffer_compute_command_encoder : unit Ctypes_static.ptr -> unit Ctypes_static.ptr
val mtl_command_buffer_commit : unit Ctypes_static.ptr -> unit
val mtl_command_buffer_wait_until_completed : unit Ctypes_static.ptr -> unit

Buffer API

val mtl_device_new_buffer_with_length : unit Ctypes_static.ptr -> int -> Unsigned.uint64 -> Metal_types.mtl_buffer
val mtl_buffer_contents : unit Ctypes_static.ptr -> unit Ctypes_static.ptr
val mtl_buffer_length : unit Ctypes_static.ptr -> int

Library API

val mtl_device_new_library_with_source : unit Ctypes_static.ptr -> string -> 'a -> (Metal_types.mtl_library, string) Stdlib.result
val mtl_library_new_function_with_name : unit Ctypes_static.ptr -> string -> Metal_types.mtl_function

Compute Pipeline API

val mtl_device_new_compute_pipeline_state : unit Ctypes_static.ptr -> Metal_types.mtl_function -> (Metal_types.mtl_compute_pipeline_state, string) Stdlib.result
val mtl_compute_pipeline_state_max_total_threads_per_threadgroup : unit Ctypes_static.ptr -> int
val mtl_compute_pipeline_state_threadgroup_memory_length : unit Ctypes_static.ptr -> int

Compute Command Encoder API

val mtl_compute_command_encoder_set_compute_pipeline_state : unit Ctypes_static.ptr -> Metal_types.mtl_compute_pipeline_state -> unit
val mtl_compute_command_encoder_set_buffer : unit Ctypes_static.ptr -> Metal_types.mtl_buffer -> int -> int -> unit
val mtl_compute_command_encoder_set_bytes : unit Ctypes_static.ptr -> unit Ctypes_static.ptr -> int -> int -> unit
val mtl_compute_command_encoder_dispatch_threads : unit Ctypes_static.ptr -> Metal_types.mtl_size Ctypes.structure -> Metal_types.mtl_size Ctypes.structure -> unit
val mtl_compute_command_encoder_end_encoding : unit Ctypes_static.ptr -> unit

Memory Management

val release : unit Ctypes.ptr -> unit

Release any NSObject/Metal object

val retain : unit Ctypes_static.ptr -> unit Ctypes_static.ptr

Retain any NSObject/Metal object