diff options
Diffstat (limited to 'src/com/jogamp/opencl/util')
-rw-r--r-- | src/com/jogamp/opencl/util/CLBuildConfiguration.java | 8 | ||||
-rw-r--r-- | src/com/jogamp/opencl/util/CLDeviceFilters.java | 102 | ||||
-rw-r--r-- | src/com/jogamp/opencl/util/CLPlatformFilters.java | 40 |
3 files changed, 148 insertions, 2 deletions
diff --git a/src/com/jogamp/opencl/util/CLBuildConfiguration.java b/src/com/jogamp/opencl/util/CLBuildConfiguration.java index f70f088e..89f59110 100644 --- a/src/com/jogamp/opencl/util/CLBuildConfiguration.java +++ b/src/com/jogamp/opencl/util/CLBuildConfiguration.java @@ -36,6 +36,14 @@ import java.util.Map; /** * Configuration representing everything needed to build an OpenCL program. + * <p> + * If you use {@link #save(java.io.ObjectOutputStream)} to persist build configurations between + * JVM sessions it is highly recommended to call {@link #forDevice(com.jogamp.opencl.CLDevice) } + * or {@link #forDevices(com.jogamp.opencl.CLDevice[]) } before building the program. + * Driver updates or HW changes can make exact device-to-binary mapping hard, the + * builder will drop all unmappable binaries silently. Setting the devices explicitly will + * force automatic rebuilds from source in this situation. + * </p> * @author Michael Bien * @see com.jogamp.opencl.CLProgramBuilder#createConfiguration() * @see com.jogamp.opencl.CLProgramBuilder#loadConfiguration(java.io.ObjectInputStream) diff --git a/src/com/jogamp/opencl/util/CLDeviceFilters.java b/src/com/jogamp/opencl/util/CLDeviceFilters.java new file mode 100644 index 00000000..a2ba0475 --- /dev/null +++ b/src/com/jogamp/opencl/util/CLDeviceFilters.java @@ -0,0 +1,102 @@ +/* + * Copyright 2011 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package com.jogamp.opencl.util; + +import com.jogamp.opencl.CLCommandQueue.Mode; +import com.jogamp.opencl.CLDevice; +import java.nio.ByteOrder; +import java.util.Arrays; + +/** + * Pre-defined filters. + * @author Michael Bien + * @see com.jogamp.opencl.CLPlatform#listCLDevices(com.jogamp.opencl.util.Filter[]) + * @see com.jogamp.opencl.CLPlatform#getMaxFlopsDevice(com.jogamp.opencl.util.Filter[]) + */ +public class CLDeviceFilters { + + /** + * Accepts all devices of the given type. + */ + public static Filter<CLDevice> type(final CLDevice.Type type) { + return new Filter<CLDevice>() { + public boolean accept(CLDevice item) { + if(type.equals(CLDevice.Type.ALL)) { + return true; + } + return item.getType().equals(type); + } + }; + } + + /** + * Accepts all devices of the given {@link ByteOrder}. + */ + public static Filter<CLDevice> byteOrder(final ByteOrder order) { + return new Filter<CLDevice>() { + public boolean accept(CLDevice item) { + return item.getByteOrder().equals(order); + } + }; + } + + /** + * Accepts all devices which support OpenGL-OpenCL interoparability. + */ + public static Filter<CLDevice> glSharing() { + return new Filter<CLDevice>() { + public boolean accept(CLDevice item) { + return item.isGLMemorySharingSupported(); + } + }; + } + + /** + * Accepts all devices supporting the given extensions. + */ + public static Filter<CLDevice> extension(final String... extensions) { + return new Filter<CLDevice>() { + public boolean accept(CLDevice item) { + return item.getExtensions().containsAll(Arrays.asList(extensions)); + } + }; + } + + /** + * Accepts all devices supporting the specified command queue modes. + */ + public static Filter<CLDevice> queueMode(final Mode... modes) { + return new Filter<CLDevice>() { + public boolean accept(CLDevice item) { + return item.getQueueProperties().containsAll(Arrays.asList(modes)); + } + }; + } + +} diff --git a/src/com/jogamp/opencl/util/CLPlatformFilters.java b/src/com/jogamp/opencl/util/CLPlatformFilters.java index 3d23a45c..dab7448f 100644 --- a/src/com/jogamp/opencl/util/CLPlatformFilters.java +++ b/src/com/jogamp/opencl/util/CLPlatformFilters.java @@ -28,10 +28,12 @@ package com.jogamp.opencl.util; +import com.jogamp.opencl.CLCommandQueue.Mode; import com.jogamp.opencl.CLDevice; import com.jogamp.opencl.CLPlatform; import com.jogamp.opencl.CLVersion; import java.util.Arrays; +import java.util.List; /** * Pre-defined filters. @@ -62,15 +64,49 @@ public class CLPlatformFilters { } }; } + + /** + * Accepts all platforms containing at least one devices of which supports OpenGL-OpenCL interoparability. + */ + public static Filter<CLPlatform> glSharing() { + return new Filter<CLPlatform>() { + public boolean accept(CLPlatform item) { + CLDevice[] devices = item.listCLDevices(); + for (CLDevice device : devices) { + if(device.isGLMemorySharingSupported()) { + return true; + } + } + return false; + } + }; + } /** - * Accepts all platforms containing devices of the given extensions. + * Accepts all platforms supporting the given extensions. */ - public static Filter<CLPlatform> extensions(final String... extensions) { + public static Filter<CLPlatform> extension(final String... extensions) { return new Filter<CLPlatform>() { public boolean accept(CLPlatform item) { return item.getExtensions().containsAll(Arrays.asList(extensions)); } }; } + + /** + * Accepts all platforms containing at least one devices supporting the specified command queue modes. + */ + public static Filter<CLPlatform> queueMode(final Mode... modes) { + return new Filter<CLPlatform>() { + public boolean accept(CLPlatform item) { + List<Mode> modesList = Arrays.asList(modes); + for (CLDevice device : item.listCLDevices()) { + if(device.getQueueProperties().containsAll(modesList)) { + return true; + } + } + return false; + } + }; + } } |