@Override public void write(CommandQueue queue, ByteBuffer src, long size, long offset) { //Note: LWJGL does not support the size parameter, I have to set the buffer limit src.limit((int) (src.position() + size)); CLCommandQueue q = ((LwjglCommandQueue)queue).getQueue(); int ret = CL10.clEnqueueWriteBuffer(q, buffer, CL10.CL_TRUE, offset, src, null, null); Utils.checkError(ret, "clEnqueueWriteBuffer"); }
@Override public void read(CommandQueue queue, ByteBuffer dest, long size, long offset) { //Note: LWJGL does not support the size parameter, I have to set the buffer limit dest.limit((int) (dest.position() + size)); int ret = CL10.clEnqueueReadBuffer(((LwjglCommandQueue)queue).getQueue(), buffer, true, offset, dest, null, null); Utils.checkError(ret, "clEnqueueReadBuffer"); }
@Override public void releaseBufferForSharingNoEvent(CommandQueue queue) { CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueReleaseGLObjects(q, buffer, null, null); Utils.checkError(ret, "clEnqueueReleaseGLObjects"); }
@Override public void acquireBufferForSharingNoEvent(CommandQueue queue) { CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueAcquireGLObjects(q, buffer, null, null); Utils.checkError(ret, "clEnqueueAcquireGLObjects"); }
@Override public void acquireImageForSharingNoEvent(CommandQueue queue) { CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueAcquireGLObjects(q, image, null, null); Utils.checkError(ret, "clEnqueueAcquireGLObjects"); } @Override
@Override public void acquireBufferForSharingNoEvent(CommandQueue queue) { long q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueAcquireGLObjects(q, buffer, null, null); Utils.checkError(ret, "clEnqueueAcquireGLObjects"); }
@Override public void releaseImageForSharingNoEvent(CommandQueue queue) { CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueReleaseGLObjects(q, image, null, null); Utils.checkError(ret, "clEnqueueReleaseGLObjects"); }
@Override public void releaseBufferForSharingNoEvent(CommandQueue queue) { Utils.assertSharingPossible(); long q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueReleaseGLObjects(q, buffer, null, null); Utils.checkError(ret, "clEnqueueReleaseGLObjects"); }
@Override public Event readAsync(CommandQueue queue, ByteBuffer dest, long size, long offset) { //Note: LWJGL does not support the size parameter, I have to set the buffer limit dest.limit((int) (dest.position() + size)); Utils.pointerBuffers[0].rewind(); CLCommandQueue q = ((LwjglCommandQueue)queue).getQueue(); int ret = CL10.clEnqueueReadBuffer(q, buffer, CL10.CL_FALSE, offset, dest, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueReadBuffer"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(q.getCLEvent(event)); }
@Override public Event writeAsync(CommandQueue queue, ByteBuffer src, long size, long offset) { //Note: LWJGL does not support the size parameter, I have to set the buffer limit src.limit((int) (src.position() + size)); Utils.pointerBuffers[0].rewind(); CLCommandQueue q = ((LwjglCommandQueue)queue).getQueue(); int ret = CL10.clEnqueueWriteBuffer(q, buffer, CL10.CL_FALSE, offset, src, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueWriteBuffer"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(q.getCLEvent(event)); }
@Override public void unmap(CommandQueue queue, ImageMapping mapping) { mapping.buffer.position(0); long q = ((LwjglCommandQueue) queue).getQueue(); Utils.pointerBuffers[0].rewind(); int ret = CL10.clEnqueueUnmapMemObject(q, image, mapping.buffer, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueUnmapMemObject"); long event = Utils.pointerBuffers[0].get(0); ret = CL10.clWaitForEvents(event); Utils.checkError(ret, "clWaitForEvents"); }
@Override public void unmap(CommandQueue queue, ImageMapping mapping) { mapping.buffer.position(0); CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); Utils.pointerBuffers[0].rewind(); int ret = CL10.clEnqueueUnmapMemObject(q, image, mapping.buffer, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueUnmapMemObject"); long event = Utils.pointerBuffers[0].get(0); ret = CL10.clWaitForEvents(q.getCLEvent(event)); Utils.checkError(ret, "clWaitForEvents"); }
@Override public Event acquireImageForSharingAsync(CommandQueue queue) { Utils.pointerBuffers[0].rewind(); long q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueAcquireGLObjects(q, image, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueAcquireGLObjects"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(event); } @Override
@Override public Event releaseBufferForSharingAsync(CommandQueue queue) { Utils.pointerBuffers[0].rewind(); CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueReleaseGLObjects(q, buffer, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueReleaseGLObjects"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(q.getCLEvent(event)); } @Override
@Override public Event releaseImageForSharingAsync(CommandQueue queue) { Utils.assertSharingPossible(); Utils.pointerBuffers[0].rewind(); long q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueReleaseGLObjects(q, image, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueReleaseGLObjects"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(event); } @Override
@Override public void copyTo(CommandQueue queue, Buffer dest, long size, long srcOffset, long destOffset) { long q = ((LwjglCommandQueue)queue).getQueue(); Utils.pointerBuffers[0].rewind(); int ret = CL10.clEnqueueCopyBuffer(q, buffer, ((LwjglBuffer) dest).buffer, srcOffset, destOffset, size, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueCopyBuffer"); long event = Utils.pointerBuffers[0].get(0); ret = CL10.clWaitForEvents(event); Utils.checkError(ret, "clWaitForEvents"); }
@Override public Event acquireBufferForSharingAsync(CommandQueue queue) { Utils.pointerBuffers[0].rewind(); CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueAcquireGLObjects(q, buffer, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueAcquireGLObjects"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(q.getCLEvent(event)); } @Override
@Override public Event acquireImageForSharingAsync(CommandQueue queue) { Utils.pointerBuffers[0].rewind(); CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); int ret = CL10GL.clEnqueueAcquireGLObjects(q, image, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueAcquireGLObjects"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(q.getCLEvent(event)); } @Override
@Override public Event copyToAsync(CommandQueue queue, Buffer dest, long size, long srcOffset, long destOffset) { CLCommandQueue q = ((LwjglCommandQueue)queue).getQueue(); Utils.pointerBuffers[0].rewind(); int ret = CL10.clEnqueueCopyBuffer(q, buffer, ((LwjglBuffer) dest).buffer, srcOffset, destOffset, size, null, Utils.pointerBuffers[0]); Utils.checkError(ret, "clEnqueueCopyBuffer"); long event = Utils.pointerBuffers[0].get(0); return new LwjglEvent(q.getCLEvent(event)); }
@Override public com.jme3.opencl.Buffer.AsyncMapping mapAsync(CommandQueue queue, long size, long offset, MappingAccess access) { Utils.pointerBuffers[0].rewind(); Utils.errorBuffer.rewind(); CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); long flags = Utils.getMappingAccessFlags(access); ByteBuffer buf = CL10.clEnqueueMapBuffer(q, buffer, CL10.CL_FALSE, flags, offset, size, null, Utils.pointerBuffers[0], Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clEnqueueMapBuffer"); long event = Utils.pointerBuffers[0].get(0); return new com.jme3.opencl.Buffer.AsyncMapping(new LwjglEvent(q.getCLEvent(event)), buf); }