#include "megbrain_build_config.h"
#if MGB_CUDA
#ifndef _NV_OPTICALFLOW_CUDA_H_
#define _NV_OPTICALFLOW_CUDA_H_
#include <cuda.h>
#include "nvOpticalFlowCommon.h"
#define MAX_NUM_PLANES 3
#if defined(__cplusplus)
extern "C" {
#endif
typedef enum _NV_OF_CUDA_BUFFER_TYPE {
NV_OF_CUDA_BUFFER_TYPE_UNDEFINED,
NV_OF_CUDA_BUFFER_TYPE_CUARRAY,
NV_OF_CUDA_BUFFER_TYPE_CUDEVICEPTR,
NV_OF_CUDA_BUFFER_TYPE_MAX
} NV_OF_CUDA_BUFFER_TYPE;
typedef struct _NV_OF_BUFFER_STRIDE {
uint32_t strideXInBytes;
uint32_t strideYInBytes;
} NV_OF_BUFFER_STRIDE;
typedef struct _NV_OF_CUDA_BUFFER_STRIDE_INFO {
NV_OF_BUFFER_STRIDE
strideInfo[MAX_NUM_PLANES];
uint32_t numPlanes;
} NV_OF_CUDA_BUFFER_STRIDE_INFO;
typedef NV_OF_STATUS(NVOFAPI* PFNNVCREATEOPTICALFLOWCUDA)(
CUcontext device, NvOFHandle* hOf);
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFSETIOCUDASTREAMS)(
NvOFHandle hOf, CUstream inputStream, CUstream outputStream);
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFCREATEGPUBUFFERCUDA)(
NvOFHandle hOf, const NV_OF_BUFFER_DESCRIPTOR* bufferDesc,
NV_OF_CUDA_BUFFER_TYPE bufferType, NvOFGPUBufferHandle* hOfGpuBuffer);
typedef CUarray(NVOFAPI* PFNNVOFGPUBUFFERGETCUARRAY)(NvOFGPUBufferHandle ofGpuBuffer);
typedef CUdeviceptr(NVOFAPI* PFNNVOFGPUBUFFERGETCUDEVICEPTR)(
NvOFGPUBufferHandle ofGpuBuffer);
typedef NV_OF_STATUS(NVOFAPI* PFNVOFGPUBUFFERGETSTRIDEINFO)(
NvOFGPUBufferHandle ofGpuBuffer, NV_OF_CUDA_BUFFER_STRIDE_INFO* strideInfo);
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFDESTROYGPUBUFFERCUDA)(NvOFGPUBufferHandle buffer);
typedef struct _NV_OF_CUDA_API_FUNCTION_LIST {
PFNNVCREATEOPTICALFLOWCUDA nvCreateOpticalFlowCuda;
PFNNVOFINIT nvOFInit;
PFNNVOFCREATEGPUBUFFERCUDA nvOFCreateGPUBufferCuda;
PFNNVOFGPUBUFFERGETCUARRAY nvOFGPUBufferGetCUarray;
PFNNVOFGPUBUFFERGETCUDEVICEPTR nvOFGPUBufferGetCUdeviceptr;
PFNVOFGPUBUFFERGETSTRIDEINFO nvOFGPUBufferGetStrideInfo;
PFNNVOFSETIOCUDASTREAMS nvOFSetIOCudaStreams;
PFNNVOFEXECUTE nvOFExecute;
PFNNVOFDESTROYGPUBUFFERCUDA nvOFDestroyGPUBufferCuda;
PFNNVOFDESTROY nvOFDestroy;
PFNNVOFGETLASTERROR nvOFGetLastError;
PFNNVOFGETCAPS nvOFGetCaps;
} NV_OF_CUDA_API_FUNCTION_LIST;
NV_OF_STATUS NVOFAPI
NvOFAPICreateInstanceCuda(uint32_t apiVer, NV_OF_CUDA_API_FUNCTION_LIST* functionList);
#if defined(__cplusplus)
}
#endif
#endif
#endif