#ifndef MNNSharedContext_h
#define MNNSharedContext_h
#include "MNNDefine.h"
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#ifdef MNN_VULKAN
struct MNNVulkanContext {
VkInstance pInstance;
VkPhysicalDevice pPhysicalDevice;
VkDevice pDevice;
VkQueue pQueue;
uint32_t iQueueFamilyIndex;
};
struct MNNVulkanTensorContent {
VkBuffer buffer;
VkDeviceSize size;
VkDeviceSize offset;
halide_type_t realType;
int32_t mask; };
#endif
#ifdef MNN_METAL
struct MNNMetalSharedContext {
id<MTLDevice> device;
id<MTLCommandQueue> queue;
};
struct MNNMetalTensorContent {
id<MTLBuffer> buffer;
int32_t offset;
id<MTLTexture> texture;
halide_type_t type;
int32_t mask;
int32_t forFuture[8];
};
MNN_PUBLIC int MNNMetalGetTensorContent(MNNMetalTensorContent* content, void* tensor);
#endif
#ifdef MNN_USER_SET_DEVICE
struct MNNDeviceContext {
uint32_t deviceId = 0;
uint32_t platformId = 0;
uint32_t platformSize = 0;
void *contextPtr = nullptr;
};
#endif
#ifdef __cplusplus
}
#endif
#endif