From: <sp...@us...> - 2010-09-30 23:36:48
|
Revision: 3422 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3422&view=rev Author: spasi Date: 2010-09-30 23:36:37 +0000 (Thu, 30 Sep 2010) Log Message: ----------- Misc CL fixes. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java trunk/LWJGL/src/java/org/lwjgl/PointerWrapperAbstract.java trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java trunk/LWJGL/src/java/org/lwjgl/opencl/InfoUtilFactory.java trunk/LWJGL/src/java/org/lwjgl/test/opencl/HelloOpenCL.java trunk/LWJGL/src/templates/org/lwjgl/opencl/APPLE_gl_sharing.java trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java trunk/LWJGL/src/templates/org/lwjgl/opencl/KHR_gl_sharing.java Modified: trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -290,6 +290,16 @@ } /** + * Returns the number of bytes between the current position and the + * limit. </p> + * + * @return The number of bytes remaining in this buffer + */ + public final int remainingByte() { + return remaining() * getPointerSize(); + } + + /** * Tells whether there are any elements between the current position and * the limit. </p> * Modified: trunk/LWJGL/src/java/org/lwjgl/PointerWrapperAbstract.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/PointerWrapperAbstract.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/java/org/lwjgl/PointerWrapperAbstract.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -87,6 +87,6 @@ } public String toString() { - return getClass().getSimpleName() + " pointer (0x" + Long.toHexString(pointer) + ")"; + return getClass().getSimpleName() + " pointer (0x" + Long.toHexString(pointer).toUpperCase() + ")"; } } \ No newline at end of file Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -42,6 +42,11 @@ import java.util.Set; import java.util.StringTokenizer; +import static org.lwjgl.opencl.APPLEGLSharing.*; +import static org.lwjgl.opencl.CL10.*; +import static org.lwjgl.opencl.EXTDeviceFission.*; +import static org.lwjgl.opencl.KHRGLSharing.*; + /** * Utility class for OpenCL API calls. * @@ -432,6 +437,19 @@ return extensions; } + static boolean isDevicesParam(final int param_name) { + switch ( param_name ) { + case CL_CONTEXT_DEVICES: + case CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR: + case CL_DEVICES_FOR_GL_CONTEXT_KHR: + case CL_CGL_DEVICE_FOR_CURRENT_VIRTUAL_SCREEN_APPLE: + case CL_CGL_DEVICES_FOR_SUPPORTED_VIRTUAL_SCREENS_APPLE: + return true; + } + + return false; + } + static CLPlatform getCLPlatform(final PointerBuffer properties) { long platformID = 0; @@ -441,7 +459,7 @@ if ( key == 0 ) break; - if ( key == 0x1084 ) { // CL_CONTEXT_PLATFORM + if ( key == CL_CONTEXT_PLATFORM ) { platformID = properties.get((k << 1) + 1); break; } @@ -452,7 +470,7 @@ final CLPlatform platform = CLPlatform.getCLPlatform(platformID); if ( platform == null ) - throw new IllegalStateException("Could not find a valid CLPlatform. Make sure clGetPlatformIDs has been used before creating a CLContext."); + throw new IllegalStateException("Could not find a valid CLPlatform. Make sure clGetPlatformIDs has been used before."); return platform; } @@ -546,25 +564,25 @@ } private static final ObjectDestructor<CLDevice> DESTRUCTOR_CLSubDevice = new ObjectDestructor<CLDevice>() { - public void release(final CLDevice object) { EXTDeviceFission.clReleaseDeviceEXT(object); } + public void release(final CLDevice object) { clReleaseDeviceEXT(object); } }; private static final ObjectDestructor<CLMem> DESTRUCTOR_CLMem = new ObjectDestructor<CLMem>() { - public void release(final CLMem object) { CL10.clReleaseMemObject(object); } + public void release(final CLMem object) { clReleaseMemObject(object); } }; private static final ObjectDestructor<CLCommandQueue> DESTRUCTOR_CLCommandQueue = new ObjectDestructor<CLCommandQueue>() { - public void release(final CLCommandQueue object) { CL10.clReleaseCommandQueue(object); } + public void release(final CLCommandQueue object) { clReleaseCommandQueue(object); } }; private static final ObjectDestructor<CLSampler> DESTRUCTOR_CLSampler = new ObjectDestructor<CLSampler>() { - public void release(final CLSampler object) { CL10.clReleaseSampler(object); } + public void release(final CLSampler object) { clReleaseSampler(object); } }; private static final ObjectDestructor<CLProgram> DESTRUCTOR_CLProgram = new ObjectDestructor<CLProgram>() { - public void release(final CLProgram object) { CL10.clReleaseProgram(object); } + public void release(final CLProgram object) { clReleaseProgram(object); } }; private static final ObjectDestructor<CLKernel> DESTRUCTOR_CLKernel = new ObjectDestructor<CLKernel>() { - public void release(final CLKernel object) { CL10.clReleaseKernel(object); } + public void release(final CLKernel object) { clReleaseKernel(object); } }; private static final ObjectDestructor<CLEvent> DESTRUCTOR_CLEvent = new ObjectDestructor<CLEvent>() { - public void release(final CLEvent object) { CL10.clReleaseEvent(object); } + public void release(final CLEvent object) { clReleaseEvent(object); } }; private interface ObjectDestructor<T extends CLObjectChild> { Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -210,7 +210,7 @@ for ( int i = 0; i < count; i++ ) { final long id = devices.get(pos + i); if ( !clDevices.hasObject(id) ) - new CLDevice(devices.get(pos + i), this); + new CLDevice(id, this); } } @@ -226,7 +226,7 @@ final int offset = pos + (i * PointerBuffer.getPointerSize()); final long id = PointerBuffer.is64Bit() ? devices.getLong(offset) : devices.getInt(offset); if ( !clDevices.hasObject(id) ) - new CLDevice(devices.get(pos + i), this); + new CLDevice(id, this); } } Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/InfoUtilFactory.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opencl/InfoUtilFactory.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/java/org/lwjgl/opencl/InfoUtilFactory.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -96,25 +96,31 @@ } /** Custom clCreateContext implementation (reuses APIUtil.getBufferPointer) */ - public CLContext create(final CLPlatform platform, final List<CLDevice> devices, final CLContextCallback pfn_notify, final Drawable share_drawable, final IntBuffer errcode_ret) throws LWJGLException { + public CLContext create(final CLPlatform platform, final List<CLDevice> devices, final CLContextCallback pfn_notify, final Drawable share_drawable, IntBuffer errcode_ret) throws LWJGLException { final int propertyCount = 2 + (share_drawable == null ? 0 : 4) + 1; - final PointerBuffer buffer = APIUtil.getBufferPointer(propertyCount + devices.size()); - buffer.put(CL_CONTEXT_PLATFORM).put(platform); + final PointerBuffer properties = APIUtil.getBufferPointer(propertyCount + devices.size()); + properties.put(CL_CONTEXT_PLATFORM).put(platform); if ( share_drawable != null ) - share_drawable.setCLSharingProperties(buffer); - buffer.put(0); + share_drawable.setCLSharingProperties(properties); + properties.put(0); - buffer.position(propertyCount); // Make sure we're at the right offset, setCLSharingProperties might not use all 4 positions. + properties.position(propertyCount); // Make sure we're at the right offset, setCLSharingProperties might not use all 4 positions. for ( CLDevice device : devices ) - buffer.put(device); + properties.put(device); final long function_pointer = CLCapabilities.clCreateContext; BufferChecks.checkFunctionAddress(function_pointer); + if ( errcode_ret != null ) + BufferChecks.checkBuffer(errcode_ret, 1); + else if ( LWJGLUtil.DEBUG ) + errcode_ret = APIUtil.getBufferInt(); final long user_data = pfn_notify == null || pfn_notify.isCustom() ? 0 : CallbackUtil.createGlobalRef(pfn_notify); CLContext __result = null; try { - __result = new CLContext(nclCreateContext(buffer.getBuffer(), 0, devices.size(), buffer.getBuffer(), propertyCount * PointerBuffer.getPointerSize(), pfn_notify == null ? 0 : pfn_notify.getPointer(), user_data, errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), platform); + __result = new CLContext(nclCreateContext(properties.getBuffer(), 0, devices.size(), properties.getBuffer(), propertyCount * PointerBuffer.getPointerSize(), pfn_notify == null ? 0 : pfn_notify.getPointer(), user_data, errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), platform); + if ( LWJGLUtil.DEBUG ) + Util.checkCLError(errcode_ret.get(0)); return __result; } finally { CallbackUtil.registerCallback(__result, user_data); @@ -282,7 +288,7 @@ return clGetMemObjectInfo(mem, param_name, param_value, param_value_size_ret); } - public CLMem createImage2D(final CLContext context, final long flags, final CLImageFormat image_format, final long image_width, final long image_height, final long image_row_pitch, final Buffer host_ptr, final IntBuffer errcode_ret) { + public CLMem createImage2D(final CLContext context, final long flags, final CLImageFormat image_format, final long image_width, final long image_height, final long image_row_pitch, final Buffer host_ptr, IntBuffer errcode_ret) { final ByteBuffer formatBuffer = APIUtil.getBufferByte(2 * 4); formatBuffer.putInt(0, image_format.getChannelOrder()); formatBuffer.putInt(4, image_format.getChannelType()); @@ -291,12 +297,18 @@ BufferChecks.checkFunctionAddress(function_pointer); if ( errcode_ret != null ) BufferChecks.checkBuffer(errcode_ret, 1); - return new CLMem(nclCreateImage2D(context.getPointer(), flags, formatBuffer, 0, image_width, image_height, image_row_pitch, host_ptr, - host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage2DSize(formatBuffer, image_width, image_height, image_row_pitch)) : 0, - errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), context); + else if ( LWJGLUtil.DEBUG ) + errcode_ret = APIUtil.getBufferInt(); + + CLMem __result = new CLMem(nclCreateImage2D(context.getPointer(), flags, formatBuffer, 0, image_width, image_height, image_row_pitch, host_ptr, + host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage2DSize(formatBuffer, image_width, image_height, image_row_pitch)) : 0, + errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), context); + if ( LWJGLUtil.DEBUG ) + Util.checkCLError(errcode_ret.get(0)); + return __result; } - public CLMem createImage3D(final CLContext context, final long flags, final CLImageFormat image_format, final long image_width, final long image_height, final long image_depth, final long image_row_pitch, final long image_slice_pitch, final Buffer host_ptr, final IntBuffer errcode_ret) { + public CLMem createImage3D(final CLContext context, final long flags, final CLImageFormat image_format, final long image_width, final long image_height, final long image_depth, final long image_row_pitch, final long image_slice_pitch, final Buffer host_ptr, IntBuffer errcode_ret) { final ByteBuffer formatBuffer = APIUtil.getBufferByte(2 * 4); formatBuffer.putInt(0, image_format.getChannelOrder()); formatBuffer.putInt(4, image_format.getChannelType()); @@ -305,9 +317,15 @@ BufferChecks.checkFunctionAddress(function_pointer); if ( errcode_ret != null ) BufferChecks.checkBuffer(errcode_ret, 1); - return new CLMem(nclCreateImage3D(context.getPointer(), flags, formatBuffer, 0, image_width, image_height, image_depth, image_row_pitch, image_slice_pitch, host_ptr, - host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage3DSize(formatBuffer, image_width, image_height, image_depth, image_row_pitch, image_slice_pitch)) : 0, - errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), context); + else if ( LWJGLUtil.DEBUG ) + errcode_ret = APIUtil.getBufferInt(); + + CLMem __result = new CLMem(nclCreateImage3D(context.getPointer(), flags, formatBuffer, 0, image_width, image_height, image_depth, image_row_pitch, image_slice_pitch, host_ptr, + host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage3DSize(formatBuffer, image_width, image_height, image_depth, image_row_pitch, image_slice_pitch)) : 0, + errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), context); + if ( LWJGLUtil.DEBUG ) + Util.checkCLError(errcode_ret.get(0)); + return __result; } public CLMem createSubBuffer(final CLMem mem, final long flags, final int buffer_create_type, final CLBufferRegion buffer_create_info, final IntBuffer errcode_ret) { @@ -317,7 +335,6 @@ infoBuffer.put(buffer_create_info.getSize()); return clCreateSubBuffer(mem, flags, buffer_create_type, infoBuffer.getBuffer(), errcode_ret); - } public ByteBuffer getInfoHostBuffer(final CLMem mem) { Modified: trunk/LWJGL/src/java/org/lwjgl/test/opencl/HelloOpenCL.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opencl/HelloOpenCL.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/java/org/lwjgl/test/opencl/HelloOpenCL.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -54,6 +54,9 @@ CL.create(); final List<CLPlatform> platforms = CLPlatform.getPlatforms(); + if ( platforms == null ) + throw new RuntimeException("No OpenCL platforms found."); + for ( CLPlatform platform : platforms ) { System.out.println("\n-------------------------"); System.out.println("NEW PLATFORM: " + platform.getPointer()); Modified: trunk/LWJGL/src/templates/org/lwjgl/opencl/APPLE_gl_sharing.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opencl/APPLE_gl_sharing.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/templates/org/lwjgl/opencl/APPLE_gl_sharing.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -67,6 +67,10 @@ /** Error code returned by clGetGLContextInfoAPPLE if an invalid platform_gl_ctx is provided */ int CL_INVALID_GL_CONTEXT_APPLE = -1000; + @Code( + javaBeforeNative = "\t\tif ( param_value_size_ret == null && APIUtil.isDevicesParam(param_name) ) param_value_size_ret = APIUtil.getBufferPointer();", + javaAfterNative = "\t\tif ( __result == CL_SUCCESS && param_value != null && APIUtil.isDevicesParam(param_name) ) context.getParent().registerCLDevices(param_value, param_value_size_ret);" + ) @cl_int int clGetGLContextInfoAPPLE(@PointerWrapper("cl_context") CLContext context, @Check("1") @NativeType("cl_void") PointerBuffer platform_gl_ctx, Modified: trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -456,8 +456,8 @@ int clReleaseContext(@PointerWrapper("cl_context") CLContext context); @Code( - javaBeforeNative = "\t\tif ( param_name == CL_CONTEXT_DEVICES && param_value_size_ret == null ) param_value_size_ret = APIUtil.getBufferPointer();", - javaAfterNative = "\t\tif ( param_name == CL_CONTEXT_DEVICES && __result == CL_SUCCESS && param_value != null ) context.getParent().registerCLDevices(param_value, param_value_size_ret);" + javaBeforeNative = "\t\tif ( param_value_size_ret == null && APIUtil.isDevicesParam(param_name) ) param_value_size_ret = APIUtil.getBufferPointer();", + javaAfterNative = "\t\tif ( __result == CL_SUCCESS && param_value != null && APIUtil.isDevicesParam(param_name) ) context.getParent().registerCLDevices(param_value, param_value_size_ret);" ) @cl_int int clGetContextInfo(@PointerWrapper("cl_context") CLContext context, @@ -915,7 +915,7 @@ @cl_int int clGetProgramInfo2(@PointerWrapper("cl_program") CLProgram program, @Constant("CL_PROGRAM_BINARIES") @NativeType("cl_program_info") int param_name, - @Constant("sizes.remaining() * PointerBuffer.getPointerSize()") @size_t long param_value_size, + @Constant("sizes.remainingByte()") @size_t long param_value_size, @Helper(passToNative = true) @Check("1") @Const @NativeType("size_t") PointerBuffer sizes, @OutParameter @Check("APIUtil.getSize(sizes)") @PointerArray(value = "param_value_size", lengths = "sizes") @NativeType("cl_uchar") ByteBuffer param_value, @OutParameter @Check(value = "1", canBeNull = true) @NativeType("size_t") PointerBuffer param_value_size_ret); Modified: trunk/LWJGL/src/templates/org/lwjgl/opencl/KHR_gl_sharing.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opencl/KHR_gl_sharing.java 2010-09-30 19:04:25 UTC (rev 3421) +++ trunk/LWJGL/src/templates/org/lwjgl/opencl/KHR_gl_sharing.java 2010-09-30 23:36:37 UTC (rev 3422) @@ -63,6 +63,10 @@ CL_WGL_HDC_KHR = 0x200B, CL_CGL_SHAREGROUP_KHR = 0x200C; + @Code( + javaBeforeNative = "\t\tif ( param_value_size_ret == null && APIUtil.isDevicesParam(param_name) ) param_value_size_ret = APIUtil.getBufferPointer();", + javaAfterNative = "\t\tif ( __result == CL_SUCCESS && param_value != null && APIUtil.isDevicesParam(param_name) ) APIUtil.getCLPlatform(properties).registerCLDevices(param_value, param_value_size_ret);" + ) @cl_int int clGetGLContextInfoKHR(@NullTerminated @Const @NativeType("cl_context_properties") PointerBuffer properties, @NativeType("cl_gl_context_info") int param_name, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |