diff options
author | Wade Walker <[email protected]> | 2015-09-20 15:09:04 -0500 |
---|---|---|
committer | Wade Walker <[email protected]> | 2015-11-08 14:05:30 -0600 |
commit | 7c7146428a0584ad38f036d24a70c15f700f9a8e (patch) | |
tree | 7a66e83cc5bef52e1b07b5c8e9c7417b331e7f04 /src/com/jogamp | |
parent | 4638f4b3fdf4c946bda0b290a83652e4db00edea (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/com/jogamp')
-rw-r--r-- | src/com/jogamp/opencl/CLPlatform.java | 24 | ||||
-rw-r--r-- | src/com/jogamp/opencl/CLVersion.java | 3 | ||||
-rw-r--r-- | src/com/jogamp/opencl/util/CLInfo.java | 2 |
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 |