parent
53ebaba1e2
commit
e02eec0abd
@ -0,0 +1,60 @@ |
||||
/* |
||||
* Copyright (c) 2009-2016 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * 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. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "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 THE COPYRIGHT OWNER 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. |
||||
*/ |
||||
package com.jme3.opencl; |
||||
|
||||
import java.util.Collection; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* |
||||
* @author Sebastian Weiss |
||||
*/ |
||||
public interface Platform { |
||||
|
||||
List<? extends Device> getDevices(); |
||||
|
||||
String getProfile(); |
||||
boolean isFullProfile(); |
||||
boolean isEmbeddedProfile(); |
||||
|
||||
String getVersion(); |
||||
int getVersionMajor(); |
||||
int getVersionMinor(); |
||||
|
||||
String getName(); |
||||
String getVendor(); |
||||
boolean hasOpenGLInterop(); |
||||
boolean hasExtension(String extension); |
||||
Collection<? extends String> getExtensions(); |
||||
|
||||
|
||||
} |
@ -0,0 +1,54 @@ |
||||
/* |
||||
* Copyright (c) 2009-2016 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * 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. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "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 THE COPYRIGHT OWNER 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. |
||||
*/ |
||||
package com.jme3.opencl; |
||||
|
||||
import com.jme3.system.AppSettings; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* This SPI is called on startup to specify which platform and which devices |
||||
* are used for context creation. |
||||
* @author Sebastian Weiss |
||||
* @see AppSettings#setOpenCLPlatformChooser(java.lang.Class) |
||||
*/ |
||||
public interface PlatformChooser { |
||||
|
||||
/** |
||||
* Chooses one or more devices for the opencl context. |
||||
* All returned devices must belong to the same platform. |
||||
* If the returned list is empty, no context will be created. |
||||
* @param platforms the available platforms |
||||
* @return the list of devices |
||||
*/ |
||||
List<? extends Device> chooseDevices(List<? extends Platform> platforms); |
||||
|
||||
} |
@ -0,0 +1,136 @@ |
||||
/* |
||||
* Copyright (c) 2009-2016 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * 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. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "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 THE COPYRIGHT OWNER 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. |
||||
*/ |
||||
package com.jme3.opencl.lwjgl; |
||||
|
||||
import com.jme3.opencl.*; |
||||
import com.jme3.scene.VertexBuffer; |
||||
import com.jme3.scene.mesh.IndexBuffer; |
||||
import java.nio.ByteBuffer; |
||||
import java.util.List; |
||||
import org.lwjgl.opencl.CLContext; |
||||
|
||||
/** |
||||
* |
||||
* @author Sebastian Weiss |
||||
*/ |
||||
public class LwjglContext implements Context { |
||||
private final CLContext context; |
||||
|
||||
public LwjglContext(CLContext context) { |
||||
this.context = context; |
||||
} |
||||
|
||||
public CLContext getContext() { |
||||
return context; |
||||
} |
||||
|
||||
@Override |
||||
public List<? extends Device> getDevices() { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public CommandQueue createQueue() { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public CommandQueue createQueue(Device device) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Buffer createBuffer(int size, MemoryAccess access) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Buffer createBuffer(int size) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Buffer useHostBuffer(ByteBuffer data, int size, MemoryAccess access) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Buffer useHostBuffer(ByteBuffer data, int size) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Image createImage(MemoryAccess access, ImageFormat format, ImageDescriptor descr, ByteBuffer hostPtr) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Buffer bindVertexBuffer(VertexBuffer vb) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Buffer bindIndexBuffer(IndexBuffer ib) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Image bindImage(com.jme3.texture.Image image) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Program createProgramFromSourceCode(String sourceCode) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Program createProgramFromSourceFilesWithInclude(String include, String... resources) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Program createProgramFormSourcesWithInclude(String include, List<String> resources) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Program createProgramFromSources(String... resources) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
public Program createProgramFromSources(List<String> resources) { |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,293 @@ |
||||
/* |
||||
* Copyright (c) 2009-2016 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * 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. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "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 THE COPYRIGHT OWNER 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. |
||||
*/ |
||||
package com.jme3.opencl.lwjgl; |
||||
|
||||
import com.jme3.opencl.Device; |
||||
import com.jme3.opencl.Platform; |
||||
import java.util.Arrays; |
||||
import java.util.Collection; |
||||
import org.lwjgl.opencl.CL10; |
||||
import org.lwjgl.opencl.CL11; |
||||
import org.lwjgl.opencl.CLDevice; |
||||
|
||||
/** |
||||
* |
||||
* @author Sebastian Weiss |
||||
*/ |
||||
public final class LwjglDevice implements Device { |
||||
|
||||
final CLDevice device; |
||||
final LwjglPlatform platform; |
||||
|
||||
public LwjglDevice(CLDevice device, LwjglPlatform platform) { |
||||
this.device = device; |
||||
this.platform = platform; |
||||
} |
||||
|
||||
public CLDevice getDevice() { |
||||
return device; |
||||
} |
||||
|
||||
@Override |
||||
public LwjglPlatform getPlatform() { |
||||
return platform; |
||||
} |
||||
|
||||
@Override |
||||
public DeviceType getDeviceType() { |
||||
int type = device.getInfoInt(CL10.CL_DEVICE_TYPE); |
||||
switch (type) { |
||||
case CL10.CL_DEVICE_TYPE_ACCELERATOR: return DeviceType.ACCELEARTOR; |
||||
case CL10.CL_DEVICE_TYPE_CPU: return DeviceType.CPU; |
||||
case CL10.CL_DEVICE_TYPE_GPU: return DeviceType.GPU; |
||||
default: return DeviceType.DEFAULT; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public int getVendorId() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_VENDOR_ID); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isAvailable() { |
||||
return device.getInfoBoolean(CL10.CL_DEVICE_AVAILABLE); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasCompiler() { |
||||
return device.getInfoBoolean(CL10.CL_DEVICE_COMPILER_AVAILABLE); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasDouble() { |
||||
return hasExtension("cl_khr_fp64"); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasHalfFloat() { |
||||
return hasExtension("cl_khr_fp16"); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasErrorCorrectingMemory() { |
||||
return device.getInfoBoolean(CL10.CL_DEVICE_ERROR_CORRECTION_SUPPORT); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasUnifiedMemory() { |
||||
return device.getInfoBoolean(CL11.CL_DEVICE_HOST_UNIFIED_MEMORY); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasImageSupport() { |
||||
return device.getInfoBoolean(CL10.CL_DEVICE_IMAGE_SUPPORT); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasWritableImage3D() { |
||||
return hasExtension("cl_khr_3d_image_writes"); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasOpenGLInterop() { |
||||
return hasExtension("cl_khr_gl_sharing"); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasExtension(String extension) { |
||||
return getExtensions().contains(extension); |
||||
} |
||||
|
||||
@Override |
||||
public Collection<? extends String> getExtensions() { |
||||
return Arrays.asList(device.getInfoString(CL10.CL_DEVICE_EXTENSIONS).split(" ")); |
||||
} |
||||
|
||||
@Override |
||||
public int getComputeUnits() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_MAX_COMPUTE_UNITS); |
||||
} |
||||
|
||||
@Override |
||||
public int getClockFrequency() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_MAX_CLOCK_FREQUENCY); |
||||
} |
||||
|
||||
@Override |
||||
public int getAddressBits() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_ADDRESS_BITS); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isLittleEndian() { |
||||
return device.getInfoBoolean(CL10.CL_DEVICE_ENDIAN_LITTLE); |
||||
} |
||||
|
||||
@Override |
||||
public long getMaximumWorkItemDimensions() { |
||||
return device.getInfoSize(CL10.CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS); |
||||
} |
||||
|
||||
@Override |
||||
public long[] getMaximumWorkItemSizes() { |
||||
return device.getInfoSizeArray(CL10.CL_DEVICE_MAX_WORK_ITEM_SIZES); |
||||
} |
||||
|
||||
@Override |
||||
public long getMaxiumWorkItemsPerGroup() { |
||||
return device.getInfoSize(CL10.CL_DEVICE_MAX_WORK_GROUP_SIZE); |
||||
} |
||||
|
||||
@Override |
||||
public int getMaximumSamplers() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_MAX_SAMPLERS); |
||||
} |
||||
|
||||
@Override |
||||
public int getMaximumReadImages() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_MAX_READ_IMAGE_ARGS); |
||||
} |
||||
|
||||
@Override |
||||
public int getMaximumWriteImages() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_MAX_WRITE_IMAGE_ARGS); |
||||
} |
||||
|
||||
@Override |
||||
public long[] getMaximumImage2DSize() { |
||||
return new long[] { |
||||
device.getInfoSize(CL10.CL_DEVICE_IMAGE2D_MAX_WIDTH), |
||||
device.getInfoSize(CL10.CL_DEVICE_IMAGE2D_MAX_HEIGHT) |
||||
}; |
||||
} |
||||
|
||||
@Override |
||||
public long[] getMaximumImage3DSize() { |
||||
return new long[] { |
||||
device.getInfoSize(CL10.CL_DEVICE_IMAGE3D_MAX_WIDTH), |
||||
device.getInfoSize(CL10.CL_DEVICE_IMAGE3D_MAX_HEIGHT), |
||||
device.getInfoSize(CL10.CL_DEVICE_IMAGE3D_MAX_DEPTH) |
||||
}; |
||||
} |
||||
|
||||
@Override |
||||
public long getMaximumAllocationSize() { |
||||
return device.getInfoLong(CL10.CL_DEVICE_MAX_MEM_ALLOC_SIZE); |
||||
} |
||||
|
||||
@Override |
||||
public long getGlobalMemorySize() { |
||||
return device.getInfoLong(CL10.CL_DEVICE_GLOBAL_MEM_SIZE); |
||||
} |
||||
|
||||
@Override |
||||
public long getLocalMemorySize() { |
||||
return device.getInfoLong(CL10.CL_DEVICE_LOCAL_MEM_SIZE); |
||||
} |
||||
|
||||
@Override |
||||
public long getMaximumConstantBufferSize() { |
||||
return device.getInfoLong(CL10.CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE); |
||||
} |
||||
|
||||
@Override |
||||
public int getMaximumConstantArguments() { |
||||
return device.getInfoInt(CL10.CL_DEVICE_MAX_CONSTANT_ARGS); |
||||
} |
||||
|
||||
@Override |
||||
public String getProfile() { |
||||
return device.getInfoString(CL10.CL_DEVICE_PROFILE); |
||||
} |
||||
|
||||
@Override |
||||
public String getVersion() { |
||||
return device.getInfoString(CL10.CL_DEVICE_VERSION); |
||||
} |
||||
|
||||
@Override |
||||
public int getVersionMajor() { |
||||
return Utils.getMajorVersion(getVersion(), "OpenCL "); |
||||
} |
||||
|
||||
@Override |
||||
public int getVersionMinor() { |
||||
return Utils.getMinorVersion(getVersion(), "OpenCL "); |
||||
} |
||||
|
||||
@Override |
||||
public String getCompilerVersion() { |
||||
return device.getInfoString(CL11.CL_DEVICE_OPENCL_C_VERSION); |
||||
} |
||||
|
||||
@Override |
||||
public int getCompilerVersionMajor() { |
||||
return Utils.getMajorVersion(getCompilerVersion(), "OpenCL C "); |
||||
} |
||||
|
||||
@Override |
||||
public int getCompilerVersionMinor() { |
||||
return Utils.getMinorVersion(getCompilerVersion(), "OpenCL C "); |
||||
} |
||||
|
||||
@Override |
||||
public String getDriverVersion() { |
||||
return device.getInfoString(CL10.CL_DRIVER_VERSION); |
||||
} |
||||
|
||||
@Override |
||||
public int getDriverVersionMajor() { |
||||
return Utils.getMajorVersion(getDriverVersion(), ""); |
||||
} |
||||
|
||||
@Override |
||||
public int getDriverVersionMinor() { |
||||
return Utils.getMinorVersion(getDriverVersion(), ""); |
||||
} |
||||
|
||||
@Override |
||||
public String getName() { |
||||
return device.getInfoString(CL10.CL_DEVICE_NAME); |
||||
} |
||||
|
||||
@Override |
||||
public String getVendor() { |
||||
return device.getInfoString(CL10.CL_DEVICE_VENDOR); |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return getName(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,127 @@ |
||||
/* |
||||
* Copyright (c) 2009-2016 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * 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. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "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 THE COPYRIGHT OWNER 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. |
||||
*/ |
||||
package com.jme3.opencl.lwjgl; |
||||
|
||||
import com.jme3.opencl.Device; |
||||
import com.jme3.opencl.Platform; |
||||
import java.util.ArrayList; |
||||
import java.util.Arrays; |
||||
import java.util.Collection; |
||||
import java.util.List; |
||||
import org.lwjgl.opencl.CL10; |
||||
import org.lwjgl.opencl.CLDevice; |
||||
import org.lwjgl.opencl.CLPlatform; |
||||
|
||||
/** |
||||
* |
||||
* @author Sebastian Weiss |
||||
*/ |
||||
public final class LwjglPlatform implements Platform { |
||||
|
||||
final CLPlatform platform; |
||||
List<LwjglDevice> devices; |
||||
|
||||
public LwjglPlatform(CLPlatform platform) { |
||||
this.platform = platform; |
||||
} |
||||
|
||||
public CLPlatform getPlatform() { |
||||
return platform; |
||||
} |
||||
|
||||
@Override |
||||
public List<LwjglDevice> getDevices() { |
||||
if (devices == null) { |
||||
devices = new ArrayList<>(); |
||||
for (CLDevice d : platform.getDevices(CL10.CL_DEVICE_TYPE_ALL)) { |
||||
devices.add(new LwjglDevice(d, this)); |
||||
} |
||||
} |
||||
return devices; |
||||
} |
||||
|
||||
@Override |
||||
public String getProfile() { |
||||
return platform.getInfoString(CL10.CL_PLATFORM_PROFILE); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isFullProfile() { |
||||
return getProfile().contains("FULL_PROFILE"); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isEmbeddedProfile() { |
||||
return getProfile().contains("EMBEDDED_PROFILE"); |
||||
} |
||||
|
||||
@Override |
||||
public String getVersion() { |
||||
return platform.getInfoString(CL10.CL_PLATFORM_VERSION); |
||||
} |
||||
|
||||
@Override |
||||
public int getVersionMajor() { |
||||
return Utils.getMajorVersion(getVersion(), "OpenCL "); |
||||
} |
||||
|
||||
@Override |
||||
public int getVersionMinor() { |
||||
return Utils.getMinorVersion(getVersion(), "OpenCL "); |
||||
} |
||||
|
||||
@Override |
||||
public String getName() { |
||||
return platform.getInfoString(CL10.CL_PLATFORM_NAME); |
||||
} |
||||
|
||||
@Override |
||||
public String getVendor() { |
||||
return platform.getInfoString(CL10.CL_PLATFORM_VENDOR); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasExtension(String extension) { |
||||
return getExtensions().contains(extension); |
||||
} |
||||
|
||||
@Override |
||||
public boolean hasOpenGLInterop() { |
||||
return hasExtension("cl_khr_gl_sharing"); |
||||
} |
||||
|
||||
@Override |
||||
public Collection<? extends String> getExtensions() { |
||||
return Arrays.asList(platform.getInfoString(CL10.CL_PLATFORM_EXTENSIONS).split(" ")); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,92 @@ |
||||
/* |
||||
* Copyright (c) 2009-2016 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * 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. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "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 THE COPYRIGHT OWNER 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. |
||||
*/ |
||||
package com.jme3.opencl.lwjgl; |
||||
|
||||
import com.jme3.opencl.Device; |
||||
import com.jme3.opencl.Platform; |
||||
import com.jme3.opencl.PlatformChooser; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.logging.Logger; |
||||
|
||||
/** |
||||
* |
||||
* @author Sebastian Weiss |
||||
*/ |
||||
public class PlatformChooserImpl implements PlatformChooser { |
||||
private static final Logger LOG = Logger.getLogger(PlatformChooserImpl.class.getName()); |
||||
|
||||
@Override |
||||
public List<? extends Device> chooseDevices(List<? extends Platform> platforms) { |
||||
ArrayList<Device> result = new ArrayList<Device>(); |
||||
for (Platform p : platforms) { |
||||
if (!p.hasOpenGLInterop()) { |
||||
continue; //must support interop
|
||||
} |
||||
for (Device d : p.getDevices()) { |
||||
if (d.hasOpenGLInterop() && d.getDeviceType()==Device.DeviceType.GPU) { |
||||
result.add(d); //GPU prefered
|
||||
} |
||||
} |
||||
if (!result.isEmpty()) { |
||||
return result; |
||||
} |
||||
} |
||||
//no GPU devices found, try all
|
||||
for (Platform p : platforms) { |
||||
if (!p.hasOpenGLInterop()) { |
||||
continue; //must support interop
|
||||
} |
||||
for (Device d : p.getDevices()) { |
||||
if (d.hasOpenGLInterop()) { |
||||
result.add(d); //just interop needed
|
||||
} |
||||
} |
||||
if (!result.isEmpty()) { |
||||
return result; |
||||
} |
||||
} |
||||
//still no one found, try without interop
|
||||
LOG.warning("No device with OpenCL-OpenGL-interop found, try without"); |
||||
for (Platform p : platforms) { |
||||
for (Device d : p.getDevices()) { |
||||
result.add(d); |
||||
} |
||||
if (!result.isEmpty()) { |
||||
return result; |
||||
} |
||||
} |
||||
//no devices available at all!
|
||||
return result; //result is empty
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,51 @@ |
||||
/* |
||||
* Copyright (c) 2009-2016 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * 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. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "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 THE COPYRIGHT OWNER 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. |
||||
*/ |
||||
package com.jme3.opencl.lwjgl; |
||||
|
||||
/** |
||||
* |
||||
* @author Sebastian Weiss |
||||
*/ |
||||
public class Utils { |
||||
|
||||
public static int getMajorVersion(String version, String prefix) { |
||||
String s = version.substring(prefix.length()); |
||||
return Integer.parseInt(s); |
||||
} |
||||
|
||||
public static int getMinorVersion(String version, String prefix) { |
||||
String s = version.substring(prefix.length()); |
||||
int major = Integer.parseInt(s); |
||||
s = s.substring((int) (Math.log10(major) + 2)); |
||||
return Integer.parseInt(s); |
||||
} |
||||
} |
Loading…
Reference in new issue