From 735c9cbbec16457358eee7424a0533fcc1b8c64c Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Thu, 24 Jun 2010 23:05:04 +0200 Subject: added CLVersion utility class and corresponding API. version checks in unit tests. GLProfile.initSingleton() workaround in CLGLTest. --- src/com/jogamp/opencl/CLPlatform.java | 40 +++++++++- src/com/jogamp/opencl/CLVersion.java | 141 +++++++++++++++++++++++++++++++++ src/com/jogamp/opencl/util/CLUtil.java | 3 +- 3 files changed, 180 insertions(+), 4 deletions(-) create mode 100644 src/com/jogamp/opencl/CLVersion.java (limited to 'src') 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 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); } /** @@ -268,6 +295,13 @@ public final class CLPlatform { return getInfoString(CL_PLATFORM_VENDOR); } + /** + * Returns the ICD suffix. + */ + public String getICDSuffix() { + return getInfoString(CL_PLATFORM_ICD_SUFFIX_KHR); + } + /** * Returns true if the extension is supported on this platform. */ 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 { + + 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: + * OpenCL[space][major_version].[minor_version][space][platform-specific information] + */ + 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 '"OpenCL " + major + "." + minor'. + */ + 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 map = new LinkedHashMap(); 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()); -- cgit v1.2.3