diff options
author | Michael Bien <[email protected]> | 2010-01-19 00:14:28 +0100 |
---|---|---|
committer | Michael Bien <[email protected]> | 2010-01-19 00:14:28 +0100 |
commit | 21f0d9231227a4d2c96cb70b5061c18145591fba (patch) | |
tree | 392c64edb0571127fb83ccb003d491f179a0efa2 /src/com/mbien/opencl/CLPlatform.java | |
parent | 09ac312a0645bd0d9adff580f29f20382dfbf8c9 (diff) |
temporary dissabled non direct NIO binding for methods containing long[] since its broken on 32bit systems.
refactored high level binding to use direct NIO exclusively.
temporary dissabled low level binding junit tests.
green bar on 32 and 64 bit systems.
Diffstat (limited to 'src/com/mbien/opencl/CLPlatform.java')
-rw-r--r-- | src/com/mbien/opencl/CLPlatform.java | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/com/mbien/opencl/CLPlatform.java b/src/com/mbien/opencl/CLPlatform.java index f669cb0d..80bd4d60 100644 --- a/src/com/mbien/opencl/CLPlatform.java +++ b/src/com/mbien/opencl/CLPlatform.java @@ -1,7 +1,10 @@ package com.mbien.opencl; import com.mbien.opencl.impl.CLImpl; +import com.sun.gluegen.runtime.PointerBuffer; import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.IntBuffer; import static com.mbien.opencl.CLException.*; import static com.mbien.opencl.CL.*; @@ -35,20 +38,20 @@ public final class CLPlatform { */ public static CLPlatform[] listCLPlatforms() { - int[] intBuffer = new int[1]; + IntBuffer ib = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer(); // find all available OpenCL platforms - int ret = cl.clGetPlatformIDs(0, null, 0, intBuffer, 0); + int ret = cl.clGetPlatformIDs(0, null, ib); checkForError(ret, "can not enumerate platforms"); // receive platform ids - long[] platformId = new long[intBuffer[0]]; - ret = cl.clGetPlatformIDs(platformId.length, platformId, 0, null, 0); + PointerBuffer platformId = PointerBuffer.allocateDirect(ib.get(0)); + ret = cl.clGetPlatformIDs(platformId.capacity(), platformId, null); checkForError(ret, "can not enumerate platforms"); - CLPlatform[] platforms = new CLPlatform[platformId.length]; + CLPlatform[] platforms = new CLPlatform[platformId.capacity()]; - for (int i = 0; i < platformId.length; i++) - platforms[i] = new CLPlatform(platformId[i]); + for (int i = 0; i < platformId.capacity(); i++) + platforms[i] = new CLPlatform(platformId.get(i)); return platforms; } @@ -73,21 +76,21 @@ public final class CLPlatform { */ public CLDevice[] listCLDevices(CLDevice.Type type) { - int[] intBuffer = new int[1]; + IntBuffer ib = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer(); //find all devices - int ret = cl.clGetDeviceIDs(ID, type.TYPE, 0, null, 0, intBuffer, 0); + int ret = cl.clGetDeviceIDs(ID, type.TYPE, 0, null, ib); checkForError(ret, "error while enumerating devices"); - long[] deviceIDs = new long[intBuffer[0]]; - ret = cl.clGetDeviceIDs(ID, type.TYPE, deviceIDs.length, deviceIDs, 0, null, 0); + PointerBuffer deviceIDs = PointerBuffer.allocateDirect(ib.get(0)); + ret = cl.clGetDeviceIDs(ID, type.TYPE, deviceIDs.capacity(), deviceIDs, null); checkForError(ret, "error while enumerating devices"); - CLDevice[] devices = new CLDevice[deviceIDs.length]; + CLDevice[] devices = new CLDevice[deviceIDs.capacity()]; //print device info - for (int i = 0; i < deviceIDs.length; i++) - devices[i] = new CLDevice(cl, deviceIDs[i]); + for (int i = 0; i < deviceIDs.capacity(); i++) + devices[i] = new CLDevice(cl, deviceIDs.get(i)); return devices; @@ -176,13 +179,13 @@ public final class CLPlatform { * Returns a info string in exchange for a key (CL_PLATFORM_*). */ public String getInfoString(int key) { - long[] longBuffer = new long[1]; - ByteBuffer bb = ByteBuffer.allocate(512); + PointerBuffer pb = PointerBuffer.allocateDirect(1); + ByteBuffer bb = ByteBuffer.allocateDirect(512); - int ret = cl.clGetPlatformInfo(ID, key, bb.capacity(), bb, longBuffer, 0); + int ret = cl.clGetPlatformInfo(ID, key, bb.capacity(), bb, pb); checkForError(ret, "can not receive info string"); - return CLUtils.clString2JavaString(bb.array(), (int)longBuffer[0]); + return CLUtils.clString2JavaString(bb, (int)pb.get(0)); } @Override |