virtio-accel-coreml 0.2.1

macOS Core ML and Apple Neural Engine backend for virtio-accel
Documentation
#ifndef VIRTIO_ACCEL_COREML_BRIDGE_H
#define VIRTIO_ACCEL_COREML_BRIDGE_H

#include <stddef.h>
#include <stdint.h>

enum va_coreml_error_kind {
    VA_COREML_OK = 0,
    VA_COREML_UNSUPPORTED = 1,
    VA_COREML_INCOMPATIBLE = 2,
    VA_COREML_INVALID_ARGUMENT = 3,
    VA_COREML_OUT_OF_BOUNDS = 4,
    VA_COREML_OUT_OF_MEMORY = 5,
    VA_COREML_RESOURCE_LIMIT = 6,
    VA_COREML_DEVICE_LOST = 7,
    VA_COREML_EXTERNAL = 8,
};

enum va_coreml_feature_role {
    VA_COREML_INPUT = 1,
    VA_COREML_OUTPUT = 2,
};

enum va_coreml_access_mode {
    VA_COREML_READ = 1,
    VA_COREML_WRITE = 2,
    VA_COREML_READ_WRITE = 3,
};

enum va_coreml_event_status {
    VA_COREML_EVENT_PENDING = 0,
    VA_COREML_EVENT_COMPLETE = 1,
    VA_COREML_EVENT_FAILED = 2,
};

struct va_coreml_error {
    uint32_t kind;
    uint32_t domain;
    int64_t code;
};

struct va_coreml_feature_mapping {
    uint32_t slot;
    uint8_t role;
    const uint8_t *name;
    size_t name_len;
};

struct va_coreml_binding {
    uint32_t slot;
    uint8_t access;
    void *data;
    uint64_t bytes;
};

typedef void (*va_coreml_release_context_fn)(void *context);

int va_coreml_has_neural_engine(void);

int va_coreml_supports_int8(void);

void *va_coreml_model_load(const uint8_t *path,
                           size_t path_len,
                           const struct va_coreml_feature_mapping *mappings,
                           size_t mapping_count,
                           struct va_coreml_error *error);

void *va_coreml_model_load_memory(const uint8_t *bytes,
                                  size_t bytes_len,
                                  const struct va_coreml_feature_mapping *mappings,
                                  size_t mapping_count,
                                  struct va_coreml_error *error);

void va_coreml_model_release(void *model);

void *va_coreml_submit(void *model,
                       const struct va_coreml_binding *bindings,
                       size_t binding_count,
                       void *context,
                       va_coreml_release_context_fn release_context,
                       struct va_coreml_error *error);

uint32_t va_coreml_event_poll(void *event, struct va_coreml_error *error);

void va_coreml_event_release(void *event);

#endif