我从“developer.nvidia.com/opencl”下载了“OpenCL Marching Cubes Isosurfaces”示例并成功编译了它。但是,它执行时出现以下错误:
!!! Error # -59 (CL_INVALID_OPERATION) at line 863 , in file oclMarchingCubes.cpp !!!
oclMarchingCubes.cpp 的第 858-864 行
// generate triangles, writing to vertex buffers
if( g_glInterop ) {
// Acquire PBO for OpenCL writing
glFlush();
ciErrNum = clEnqueueAcquireGLObjects(cqCommandQueue, 2, interopBuffers, 0, 0, 0);
oclCheckErrorEX(ciErrNum, CL_SUCCESS, pCleanup);
}
推测是opencl获取PBO写失败
ciErrNum = clEnqueueAcquireGLObjects(cqCommandQueue, 2, interopBuffers, 0, 0, 0);
可是,怎么解决呢?
下面是运行 gdb clEnqueueAcquireGLObjects 的屏幕输出:
```
...loading Scan.cl
...creating scan program
...building scan program
...creating scan kernels
...checking minimum supported workgroup size
...allocating internal buffers
grid: 32 x 32 x 32 = 32768 voxels
max verts = 102400
Read './src/oclMarchingCubes/data/Bucky.raw', 32768 bytes
!!! Error # -59 (CL_INVALID_OPERATION) at line 863 , in file oclMarchingCubes.cpp !!!
[oclMarchingCubes] test results...
FAILED
> exiting in 3 seconds: 3...2...1...done!
bin/linux/release/oclMarchingCubes Exiting...
Press <Enter> to Quit
----------------------
```