#parse("main/Header.vm") package com.nativelibs4java.opencl; import static com.nativelibs4java.opencl.library.IOpenCLLibrary.CL_IMAGE_DEPTH; import static com.nativelibs4java.opencl.library.IOpenCLLibrary.CL_IMAGE_SLICE_PITCH; import java.nio.Buffer; import java.nio.ByteBuffer; import com.nativelibs4java.opencl.library.IOpenCLLibrary.cl_mem; import com.nativelibs4java.util.Pair; import org.bridj.Pointer; import static org.bridj.Pointer.*; import org.bridj.SizeT; /** * OpenCL 3D Image Memory Object<br> * see {@link CLContext#createImage3D(com.nativelibs4java.opencl.CLMem.Usage, com.nativelibs4java.opencl.CLImageFormat, long, long, long) } * see {@link CLContext#createImage3D(com.nativelibs4java.opencl.CLMem.Usage, com.nativelibs4java.opencl.CLImageFormat, long, long, long, long, long) } * see {@link CLContext#createImage3D(com.nativelibs4java.opencl.CLMem.Usage, com.nativelibs4java.opencl.CLImageFormat, long, long, long, long, long, java.nio.Buffer, boolean) } * see {@link CLContext#createImage3DFromGLTexture3D(com.nativelibs4java.opencl.CLMem.Usage, int, int) } * @author Olivier Chafik */ public class CLImage3D extends CLImage2D { CLImage3D(CLContext context, long entityPeer, CLImageFormat format) { super(context, entityPeer, format); } /** * Return size in bytes of a 2D slice for this 3D image object. <br> */ @InfoName("CL_IMAGE_SLICE_PITCH") public long getSlicePitch() { return infos.getIntOrLong(getEntity(), CL_IMAGE_SLICE_PITCH); } /** * Return depth of the image in pixels. */ @InfoName("CL_IMAGE_DEPTH") public long getDepth() { return infos.getIntOrLong(getEntity(), CL_IMAGE_DEPTH); } @Override protected long[] getDimensions() { return new long[] { getWidth(), getHeight(), getDepth() }; } @Override protected Pointer<SizeT> writeOrigin(long[] origin, ReusablePointer out) { assert(origin.length == 3); return out.pointerToSizeTs(origin); } @Override protected Pointer<SizeT> writeRegion(long[] region, ReusablePointer out) { assert(region.length == 3); return out.pointerToSizeTs(region); } /** #documentEventsToWaitForAndReturn() */ public CLEvent read(CLQueue queue, long minX, long minY, long minZ, long width, long height, long depth, long rowPitch, long slicePitch, Buffer out, boolean blocking, CLEvent... eventsToWaitFor) { return read(queue, pointerToSizeTs(minX, minY, minZ), pointerToSizeTs(width, height, depth), rowPitch, slicePitch, out, blocking, eventsToWaitFor); } /** #documentEventsToWaitForAndReturn() */ public CLEvent write(CLQueue queue, long minX, long minY, long minZ, long width, long height, long depth, long rowPitch, long slicePitch, Buffer in, boolean blocking, CLEvent... eventsToWaitFor) { return write(queue, pointerToSizeTs(minX, minY, minZ), pointerToSizeTs(width, height, depth), rowPitch, slicePitch, in, blocking, eventsToWaitFor); } public ByteBuffer map(CLQueue queue, MapFlags flags, CLEvent... eventsToWaitFor) { return map(queue, flags, 0, 0, 0, getWidth(), getHeight(), getDepth(), getWidth(), getHeight(), true, eventsToWaitFor); } /** #documentEventsToWaitForAndPairReturn("mapped data") */ public Pair<ByteBuffer, CLEvent> mapLater(CLQueue queue, MapFlags flags, CLEvent... eventsToWaitFor) { return map(queue, flags, pointerToSizeTs(0, 0, 0), pointerToSizeTs(getWidth(), getHeight(), getDepth()), getWidth(), getHeight(), true, eventsToWaitFor); } public ByteBuffer map(CLQueue queue, MapFlags flags, long offsetX, long offsetY, long offsetZ, long lengthX, long lengthY, long lengthZ, long rowPitch, long slicePitch, boolean blocking, CLEvent... eventsToWaitFor) { return map(queue, flags, pointerToSizeTs(offsetX, offsetY, offsetZ), pointerToSizeTs(lengthX, lengthY, lengthZ), rowPitch, slicePitch, true, eventsToWaitFor).getFirst(); } /** #documentEventsToWaitForAndPairReturn("mapped data") */ public Pair<ByteBuffer, CLEvent> mapLater(CLQueue queue, MapFlags flags, long offsetX, long offsetY, long offsetZ, long lengthX, long lengthY, long lengthZ, long rowPitch, long slicePitch, CLEvent... eventsToWaitFor) { return map(queue, flags, pointerToSizeTs(offsetX, offsetY, offsetZ), pointerToSizeTs(lengthX, lengthY, lengthZ), rowPitch, slicePitch, true, eventsToWaitFor); } }