I am currently porting a CUDA program to OpenCL that needs to share the framebuffer between OpenCL and OpenGL.

In order to get the basics working I am testing with a kernel that simply sets the color of all pixels to white.

The context is created for interop and clCreateFromGLBuffer returns CL_SUCCESS. I am also using glFinish(), enqueueAcquireGLObjects(), enqueueReleaseGLObjects() and commandQueue.finish() around the kernel launch

In the first frame everything works. If I pause it after the draw call, the image is white.

In the second frame, however, the function clEnqueueNDRangeKernel returns an error: CL_INVALID_KERNEL_ARGS

between the two frames the cl_mem object is released and the clCreateFromGLBuffer function is called again CL_SUCCESSfully

This release and create is done instead of cudaGLMapBufferObject / cudaGLUnmapBufferObject, because I wanted to keep the program logic intact and don’t know what you have to do in OpenCL instead of calling those two functions

Geforce GTX 280 (driver version 197.xx)
GL interop SDK samples work

Has anyone seen this behaviour before and can help me?

Thanks for reading.