2,851
社区成员




使用OpenCL进行数据处理时,对于外部的Buffer需要导入并创建clCreateBuffer,使用后再进行释放clReleaseMemObject会有额外的消耗。而使用clImportMemoryARM导入的CLBuffer可以持有,并直接使用,避免多余的操作。
#define FUNCPTR(FuncName) FuncPtr##FuncName
FUNCPTR(clImportMemoryARM) m_pfnclImportMemoryARM;
m_pfnclImportMemoryARM = (FUNCPTR(clImportMemoryARM))RUN(clGetExtensionFunctionAddress)("clImportMemoryARM");
if (m_pfnclImportMemoryARM == nullptr) {
printf("Failed to load clImportMemoryARM function.\n");
}else{
printf("clImportMemoryARM function loaded successfully.\n");
}
size_t memSize = extSize;
int fd = extFD;
const cl_import_properties_arm prop[3] = {CL_IMPORT_TYPE_ARM, CL_IMPORT_TYPE_DMA_BUF_ARM, 0};
cl_mem importedBuffer = RUN(clImportMemoryARM)(m_clContext, CL_MEM_READ_WRITE, prop, &fd, memSize, &errNum);
获取函数指针时得到的结果时nullptr
在系统的环境里编写程序的时候链接到libGLES_mali_default_8a_32-p-r16p0gralloc1.so 这个库里, 然后在代码编译的时候加入这个头文件cl_ext.h。