@Override public void flush() { int ret = CL10.clFlush(queue); Utils.checkError(ret, "clFlush"); }
@Override public void setArg(int index, int i) { int ret = CL10.clSetKernelArg1i(kernel, index, i); Utils.checkError(ret, "clSetKernelArg"); }
@Override public void finish() { int ret = CL10.clFinish(queue); Utils.checkError(ret, "clFinish"); }
@Override public void setArg(int index, byte b) { ByteBuffer buf = Utils.tempBuffers[0].b16; buf.position(0); buf.limit(1); buf.put(0, b); int ret = CL10.clSetKernelArg(kernel, index, buf); Utils.checkError(ret, "clSetKernelArg"); }
@Override public void setArg(int index, Vector4f v) { FloatBuffer buf = Utils.tempBuffers[0].b16f; buf.position(0); buf.limit(4); buf.put(0, v.x); buf.put(1, v.y); buf.put(2, v.z); buf.put(3, v.w); int ret = CL10.clSetKernelArg(kernel, index, buf); Utils.checkError(ret, "clSetKernelArg"); }
@Override public void setArg(int index, int i) { IntBuffer buf = Utils.tempBuffers[0].b16i; buf.position(0); buf.limit(1); buf.put(0, i); int ret = CL10.clSetKernelArg(kernel, index, buf); Utils.checkError(ret, "clSetKernelArg"); }
@Override public void setArg(int index, float f) { FloatBuffer buf = Utils.tempBuffers[0].b16f; buf.position(0); buf.limit(1); buf.put(0, f); int ret = CL10.clSetKernelArg(kernel, index, buf); Utils.checkError(ret, "clSetKernelArg"); }
@Override public void setArg(int index, Image i) { int ret = CL10.clSetKernelArg1p(kernel, index, ((LwjglImage) i).getImage()); Utils.checkError(ret, "clSetKernelArg"); }
@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 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 Program createProgramFromSourceCode(String sourceCode) { LOG.log(Level.FINE, "Create program from source:\n{0}", sourceCode); Utils.errorBuffer.rewind(); CLProgram p = CL10.clCreateProgramWithSource(context, sourceCode, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateProgramWithSource"); return new LwjglProgram(p, this); }
@Override @SuppressWarnings("element-type-mismatch") public CommandQueue createQueue(Device device) { assert (devices.contains(device)); //this also ensures that device is a LwjglDevice long d = ((LwjglDevice) device).getDevice(); long properties = 0; long q = CL10.clCreateCommandQueue(context, d, properties, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateCommandQueue"); return new LwjglCommandQueue(q, device); }
@Override @SuppressWarnings("element-type-mismatch") public CommandQueue createQueue(Device device) { assert (devices.contains(device)); //this also ensures that device is a LwjglDevice CLDevice d = ((LwjglDevice) device).getDevice(); long properties = 0; CLCommandQueue q = CL10.clCreateCommandQueue(context, d, properties, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateCommandQueue"); return new LwjglCommandQueue(q, device); }
@Override public Buffer createBuffer(long size, MemoryAccess access) { long flags = Utils.getMemoryAccessFlags(access); CLMem mem = CL10.clCreateBuffer(context, flags, size, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateBuffer"); return new LwjglBuffer(mem); }
@Override public Buffer createBufferFromHost(ByteBuffer data, MemoryAccess access) { long flags = Utils.getMemoryAccessFlags(access); flags |= CL10.CL_MEM_USE_HOST_PTR; CLMem mem = CL10.clCreateBuffer(context, flags, data, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateBuffer"); return new LwjglBuffer(mem); }
@Override public Program createProgramFromBinary(ByteBuffer binaries, Device device) { Utils.errorBuffer.rewind(); Utils.tempBuffers[0].b16i.rewind(); Utils.pointerBuffers[0].rewind(); Utils.pointerBuffers[0].put(0, ((LwjglDevice) device).getDevice()); long p = CL10.clCreateProgramWithBinary(context, Utils.pointerBuffers[0], binaries, Utils.tempBuffers[0].b16i, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateProgramWithBinary"); Utils.checkError(Utils.tempBuffers[0].b16i, "clCreateProgramWithBinary"); return new LwjglProgram(p, this); }
@Override public Buffer bindVertexBuffer(VertexBuffer vb, MemoryAccess access) { int id = vb.getId(); if (id == -1) { throw new IllegalArgumentException("vertex buffer was not yet uploaded to the GPU or is CPU only"); } long flags = Utils.getMemoryAccessFlags(access); Utils.errorBuffer.rewind(); CLMem mem = CL10GL.clCreateFromGLBuffer(context, flags, id, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLBuffer"); return new LwjglBuffer(mem); }
@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 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); }