summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWade Walker <[email protected]>2015-09-20 15:09:04 -0500
committerWade Walker <[email protected]>2015-11-08 14:05:30 -0600
commit7c7146428a0584ad38f036d24a70c15f700f9a8e (patch)
tree7a66e83cc5bef52e1b07b5c8e9c7417b331e7f04 /src
parent4638f4b3fdf4c946bda0b290a83652e4db00edea (diff)
Add ability to access newer CLImpl versions for devices
Added a CLPlatform method to return a CLImpl version specific to a device. This lets the user get a CLImpl12 or CLImpl20 instance which they could then cast to the right type and use to access newer CL functions than those in the default CLImpl11 object.
Diffstat (limited to 'src')
-rw-r--r--src/com/jogamp/opencl/CLPlatform.java24
-rw-r--r--src/com/jogamp/opencl/CLVersion.java3
-rw-r--r--src/com/jogamp/opencl/util/CLInfo.java2
3 files changed, 27 insertions, 2 deletions
diff --git a/src/com/jogamp/opencl/CLPlatform.java b/src/com/jogamp/opencl/CLPlatform.java
index f0faa0fb..11a562c5 100644
--- a/src/com/jogamp/opencl/CLPlatform.java
+++ b/src/com/jogamp/opencl/CLPlatform.java
@@ -47,7 +47,10 @@ import com.jogamp.opencl.llb.CLMemObjBinding;
import com.jogamp.opencl.spi.CLPlatformInfoAccessor;
import com.jogamp.opencl.util.CLUtil;
import com.jogamp.opencl.llb.impl.CLImpl11;
+import com.jogamp.opencl.llb.impl.CLImpl12;
+import com.jogamp.opencl.llb.impl.CLImpl20;
import com.jogamp.opencl.spi.CLAccessorFactory;
+import com.jogamp.opencl.spi.CLInfoAccessor;
import com.jogamp.opencl.util.Filter;
import java.nio.IntBuffer;
@@ -248,7 +251,7 @@ public class CLPlatform {
}
/**
- * Returns the low level binding interface to the OpenCL APIs.
+ * Returns the low level binding interface to the OpenCL APIs. This interface is always for OpenCL 1.1.
*/
public static CL getLowLevelCLInterface() {
initialize();
@@ -256,6 +259,25 @@ public class CLPlatform {
}
/**
+ * Returns the low level binding interface to the OpenCL APIs for the specified device. This interface
+ * is the newest one the device supports.
+ */
+ public static CL getLowLevelCLInterfaceForDevice(final long device) {
+ initialize();
+
+ CLInfoAccessor deviceInfo = defaultFactory.createDeviceInfoAccessor(cl, device);
+ CLVersion version = new CLVersion(deviceInfo.getString(CL_DEVICE_VERSION));
+
+ if(version.isEqual(CLVersion.CL_1_2))
+ return new CLImpl12();
+
+ if(version.isEqual(CLVersion.CL_2_0))
+ return new CLImpl20();
+
+ return cl;
+ }
+
+ /**
* Hint to allow the implementation to release the resources allocated by the OpenCL compiler.
* Calls to {@link CLProgram#build()} after unloadCompiler will reload the compiler if necessary.
*/
diff --git a/src/com/jogamp/opencl/CLVersion.java b/src/com/jogamp/opencl/CLVersion.java
index 3a48f0b7..fc2419c7 100644
--- a/src/com/jogamp/opencl/CLVersion.java
+++ b/src/com/jogamp/opencl/CLVersion.java
@@ -45,6 +45,9 @@ public class CLVersion implements Comparable<CLVersion> {
public final static CLVersion CL_1_0 = new CLVersion("OpenCL 1.0");
public final static CLVersion CL_1_1 = new CLVersion("OpenCL 1.1");
+ public final static CLVersion CL_1_2 = new CLVersion("OpenCL 1.2");
+ public final static CLVersion CL_2_0 = new CLVersion("OpenCL 2.0");
+ public final static CLVersion CL_2_1 = new CLVersion("OpenCL 2.1");
/**
* The full version String is defined as:
diff --git a/src/com/jogamp/opencl/util/CLInfo.java b/src/com/jogamp/opencl/util/CLInfo.java
index e6d55b58..cd97d6e2 100644
--- a/src/com/jogamp/opencl/util/CLInfo.java
+++ b/src/com/jogamp/opencl/util/CLInfo.java
@@ -58,7 +58,7 @@ public class CLInfo {
// binding
sb.append("CL_BINDING_UNAVAILABLE_FUNCTIONS: ");
- sb.append(((CLImpl11) CLPlatform.getLowLevelCLInterface()).getAddressTable().getNullPointerFunctions());
+ sb.append(CLImpl11.getAddressTable().getNullPointerFunctions());
sb.append("\n");
// OpenCL