Halide
|
#include "HalideRuntime.h"
Go to the source code of this file.
Macros | |
#define | HALIDE_RUNTIME_METAL |
Functions | |
const struct halide_device_interface_t * | halide_metal_device_interface () |
int | halide_metal_initialize_kernels (void *user_context, void **state_ptr, const char *src, int size) |
These are forward declared here to allow clients to override the Halide Metal runtime. More... | |
void | halide_metal_finalize_kernels (void *user_context, void *state_ptr) |
int | halide_metal_run (void *user_context, void *state_ptr, const char *entry_name, int blocksX, int blocksY, int blocksZ, int threadsX, int threadsY, int threadsZ, int shared_mem_bytes, struct halide_type_t arg_types[], void *args[], int8_t arg_is_buffer[]) |
int | halide_metal_wrap_buffer (void *user_context, struct halide_buffer_t *buf, uint64_t buffer) |
Set the underlying MTLBuffer for a halide_buffer_t. More... | |
int | halide_metal_detach_buffer (void *user_context, struct halide_buffer_t *buf) |
Disconnect a halide_buffer_t from the memory it was previously wrapped around. More... | |
uintptr_t | halide_metal_get_buffer (void *user_context, struct halide_buffer_t *buf) |
Return the underlying MTLBuffer for a halide_buffer_t. More... | |
uint64_t | halide_metal_get_crop_offset (void *user_context, struct halide_buffer_t *buf) |
Returns the offset associated with the Metal Buffer allocation via device_crop or device_slice. More... | |
int | halide_metal_acquire_context (void *user_context, struct halide_metal_device **device_ret, struct halide_metal_command_queue **queue_ret, bool create) |
This prototype is exported as applications will typically need to replace it to get Halide filters to execute on the same device and command queue used for other purposes. More... | |
int | halide_metal_release_context (void *user_context) |
This call balances each successful halide_metal_acquire_context call. More... | |
Routines specific to the Halide Metal runtime.
Definition in file HalideRuntimeMetal.h.
#define HALIDE_RUNTIME_METAL |
Definition at line 19 of file HalideRuntimeMetal.h.
const struct halide_device_interface_t* halide_metal_device_interface | ( | ) |
int halide_metal_initialize_kernels | ( | void * | user_context, |
void ** | state_ptr, | ||
const char * | src, | ||
int | size | ||
) |
These are forward declared here to allow clients to override the Halide Metal runtime.
Do not call them.
void halide_metal_finalize_kernels | ( | void * | user_context, |
void * | state_ptr | ||
) |
int halide_metal_run | ( | void * | user_context, |
void * | state_ptr, | ||
const char * | entry_name, | ||
int | blocksX, | ||
int | blocksY, | ||
int | blocksZ, | ||
int | threadsX, | ||
int | threadsY, | ||
int | threadsZ, | ||
int | shared_mem_bytes, | ||
struct halide_type_t | arg_types[], | ||
void * | args[], | ||
int8_t | arg_is_buffer[] | ||
) |
int halide_metal_wrap_buffer | ( | void * | user_context, |
struct halide_buffer_t * | buf, | ||
uint64_t | buffer | ||
) |
Set the underlying MTLBuffer for a halide_buffer_t.
This memory should be allocated using newBufferWithLength:options or similar and must have an extent large enough to cover that specified by the halide_buffer_t extent fields. The dev field of the halide_buffer_t must be NULL when this routine is called. This call can fail due to running out of memory or being passed an invalid buffer. The device and host dirty bits are left unmodified.
int halide_metal_detach_buffer | ( | void * | user_context, |
struct halide_buffer_t * | buf | ||
) |
Disconnect a halide_buffer_t from the memory it was previously wrapped around.
Should only be called for a halide_buffer_t that halide_metal_wrap_buffer was previously called on. Frees any storage associated with the binding of the halide_buffer_t and the buffer, but does not free the MTLBuffer. The dev field of the halide_buffer_t will be NULL on return.
uintptr_t halide_metal_get_buffer | ( | void * | user_context, |
struct halide_buffer_t * | buf | ||
) |
Return the underlying MTLBuffer for a halide_buffer_t.
This buffer must be valid on an Metal device, or not have any associated device memory. If there is no device memory (dev field is NULL), this returns 0.
uint64_t halide_metal_get_crop_offset | ( | void * | user_context, |
struct halide_buffer_t * | buf | ||
) |
Returns the offset associated with the Metal Buffer allocation via device_crop or device_slice.
int halide_metal_acquire_context | ( | void * | user_context, |
struct halide_metal_device ** | device_ret, | ||
struct halide_metal_command_queue ** | queue_ret, | ||
bool | create | ||
) |
This prototype is exported as applications will typically need to replace it to get Halide filters to execute on the same device and command queue used for other purposes.
The halide_metal_device is an id <MTLDevice> and halide_metal_command_queue is an id <MTLCommandQueue>. No reference counting is done by Halide on these objects. They must remain valid until all off the following are true:
int halide_metal_release_context | ( | void * | user_context | ) |
This call balances each successful halide_metal_acquire_context call.
If halide_metal_acquire_context is replaced, this routine must be replaced as well.