boolean needConversion(int index) { IntBuffer readOnly = conversions[index].asReadOnlyBuffer(); readOnly.rewind(); int i = 0; while (readOnly.hasRemaining()) { if (i != readOnly.get()) { return true; } i++; } return false; }
@Override public int getArgCount() { Utils.tempBuffers[0].b16i.rewind(); int ret = cl.clGetKernelInfo(kernel, CL.CL_KERNEL_NUM_ARGS, 4, Utils.tempBuffers[0].b16i, null); Utils.checkError(ret, "clGetKernelInfo"); return Utils.tempBuffers[0].b16i.get(0); }
@Override public ImageType getImageType() { Utils.tempBuffers[0].b16i.rewind(); int ret = cl.clGetMemObjectInfo(id, CL.CL_IMAGE_FORMAT, 5, Utils.tempBuffers[0].b16i, null); int type = Utils.tempBuffers[0].b16i.get(0); return encodeImageType(type); }
public static long compute(IntBuffer buff) { buff.rewind(); ByteBuffer bBuff = ByteBuffer.allocate(buff.array().length * 4); for (int i : buff.array()) { bBuff.putInt(i); } return compute(bBuff); }
@Override public Program createProgramFromBinary(ByteBuffer binaries, Device device) { Utils.errorBuffer.rewind(); Utils.tempBuffers[0].b16i.rewind(); CLProgram p = CL10.clCreateProgramWithBinary(context, ((LwjglDevice) device).device, 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 Program createProgramFromSourceCode(String sourceCode) { LOG.log(Level.FINE, "Create program from source:\n{0}", sourceCode); Utils.errorBuffer.rewind(); long p = CL10.clCreateProgramWithSource(context, sourceCode, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateProgramWithSource"); return new LwjglProgram(p, this); }
@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 public ImageFormat getImageFormat() { Utils.tempBuffers[0].b16i.rewind(); int ret = cl.clGetImageInfo(id, CL.CL_IMAGE_FORMAT, 8, Utils.tempBuffers[0].b16i, null); Utils.checkError(ret, "clGetImageInfo"); int channelOrder = Utils.tempBuffers[0].b16i.get(0); int channelType = Utils.tempBuffers[0].b16i.get(1); return new ImageFormat(encodeImageChannelOrder(channelOrder), encodeImageChannelType(channelType)); }
@Override public ByteBuffer map(CommandQueue queue, long size, long offset, MappingAccess access) { long q = ((JoclCommandQueue)queue).id; Utils.errorBuffer.rewind(); long flags = Utils.getMappingAccessFlags(access); ByteBuffer b = cl.clEnqueueMapBuffer(q, id, CL.CL_TRUE, flags, offset, size, 0, null, null, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clEnqueueMapBuffer"); return b; }
@Override public Program createProgramFromSourceCode(String sourceCode) { LOG.log(Level.FINE, "Create program from source:\n{0}", sourceCode); Utils.errorBuffer.rewind(); Utils.pointers[0].rewind(); Utils.pointers[0].put(0, sourceCode.length()); long p = cl.clCreateProgramWithSource(id, 1, new String[]{sourceCode}, Utils.pointers[0], Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateProgramWithSource"); return new JoclProgram(p, this); }
@Override public Kernel createKernel(String name) { Utils.errorBuffer.rewind(); long kernel = cl.clCreateKernel(program, name, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateKernel"); return new JoclKernel(kernel); }
@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 protected Image bindPureRenderBuffer(FrameBuffer.RenderBuffer buffer, MemoryAccess access) { int renderbuffer = buffer.getId(); if (renderbuffer == -1) { throw new IllegalArgumentException("renderbuffer was not yet uploaded to the GPU"); } long memFlags = Utils.getMemoryAccessFlags(access); Utils.errorBuffer.rewind(); CLMem mem = CL10GL.clCreateFromGLRenderbuffer(context, memFlags, renderbuffer, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLRenderbuffer"); return new LwjglImage(mem); }
@Override protected Image bindPureRenderBuffer(FrameBuffer.RenderBuffer buffer, MemoryAccess access) { int renderbuffer = buffer.getId(); if (renderbuffer == -1) { throw new IllegalArgumentException("renderbuffer was not yet uploaded to the GPU"); } long memFlags = Utils.getMemoryAccessFlags(access); Utils.errorBuffer.rewind(); long mem = ((CLGL) cl).clCreateFromGLRenderbuffer(id, memFlags, renderbuffer, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLRenderbuffer"); return new JoclImage(mem); }
@Override public ByteBuffer map(CommandQueue queue, long size, long offset, MappingAccess access) { long q = ((LwjglCommandQueue) queue).getQueue(); long flags = Utils.getMappingAccessFlags(access); Utils.errorBuffer.rewind(); ByteBuffer b = CL10.clEnqueueMapBuffer(q, buffer, true, flags, offset, size, null, null, Utils.errorBuffer, null); Utils.checkError(Utils.errorBuffer, "clEnqueueMapBuffer"); return b; }
@Override public ByteBuffer map(CommandQueue queue, long size, long offset, MappingAccess access) { CLCommandQueue q = ((LwjglCommandQueue) queue).getQueue(); long flags = Utils.getMappingAccessFlags(access); Utils.errorBuffer.rewind(); ByteBuffer b = CL10.clEnqueueMapBuffer(q, buffer, CL10.CL_TRUE, flags, offset, size, null, null, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clEnqueueMapBuffer"); return b; }
@Override public com.jme3.opencl.Buffer.AsyncMapping mapAsync(CommandQueue queue, long size, long offset, MappingAccess access) { Utils.pointerBuffers[0].rewind(); Utils.errorBuffer.rewind(); long q = ((LwjglCommandQueue) queue).getQueue(); long flags = Utils.getMappingAccessFlags(access); ByteBuffer buf = CL10.clEnqueueMapBuffer(q, buffer, false, flags, offset, size, null, Utils.pointerBuffers[0], Utils.errorBuffer, null); Utils.checkError(Utils.errorBuffer, "clEnqueueMapBuffer"); long event = Utils.pointerBuffers[0].get(0); return new com.jme3.opencl.Buffer.AsyncMapping(new LwjglEvent(event), buf); }
@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); }