0

我正在使用具有图像作为参数的内核,其中包含 java 和 JOCL

input ="12.jpg";
image = createBufferedImage(input);
image = createBufferedImage(input);
DataBufferInt dataBufferSrc = (DataBufferInt)image.getRaster().getDataBuffer();
int dataSrc[] = dataBufferSrc.getData();
inputImageMem = clCreateBuffer(context, CL_MEM_READ_ONLY| CL_MEM_USE_HOST_PTR,
            dataSrc.length * Sizeof.cl_uint, Pointer.to(dataSrc), null);
clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem));

当我编译时,我收到错误:

指针不能指向空对象

它在行中:

clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem));

可能的问题是什么?我该如何解决?

PS:createBufferedImage是取自 JOCL 样本 http://jocl.org/的函数

4

1 回答 1

1

从 openCL clCreateBuffer文档

返回一个有效的非零缓冲区对象,如果缓冲区对象创建成功,则 errcode_ret 设置为 CL_SUCCESS。否则,它返回一个 NULL 值,并在 errcode_ret 中返回以下错误值之一...

function的最后一个参数clCreateBuffer是一个 int 指针(您希望返回错误代码的位置)。您当前已将其设置为null. 我的猜测是某些东西失败了clCreateBuffer。我建议检查 的值errcode_ret,它将包含一个错误代码,可以帮助您解决问题。

于 2016-06-22T12:52:55.970 回答