aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/jogamp/opencl/CLMemory.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/jogamp/opencl/CLMemory.java')
-rw-r--r--src/com/jogamp/opencl/CLMemory.java34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/com/jogamp/opencl/CLMemory.java b/src/com/jogamp/opencl/CLMemory.java
index 6ab5cd02..d66db3c8 100644
--- a/src/com/jogamp/opencl/CLMemory.java
+++ b/src/com/jogamp/opencl/CLMemory.java
@@ -18,22 +18,24 @@ import static com.jogamp.opencl.gl.CLGLI.*;
/**
* Common superclass for all OpenCL memory types.
+ * Represents an OpenCL memory object and wraps an optional NIO buffer.
* @author Michael Bien
*/
public abstract class CLMemory <B extends Buffer> extends CLObject implements CLResource {
B buffer;
protected final int FLAGS;
+ protected final long size;
- protected <Buffer> CLMemory(CLContext context, long id, int flags) {
- super(context, id);
- this.FLAGS = flags;
+ protected <Buffer> CLMemory(CLContext context, long size, long id, int flags) {
+ this(context, null, size, id, flags);
}
- protected CLMemory(CLContext context, B directBuffer, long id, int flags) {
+ protected CLMemory(CLContext context, B directBuffer, long size, long id, int flags) {
super(context, id);
this.buffer = directBuffer;
this.FLAGS = flags;
+ this.size = size;
}
/**
@@ -59,6 +61,13 @@ public abstract class CLMemory <B extends Buffer> extends CLObject implements CL
throw new RuntimeException("Unexpected buffer type " + buffer.getClass().getName());
}
+ protected static long getSizeImpl(CL cl, long id) {
+ PointerBuffer pb = PointerBuffer.allocateDirect(1);
+ int ret = cl.clGetMemObjectInfo(id, CL_MEM_SIZE, PointerBuffer.elementSize(), pb.getBuffer(), null);
+ checkForError(ret, "can not obtain buffer info");
+ return pb.get();
+ }
+
protected static CL getCL(CLContext context) {
return context.cl;
}
@@ -89,7 +98,7 @@ public abstract class CLMemory <B extends Buffer> extends CLObject implements CL
/**
* Returns the capacity of the wrapped direct buffer or 0 if no buffer available.
*/
- public int getCapacity() {
+ public int getNIOCapacity() {
if(buffer == null) {
return 0;
}
@@ -99,7 +108,7 @@ public abstract class CLMemory <B extends Buffer> extends CLObject implements CL
/**
* Returns the size of the wrapped direct buffer in byte or 0 if no buffer available.
*/
- public int getSize() {
+ public int getNIOSize() {
if(buffer == null) {
return 0;
}
@@ -110,10 +119,15 @@ public abstract class CLMemory <B extends Buffer> extends CLObject implements CL
* Returns the size of the allocated OpenCL memory.
*/
public long getCLSize() {
- PointerBuffer pb = PointerBuffer.allocateDirect(1);
- int ret = cl.clGetMemObjectInfo(ID, CL_MEM_SIZE, PointerBuffer.elementSize(), pb.getBuffer(), null);
- checkForError(ret, "can not obtain buffer info");
- return pb.get();
+ return size;
+ }
+
+ /**
+ * Returns the size in buffer elements of this memory object.
+ */
+ public int getCLCapacity() {
+ int elemSize = buffer==null ? 1 : sizeOfBufferElem(buffer);
+ return (int) (getCLSize() / elemSize);
}
/**