aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/jogamp/opencl/CLPlatform.java40
-rw-r--r--src/com/jogamp/opencl/CLVersion.java141
-rw-r--r--src/com/jogamp/opencl/util/CLUtil.java3
3 files changed, 180 insertions, 4 deletions
diff --git a/src/com/jogamp/opencl/CLPlatform.java b/src/com/jogamp/opencl/CLPlatform.java
index 46715feb..84d6497f 100644
--- a/src/com/jogamp/opencl/CLPlatform.java
+++ b/src/com/jogamp/opencl/CLPlatform.java
@@ -39,6 +39,11 @@ public final class CLPlatform {
*/
public final long ID;
+ /**
+ * Version of this OpenCL platform.
+ */
+ public final CLVersion version;
+
private static final CL cl;
private Set<String> extensions;
@@ -90,6 +95,7 @@ public final class CLPlatform {
private CLPlatform(long id) {
this.ID = id;
+ this.version = new CLVersion(getInfoString(CL_PLATFORM_VERSION));
}
/**
@@ -248,10 +254,31 @@ public final class CLPlatform {
}
/**
- * Returns the platform version.
+ * Returns the OpenCL version supported by this platform.
+ */
+ public CLVersion getVersion() {
+ return version;
+ }
+
+ /**
+ * Returns the OpenCL Specification version supported by this platform.
*/
- public String getVersion() {
- return getInfoString(CL_PLATFORM_VERSION);
+ public String getSpecVersion() {
+ return version.getSpecVersion();
+ }
+
+ /**
+ * @see CLVersion#isAtLeast(com.jogamp.opencl.CLVersion)
+ */
+ public boolean isAtLeast(CLVersion other) {
+ return version.isAtLeast(other);
+ }
+
+ /**
+ * @see CLVersion#isAtLeast(int, int)
+ */
+ public boolean isAtLeast(int major, int minor) {
+ return version.isAtLeast(major, minor);
}
/**
@@ -269,6 +296,13 @@ public final class CLPlatform {
}
/**
+ * Returns the ICD suffix.
+ */
+ public String getICDSuffix() {
+ return getInfoString(CL_PLATFORM_ICD_SUFFIX_KHR);
+ }
+
+ /**
* Returns true if the extension is supported on this platform.
*/
public boolean isExtensionAvailable(String extension) {
diff --git a/src/com/jogamp/opencl/CLVersion.java b/src/com/jogamp/opencl/CLVersion.java
new file mode 100644
index 00000000..e8a7e79c
--- /dev/null
+++ b/src/com/jogamp/opencl/CLVersion.java
@@ -0,0 +1,141 @@
+/*
+ * Created on Thursday, June 24 2010 05:38
+ */
+package com.jogamp.opencl;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Version of an OpenCL Implementation.
+ * All comparison operations use the {@link #getSpecVersion()} for comparison.
+ * @author Michael Bien
+ */
+public class CLVersion implements Comparable<CLVersion> {
+
+ private final static Pattern pattern = Pattern.compile("OpenCL (\\d+)\\.(\\d+)(.*)");
+
+ public final static CLVersion CL_1_0 = new CLVersion("OpenCL 1.0");
+ public final static CLVersion CL_1_1 = new CLVersion("OpenCL 1.1");
+
+ /**
+ * The full version String is defined as:
+ * <code>OpenCL[space][major_version].[minor_version][space][platform-specific information]</code>
+ */
+ public final String fullversion;
+ /**
+ * The platform specific part of the version string.
+ * @see #fullversion
+ */
+ public final String implversion;
+ /**
+ * Minor version number.
+ * @see #fullversion
+ */
+ public final short minor;
+ /**
+ * Mayor version number.
+ * @see #fullversion
+ */
+ public final short major;
+
+ protected CLVersion(String version) {
+ this.fullversion = version;
+ Matcher matcher = pattern.matcher(version);
+ matcher.matches();
+ major = Short.parseShort(matcher.group(1));
+ minor = Short.parseShort(matcher.group(2));
+
+ if(matcher.groupCount() == 4) {//first group == whole string
+ implversion = matcher.group(3).substring(1);
+ }else{
+ implversion = "";
+ }
+ }
+
+ public int compareTo(CLVersion other) {
+ return compareTo(other.major, other.minor);
+ }
+
+ private int compareTo(int otherMajor, int otherMinor) {
+ if(otherMajor == major && otherMinor == minor) {
+ return 0;
+ }else if(this.major > otherMajor || (this.major == otherMajor && this.minor > otherMinor)) {
+ return 1;
+ }else{
+ return -1;
+ }
+ }
+
+ public boolean isAtLeast(CLVersion other) {
+ return this.compareTo(other) >= 0;
+ }
+
+ public boolean isAtLeast(int major, int minor) {
+ return this.compareTo(major, minor) >= 0;
+ }
+
+ public boolean isEqual(CLVersion other) {
+ return this.isEqual(other.major, other.minor);
+ }
+
+ public boolean isEqual(int major, int minor) {
+ return this.major == major && this.minor == minor;
+ }
+
+ /**
+ * Returns <code>'"OpenCL " + major + "." + minor'</code>.
+ */
+ public String getSpecVersion() {
+ return "OpenCL " + major + '.' + minor;
+ }
+
+ /**
+ * Returns the full, unfiltered version string.
+ * @see #fullversion
+ */
+ public String getFullVersion() {
+ return fullversion;
+ }
+
+ /**
+ * @see #implversion
+ */
+ public String getImplVersion() {
+ return implversion;
+ }
+
+ /**
+ * @see #major
+ */
+ public short getMajor() {
+ return major;
+ }
+
+ /**
+ * @see #minor
+ */
+ public short getMinor() {
+ return minor;
+ }
+
+ @Override
+ public String toString() {
+ return getFullVersion();
+ }
+
+ @Override
+ public int hashCode() {
+ return fullversion.hashCode();
+ }
+
+ /**
+ * Returns true if both {@link #fullversion} Strings match.
+ */
+ @Override
+ public boolean equals(Object obj) {
+ return obj != null && fullversion.equals(obj);
+ }
+
+
+}
diff --git a/src/com/jogamp/opencl/util/CLUtil.java b/src/com/jogamp/opencl/util/CLUtil.java
index 6649698c..973c0dc9 100644
--- a/src/com/jogamp/opencl/util/CLUtil.java
+++ b/src/com/jogamp/opencl/util/CLUtil.java
@@ -47,8 +47,9 @@ public class CLUtil {
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("CL_PLATFORM_NAME", platform.getName());
map.put("CL_PLATFORM_PROFILE", platform.getProfile());
- map.put("CL_PLATFORM_VERSION", platform.getVersion());
+ map.put("CL_PLATFORM_VERSION", platform.getVersion().toString());
map.put("CL_PLATFORM_VENDOR", platform.getVendor());
+ map.put("CL_PLATFORM_ICD_SUFFIX", platform.getICDSuffix());
map.put("CL_PLATFORM_EXTENSIONS", platform.getExtensions().toString());
// map.put("fastest device (estimated)", platform.getMaxFlopsDevice().toString());