@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 Buffer createBuffer(long size, MemoryAccess access) { long flags = Utils.getMemoryAccessFlags(access); long 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; long mem = CL10.clCreateBuffer(context, flags, data, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateBuffer"); return new LwjglBuffer(mem); }
@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 public Buffer bindVertexBuffer(VertexBuffer vb, MemoryAccess access) { Utils.assertSharingPossible(); 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(); long mem = CL10GL.clCreateFromGLBuffer(context, flags, id, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLBuffer"); return new LwjglBuffer(mem); }
@Override public Image bindImage(com.jme3.texture.Image image, Texture.Type textureType, int miplevel, MemoryAccess access) { int imageID = image.getId(); if (imageID == -1) { throw new IllegalArgumentException("image was not yet uploaded to the GPU"); } long memFlags = Utils.getMemoryAccessFlags(access); int textureTarget = convertTextureType(textureType); Utils.errorBuffer.rewind(); CLMem mem = CL12GL.clCreateFromGLTexture(context, memFlags, textureTarget, miplevel, imageID, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLTexture"); return new LwjglImage(mem); }
@Override protected Image bindPureRenderBuffer(FrameBuffer.RenderBuffer buffer, MemoryAccess access) { Utils.assertSharingPossible(); 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 = CL10GL.clCreateFromGLRenderbuffer(context, memFlags, renderbuffer, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLRenderbuffer"); return new LwjglImage(mem); }
@Override public Image bindImage(com.jme3.texture.Image image, Texture.Type textureType, int miplevel, MemoryAccess access) { Utils.assertSharingPossible(); int imageID = image.getId(); if (imageID == -1) { throw new IllegalArgumentException("image was not yet uploaded to the GPU"); } long memFlags = Utils.getMemoryAccessFlags(access); int textureTarget = convertTextureType(textureType); Utils.errorBuffer.rewind(); long mem = CL12GL.clCreateFromGLTexture(context, memFlags, textureTarget, miplevel, imageID, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLTexture"); return new LwjglImage(mem); }
@Override public ImageFormat[] querySupportedFormats(MemoryAccess access, Image.ImageType type) { long memFlags = Utils.getMemoryAccessFlags(access); int typeFlag = LwjglImage.decodeImageType(type); Utils.tempBuffers[0].b16i.rewind(); //query count int ret = CL10.clGetSupportedImageFormats(context, memFlags, typeFlag, null, Utils.tempBuffers[0].b16i); Utils.checkError(ret, "clGetSupportedImageFormats"); int count = Utils.tempBuffers[0].b16i.get(0); if (count == 0) { return new ImageFormat[0]; } //get formats ByteBuffer formatsB = BufferUtils.createByteBuffer(count * 8); ret = CL10.clGetSupportedImageFormats(context, memFlags, typeFlag, formatsB, null); Utils.checkError(ret, "clGetSupportedImageFormats"); //convert formats ImageFormat[] formats = new ImageFormat[count]; IntBuffer formatsBi = formatsB.asIntBuffer(); formatsBi.rewind(); for (int i=0; i<count; ++i) { Image.ImageChannelOrder channelOrder = LwjglImage.encodeImageChannelOrder(formatsBi.get()); Image.ImageChannelType channelType = LwjglImage.encodeImageChannelType(formatsBi.get()); formats[i] = new ImageFormat(channelOrder, channelType); } return formats; }
@Override public Image createImage(MemoryAccess access, ImageFormat format, ImageDescriptor descr) { long memFlags = Utils.getMemoryAccessFlags(access); Utils.errorBuffer.rewind(); //fill image format Utils.tempBuffers[0].b16i.rewind(); Utils.tempBuffers[0].b16i.put(LwjglImage.decodeImageChannelOrder(format.channelOrder)) .put(LwjglImage.decodeImageChannelType(format.channelType)); Utils.tempBuffers[0].b16.rewind(); //fill image desc Utils.b80l.rewind(); Utils.b80l.put(LwjglImage.decodeImageType(descr.type)) .put(descr.width).put(descr.height).put(descr.depth) .put(descr.arraySize).put(descr.rowPitch).put(descr.slicePitch) .put(0).put(0).put(0); Utils.b80.rewind(); //create image CLMem mem = CL12.clCreateImage(context, memFlags, Utils.tempBuffers[0].b16, Utils.b80, descr.hostPtr, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateImage"); return new LwjglImage(mem); }
@Override public ImageFormat[] querySupportedFormats(MemoryAccess access, Image.ImageType type) { long memFlags = Utils.getMemoryAccessFlags(access); int typeFlag = LwjglImage.decodeImageType(type); Utils.tempBuffers[0].b16i.rewind(); //query count int ret = CL10.clGetSupportedImageFormats(context, memFlags, typeFlag, null, Utils.tempBuffers[0].b16i); Utils.checkError(ret, "clGetSupportedImageFormats"); int count = Utils.tempBuffers[0].b16i.get(0); if (count == 0) { return new ImageFormat[0]; } //get formats CLImageFormat.Buffer formatsB = new CLImageFormat.Buffer(BufferUtils.createByteBuffer(count * CLImageFormat.SIZEOF)); ret = CL10.clGetSupportedImageFormats(context, memFlags, typeFlag, formatsB, (IntBuffer) null); Utils.checkError(ret, "clGetSupportedImageFormats"); //convert formats ImageFormat[] formats = new ImageFormat[count]; for (int i=0; i<count; ++i) { CLImageFormat f = formatsB.get(); Image.ImageChannelOrder channelOrder = LwjglImage.encodeImageChannelOrder(f.image_channel_order()); Image.ImageChannelType channelType = LwjglImage.encodeImageChannelType(f.image_channel_data_type()); formats[i] = new ImageFormat(channelOrder, channelType); } return formats; }
@Override public Image createImage(MemoryAccess access, ImageFormat format, ImageDescriptor descr) { long memFlags = Utils.getMemoryAccessFlags(access); Utils.errorBuffer.rewind();
@Override public Buffer createBuffer(long size, MemoryAccess access) { long flags = Utils.getMemoryAccessFlags(access); long 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; long mem = CL10.clCreateBuffer(context, flags, data, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateBuffer"); return new LwjglBuffer(mem); }
@Override protected Image bindPureRenderBuffer(FrameBuffer.RenderBuffer buffer, MemoryAccess access) { Utils.assertSharingPossible(); 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 = CL10GL.clCreateFromGLRenderbuffer(context, memFlags, renderbuffer, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLRenderbuffer"); return new LwjglImage(mem); }
@Override public Buffer bindVertexBuffer(VertexBuffer vb, MemoryAccess access) { Utils.assertSharingPossible(); 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(); long mem = CL10GL.clCreateFromGLBuffer(context, flags, id, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLBuffer"); return new LwjglBuffer(mem); }
@Override public Image bindImage(com.jme3.texture.Image image, Texture.Type textureType, int miplevel, MemoryAccess access) { Utils.assertSharingPossible(); int imageID = image.getId(); if (imageID == -1) { throw new IllegalArgumentException("image was not yet uploaded to the GPU"); } long memFlags = Utils.getMemoryAccessFlags(access); int textureTarget = convertTextureType(textureType); Utils.errorBuffer.rewind(); long mem = CL12GL.clCreateFromGLTexture(context, memFlags, textureTarget, miplevel, imageID, Utils.errorBuffer); Utils.checkError(Utils.errorBuffer, "clCreateFromGLTexture"); return new LwjglImage(mem); }
@Override public ImageFormat[] querySupportedFormats(MemoryAccess access, Image.ImageType type) { long memFlags = Utils.getMemoryAccessFlags(access); int typeFlag = LwjglImage.decodeImageType(type); Utils.tempBuffers[0].b16i.rewind(); //query count int ret = CL10.clGetSupportedImageFormats(context, memFlags, typeFlag, null, Utils.tempBuffers[0].b16i); Utils.checkError(ret, "clGetSupportedImageFormats"); int count = Utils.tempBuffers[0].b16i.get(0); if (count == 0) { return new ImageFormat[0]; } //get formats CLImageFormat.Buffer formatsB = new CLImageFormat.Buffer(BufferUtils.createByteBuffer(count * CLImageFormat.SIZEOF)); ret = CL10.clGetSupportedImageFormats(context, memFlags, typeFlag, formatsB, (IntBuffer) null); Utils.checkError(ret, "clGetSupportedImageFormats"); //convert formats ImageFormat[] formats = new ImageFormat[count]; for (int i=0; i<count; ++i) { CLImageFormat f = formatsB.get(); Image.ImageChannelOrder channelOrder = LwjglImage.encodeImageChannelOrder(f.image_channel_order()); Image.ImageChannelType channelType = LwjglImage.encodeImageChannelType(f.image_channel_data_type()); formats[i] = new ImageFormat(channelOrder, channelType); } return formats; }