|
From: <sp...@us...> - 2010-10-12 01:35:40
|
Revision: 3436
http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3436&view=rev
Author: spasi
Date: 2010-10-12 01:35:33 +0000 (Tue, 12 Oct 2010)
Log Message:
-----------
Replaced HashMap<Long, T> with FastLongMap in the OpenCL package.
Replaced CharsetEncoder with simple ASCII encoding in APIUtil.
Attempt to fix CL native kernels on x64.
Modified Paths:
--------------
trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java
trunk/LWJGL/src/java/org/lwjgl/opencl/CLContext.java
trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistry.java
trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistryGlobal.java
trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java
trunk/LWJGL/src/java/org/lwjgl/opengl/APIUtil.java
trunk/LWJGL/src/native/common/org_lwjgl_opencl_CallbackUtil.c
trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java
Added Paths:
-----------
trunk/LWJGL/src/java/org/lwjgl/opencl/FastLongMap.java
Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/java/org/lwjgl/opencl/APIUtil.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -34,10 +34,9 @@
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLUtil;
import org.lwjgl.PointerBuffer;
+import org.lwjgl.opencl.FastLongMap.Entry;
import java.nio.*;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
@@ -75,16 +74,10 @@
protected PointerBuffer initialValue() { return BufferUtils.createPointerBuffer(INITIAL_LENGTHS_SIZE); }
};
- private static final ThreadLocal<InfiniteCharSequence> infiniteSeqTL = new ThreadLocal<InfiniteCharSequence>() {
- protected InfiniteCharSequence initialValue() { return new InfiniteCharSequence(); }
- };
-
private static final ThreadLocal<Buffers> buffersTL = new ThreadLocal<Buffers>() {
protected Buffers initialValue() { return new Buffers(); }
};
- private static final CharsetEncoder encoder = Charset.forName("US-ASCII").newEncoder();
-
private APIUtil() {
}
@@ -188,15 +181,22 @@
return lengths;
}
- private static InfiniteCharSequence getInfiniteSeq() {
- return infiniteSeqTL.get();
- }
+ /**
+ * Simple ASCII encoding.
+ *
+ * @param buffer The target buffer
+ * @param string The source string
+ */
+ private static ByteBuffer encode(final ByteBuffer buffer, final CharSequence string) {
+ for ( int i = 0; i < string.length(); i++ ) {
+ final char c = string.charAt(i);
+ if ( LWJGLUtil.DEBUG && 0x80 <= c ) // Silently ignore and map to 0x1A.
+ buffer.put((byte)0x1A);
+ else
+ buffer.put((byte)c);
+ }
- private static void encode(final ByteBuffer buffer, final CharSequence string) {
- final InfiniteCharSequence infiniteSeq = getInfiniteSeq();
- infiniteSeq.setString(string);
- encoder.encode(infiniteSeq.buffer, buffer, true);
- infiniteSeq.clear();
+ return buffer;
}
/**
@@ -224,10 +224,7 @@
* @return the String as a ByteBuffer
*/
static ByteBuffer getBuffer(final CharSequence string) {
- final ByteBuffer buffer = getBufferByte(string.length());
-
- encode(buffer, string);
-
+ final ByteBuffer buffer = encode(getBufferByte(string.length()), string);
buffer.flip();
return buffer;
}
@@ -240,10 +237,7 @@
* @return the String as a ByteBuffer
*/
static ByteBuffer getBuffer(final CharSequence string, final int offset) {
- final ByteBuffer buffer = getBufferByteOffset(offset + string.length());
-
- encode(buffer, string);
-
+ final ByteBuffer buffer = encode(getBufferByteOffset(offset + string.length()), string);
buffer.flip();
return buffer;
}
@@ -256,10 +250,7 @@
* @return the String as a ByteBuffer
*/
static ByteBuffer getBufferNT(final CharSequence string) {
- final ByteBuffer buffer = getBufferByte(string.length() + 1);
-
- encode(buffer, string);
-
+ final ByteBuffer buffer = encode(getBufferByte(string.length() + 1), string);
buffer.put((byte)0);
buffer.flip();
return buffer;
@@ -283,12 +274,8 @@
static ByteBuffer getBuffer(final CharSequence[] strings) {
final ByteBuffer buffer = getBufferByte(getTotalLength(strings));
- final InfiniteCharSequence infiniteSeq = getInfiniteSeq();
- for ( CharSequence string : strings ) {
- infiniteSeq.setString(string);
- encoder.encode(infiniteSeq.buffer, buffer, true);
- }
- infiniteSeq.clear();
+ for ( CharSequence string : strings )
+ encode(buffer, string);
buffer.flip();
return buffer;
@@ -304,13 +291,10 @@
static ByteBuffer getBufferNT(final CharSequence[] strings) {
final ByteBuffer buffer = getBufferByte(getTotalLength(strings) + strings.length);
- final InfiniteCharSequence infiniteSeq = getInfiniteSeq();
for ( CharSequence string : strings ) {
- infiniteSeq.setString(string);
- encoder.encode(infiniteSeq.buffer, buffer, true);
+ encode(buffer, string);
buffer.put((byte)0);
}
- infiniteSeq.clear();
buffer.flip();
return buffer;
@@ -358,43 +342,6 @@
return (int)size;
}
- /**
- * A mutable CharSequence with very large initial length. We can wrap this in a re-usable CharBuffer for decoding.
- * We cannot subclass CharBuffer because of {@link java.nio.CharBuffer#toString(int,int)}.
- */
- private static class InfiniteCharSequence implements CharSequence {
-
- final CharBuffer buffer;
-
- CharSequence string;
-
- InfiniteCharSequence() {
- buffer = CharBuffer.wrap(this);
- }
-
- void setString(final CharSequence string) {
- this.string = string;
- this.buffer.position(0);
- this.buffer.limit(string.length());
- }
-
- void clear() {
- this.string = null;
- }
-
- public int length() {
- return Integer.MAX_VALUE;
- }
-
- public char charAt(final int index) {
- return string.charAt(index);
- }
-
- public CharSequence subSequence(final int start, final int end) {
- return string.subSequence(start, end);
- }
- }
-
private static class Buffers {
final ShortBuffer shorts;
@@ -559,7 +506,8 @@
if ( registry.isEmpty() )
return;
- for ( final T object : registry.getAll() ) {
+ for ( Entry<T> entry : registry.getAll() ) {
+ final T object = entry.value;
while ( object.isValid() )
destructor.release(object);
}
Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/CLContext.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opencl/CLContext.java 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/java/org/lwjgl/opencl/CLContext.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -37,9 +37,7 @@
import org.lwjgl.opengl.Drawable;
import java.nio.IntBuffer;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
/**
* This class is a wrapper around a cl_context pointer.
@@ -57,10 +55,10 @@
private final CLObjectRegistry<CLEvent> clEvents;
/** Global registry for build callbacks. */
- static final Map<Long, CLProgram> clProgramsGlobal = new HashMap<Long, CLProgram>();
+ static final FastLongMap<CLProgram> clProgramsGlobal = new FastLongMap<CLProgram>();
/** Global registry for event callbacks. */
- static final Map<Long, CLEvent> clEventsGlobal = new HashMap<Long, CLEvent>();
+ static final FastLongMap<CLEvent> clEventsGlobal = new FastLongMap<CLEvent>();
CLContext(final long pointer, final CLPlatform platform) {
super(pointer, platform);
Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistry.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistry.java 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistry.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -2,11 +2,6 @@
import org.lwjgl.LWJGLUtil;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
/**
* A CLObjectChild container.
*
@@ -14,7 +9,7 @@
*/
class CLObjectRegistry<T extends CLObjectChild> {
- private Map<Long, T> registry;
+ private FastLongMap<T> registry;
CLObjectRegistry() {
}
@@ -31,12 +26,12 @@
return registry != null && registry.containsKey(id);
}
- final List<T> getAll() {
- return registry == null ? null : new ArrayList<T>(registry.values());
+ final Iterable<FastLongMap.Entry<T>> getAll() {
+ return registry;
}
void registerObject(final T object) {
- final Map<Long, T> map = getMap();
+ final FastLongMap<T> map = getMap();
final Long key = object.getPointer();
if ( LWJGLUtil.DEBUG && map.containsKey(key) )
@@ -49,9 +44,9 @@
getMap().remove(object.getPointerUnsafe());
}
- private Map<Long, T> getMap() {
+ private FastLongMap<T> getMap() {
if ( registry == null )
- registry = new HashMap<Long, T>();
+ registry = new FastLongMap<T>();
return registry;
}
Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistryGlobal.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistryGlobal.java 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/java/org/lwjgl/opencl/CLObjectRegistryGlobal.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -31,8 +31,6 @@
*/
package org.lwjgl.opencl;
-import java.util.Map;
-
/**
* A CLObject registry that also registers/unregisters objects to/from a global registry.
*
@@ -40,9 +38,9 @@
*/
final class CLObjectRegistryGlobal<T extends CLObjectChild> extends CLObjectRegistry<T> {
- private final Map<Long, T> globalRegistry;
+ private final FastLongMap<T> globalRegistry;
- CLObjectRegistryGlobal(final Map<Long, T> globalRegistry) {
+ CLObjectRegistryGlobal(final FastLongMap<T> globalRegistry) {
this.globalRegistry = globalRegistry;
}
Modified: trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/java/org/lwjgl/opencl/CLPlatform.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -36,9 +36,7 @@
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import static java.lang.Math.*;
@@ -51,12 +49,12 @@
private static final CLPlatformUtil util = (CLPlatformUtil)getInfoUtilInstance(CLPlatform.class, "CL_PLATFORM_UTIL");
- private static final Map<Long, CLPlatform> clPlatforms = new HashMap<Long, CLPlatform>();
+ private static final FastLongMap<CLPlatform> clPlatforms = new FastLongMap<CLPlatform>();
private final CLObjectRegistry<CLDevice> clDevices;
/** Global registry for build callbacks. */
- static final Map<Long, CLDevice> clDevicesGlobal = new HashMap<Long, CLDevice>();
+ static final FastLongMap<CLDevice> clDevicesGlobal = new FastLongMap<CLDevice>();
private Object caps;
Added: trunk/LWJGL/src/java/org/lwjgl/opencl/FastLongMap.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opencl/FastLongMap.java (rev 0)
+++ trunk/LWJGL/src/java/org/lwjgl/opencl/FastLongMap.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
+ * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.lwjgl.opencl;
+
+import java.util.Iterator;
+
+/**
+ * A hash map using primitive longs as keys rather than objects.
+ *
+ * @author Justin Couch
+ * @author Alex Chaffee (al...@ap...)
+ * @author Stephen Colebourne
+ * @author Nathan Sweet
+ */
+final class FastLongMap<V> implements Iterable<FastLongMap.Entry<V>> {
+
+ private Entry[] table;
+ private int size, mask, capacity, threshold;
+
+ /** Same as: FastLongMap(16, 0.75f); */
+ FastLongMap() {
+ this(16, 0.75f);
+ }
+
+ /** Same as: FastLongMap(initialCapacity, 0.75f); */
+ FastLongMap(int initialCapacity) {
+ this(initialCapacity, 0.75f);
+ }
+
+ FastLongMap(int initialCapacity, float loadFactor) {
+ if ( initialCapacity > 1 << 30 ) throw new IllegalArgumentException("initialCapacity is too large.");
+ if ( initialCapacity < 0 ) throw new IllegalArgumentException("initialCapacity must be greater than zero.");
+ if ( loadFactor <= 0 ) throw new IllegalArgumentException("initialCapacity must be greater than zero.");
+ capacity = 1;
+ while ( capacity < initialCapacity )
+ capacity <<= 1;
+ this.threshold = (int)(capacity * loadFactor);
+ this.table = new Entry[capacity];
+ this.mask = capacity - 1;
+ }
+
+ private int index(final long key) {
+ return index(key, mask);
+ }
+
+ private static int index(final long key, final int mask) {
+ final int hash = (int)(key ^ (key >>> 32));
+ return hash & mask;
+ }
+
+ public V put(long key, V value) {
+ final Entry<V>[] table = this.table;
+ int index = index(key);
+
+ // Check if key already exists.
+ for ( Entry<V> e = table[index]; e != null; e = e.next ) {
+ if ( e.key != key ) continue;
+ V oldValue = e.value;
+ e.value = value;
+ return oldValue;
+ }
+
+ table[index] = new Entry<V>(key, value, table[index]);
+
+ if ( size++ >= threshold )
+ rehash(table);
+
+ return null;
+ }
+
+ private void rehash(final Entry<V>[] table) {
+ final int newCapacity = 2 * capacity;
+ final int newMask = newCapacity - 1;
+
+ final Entry<V>[] newTable = new Entry[newCapacity];
+
+ for ( int i = 0, index; i < table.length; i++ ) {
+ Entry<V> e = table[i];
+ if ( e == null ) continue;
+ do {
+ final Entry<V> next = e.next;
+ index = index(e.key, newMask);
+ e.next = newTable[index];
+ newTable[index] = e;
+ e = next;
+ } while ( e != null );
+ }
+
+ this.table = newTable;
+ capacity = newCapacity;
+ mask = newMask;
+ threshold *= 2;
+ }
+
+ public V get(long key) {
+ final int index = index(key);
+ for ( Entry<V> e = table[index]; e != null; e = e.next )
+ if ( e.key == key ) return e.value;
+ return null;
+ }
+
+ public boolean containsValue(Object value) {
+ final Entry<V>[] table = this.table;
+ for ( int i = table.length - 1; i >= 0; i-- )
+ for ( Entry<V> e = table[i]; e != null; e = e.next )
+ if ( e.value.equals(value) ) return true;
+ return false;
+ }
+
+ public boolean containsKey(long key) {
+ final int index = index(key);
+ for ( Entry<V> e = table[index]; e != null; e = e.next )
+ if ( e.key == key ) return true;
+ return false;
+ }
+
+ public V remove(long key) {
+ final int index = index(key);
+
+ Entry<V> prev = table[index];
+ Entry<V> e = prev;
+ while ( e != null ) {
+ Entry<V> next = e.next;
+ if ( e.key == key ) {
+ size--;
+ if ( prev == e )
+ table[index] = next;
+ else
+ prev.next = next;
+ return e.value;
+ }
+ prev = e;
+ e = next;
+ }
+ return null;
+ }
+
+ public int size() {
+ return size;
+ }
+
+ public boolean isEmpty() {
+ return size == 0;
+ }
+
+ public void clear() {
+ final Entry<V>[] table = this.table;
+ for ( int index = table.length - 1; index >= 0; index-- )
+ table[index] = null;
+ size = 0;
+ }
+
+ public EntryIterator iterator() {
+ return new EntryIterator();
+ }
+
+ public class EntryIterator implements Iterator<Entry<V>> {
+
+ private int nextIndex;
+ private Entry<V> current;
+
+ EntryIterator() {
+ reset();
+ }
+
+ public void reset() {
+ current = null;
+ // Find first bucket.
+ final Entry<V>[] table = FastLongMap.this.table;
+ int i;
+ for ( i = table.length - 1; i >= 0; i-- )
+ if ( table[i] != null ) break;
+ nextIndex = i;
+ }
+
+ public boolean hasNext() {
+ if ( nextIndex >= 0 ) return true;
+ Entry e = current;
+ return e != null && e.next != null;
+ }
+
+ public Entry<V> next() {
+ // Next entry in current bucket.
+ Entry<V> e = current;
+ if ( e != null ) {
+ e = e.next;
+ if ( e != null ) {
+ current = e;
+ return e;
+ }
+ }
+ // Use the bucket at nextIndex and find the next nextIndex.
+ final Entry<V>[] table = FastLongMap.this.table;
+ int i = nextIndex;
+ e = current = table[i];
+ while ( --i >= 0 )
+ if ( table[i] != null ) break;
+ nextIndex = i;
+ return e;
+ }
+
+ public void remove() {
+ FastLongMap.this.remove(current.key);
+ }
+ }
+
+ static final class Entry<T> {
+
+ final long key;
+ T value;
+ Entry<T> next;
+
+ Entry(long key, T value, Entry<T> next) {
+ this.key = key;
+ this.value = value;
+ this.next = next;
+ }
+
+ public long getKey() {
+ return key;
+ }
+
+ public T getValue() {
+ return value;
+ }
+
+ }
+
+}
\ No newline at end of file
Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/APIUtil.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opengl/APIUtil.java 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/java/org/lwjgl/opengl/APIUtil.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -32,10 +32,9 @@
package org.lwjgl.opengl;
import org.lwjgl.BufferUtils;
+import org.lwjgl.LWJGLUtil;
import java.nio.*;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
/** @author spasi */
final class APIUtil {
@@ -57,16 +56,10 @@
protected IntBuffer initialValue() { return BufferUtils.createIntBuffer(INITIAL_LENGTHS_SIZE); }
};
- private static final ThreadLocal<InfiniteCharSequence> infiniteSeqTL = new ThreadLocal<InfiniteCharSequence>() {
- protected InfiniteCharSequence initialValue() { return new InfiniteCharSequence(); }
- };
-
private static final ThreadLocal<Buffers> buffersTL = new ThreadLocal<Buffers>() {
protected Buffers initialValue() { return new Buffers(); }
};
- private static CharsetEncoder encoder = Charset.forName("US-ASCII").newEncoder();
-
private APIUtil() {
}
@@ -150,15 +143,22 @@
return lengths;
}
- private static InfiniteCharSequence getInfiniteSeq() {
- return infiniteSeqTL.get();
- }
+ /**
+ * Simple ASCII encoding.
+ *
+ * @param buffer The target buffer
+ * @param string The source string
+ */
+ private static ByteBuffer encode(final ByteBuffer buffer, final CharSequence string) {
+ for ( int i = 0; i < string.length(); i++ ) {
+ final char c = string.charAt(i);
+ if ( LWJGLUtil.DEBUG && 0x80 <= c ) // Silently ignore and map to 0x1A.
+ buffer.put((byte)0x1A);
+ else
+ buffer.put((byte)c);
+ }
- private static void encode(final ByteBuffer buffer, final CharSequence string) {
- final InfiniteCharSequence infiniteSeq = getInfiniteSeq();
- infiniteSeq.setString(string);
- encoder.encode(infiniteSeq.buffer, buffer, true);
- infiniteSeq.clear();
+ return buffer;
}
/**
@@ -186,10 +186,7 @@
* @return the String as a ByteBuffer
*/
static ByteBuffer getBuffer(final CharSequence string) {
- final ByteBuffer buffer = getBufferByte(string.length());
-
- encode(buffer, string);
-
+ final ByteBuffer buffer = encode(getBufferByte(string.length()), string);
buffer.flip();
return buffer;
}
@@ -202,10 +199,7 @@
* @return the String as a ByteBuffer
*/
static ByteBuffer getBuffer(final CharSequence string, final int offset) {
- final ByteBuffer buffer = getBufferByteOffset(offset + string.length());
-
- encode(buffer, string);
-
+ final ByteBuffer buffer = encode(getBufferByteOffset(offset + string.length()), string);
buffer.flip();
return buffer;
}
@@ -218,10 +212,7 @@
* @return the String as a ByteBuffer
*/
static ByteBuffer getBufferNT(final CharSequence string) {
- final ByteBuffer buffer = getBufferByte(string.length() + 1);
-
- encode(buffer, string);
-
+ final ByteBuffer buffer = encode(getBufferByte(string.length() + 1), string);
buffer.put((byte)0);
buffer.flip();
return buffer;
@@ -245,12 +236,8 @@
static ByteBuffer getBuffer(final CharSequence[] strings) {
final ByteBuffer buffer = getBufferByte(getTotalLength(strings));
- final InfiniteCharSequence infiniteSeq = getInfiniteSeq();
- for ( CharSequence string : strings ) {
- infiniteSeq.setString(string);
- encoder.encode(infiniteSeq.buffer, buffer, true);
- }
- infiniteSeq.clear();
+ for ( CharSequence string : strings )
+ encode(buffer, string);
buffer.flip();
return buffer;
@@ -266,13 +253,10 @@
static ByteBuffer getBufferNT(final CharSequence[] strings) {
final ByteBuffer buffer = getBufferByte(getTotalLength(strings) + strings.length);
- final InfiniteCharSequence infiniteSeq = getInfiniteSeq();
for ( CharSequence string : strings ) {
- infiniteSeq.setString(string);
- encoder.encode(infiniteSeq.buffer, buffer, true);
+ encode(buffer, string);
buffer.put((byte)0);
}
- infiniteSeq.clear();
buffer.flip();
return buffer;
@@ -295,43 +279,6 @@
return buffer;
}
- /**
- * A mutable CharSequence with very large initial length. We can wrap this in a re-usable CharBuffer for decoding.
- * We cannot subclass CharBuffer because of {@link CharBuffer#toString(int,int)}.
- */
- private static class InfiniteCharSequence implements CharSequence {
-
- final CharBuffer buffer;
-
- CharSequence string;
-
- InfiniteCharSequence() {
- buffer = CharBuffer.wrap(this);
- }
-
- void setString(final CharSequence string) {
- this.string = string;
- this.buffer.position(0);
- this.buffer.limit(string.length());
- }
-
- void clear() {
- this.string = null;
- }
-
- public int length() {
- return Integer.MAX_VALUE;
- }
-
- public char charAt(final int index) {
- return string.charAt(index);
- }
-
- public CharSequence subSequence(final int start, final int end) {
- return string.subSequence(start, end);
- }
- }
-
private static class Buffers {
final ShortBuffer shorts;
Modified: trunk/LWJGL/src/native/common/org_lwjgl_opencl_CallbackUtil.c
===================================================================
--- trunk/LWJGL/src/native/common/org_lwjgl_opencl_CallbackUtil.c 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/native/common/org_lwjgl_opencl_CallbackUtil.c 2010-10-12 01:35:33 UTC (rev 3436)
@@ -156,9 +156,9 @@
for ( i = 0; i < num_mem_objects; i++ ) {
buffer = (*env)->NewDirectByteBuffer(env,
// Pointer to cl_mem buffer
- (void *)((char *)args + (12 + 4 + (i * (4 + sizeof(size_t))))),
+ (void *)((char *)args + (12 + 4 + (i * (4 + sizeof(void *))))),
// cl_mem buffer size
- *((jint *)((char *)args + (12 + (i * (4 + sizeof(size_t))))))
+ *((jint *)((char *)args + (12 + (i * (4 + sizeof(void *))))))
);
(*env)->SetObjectArrayElement(env, memobjs, i, buffer);
}
Modified: trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java
===================================================================
--- trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java 2010-10-08 20:57:23 UTC (rev 3435)
+++ trunk/LWJGL/src/templates/org/lwjgl/opencl/CL10.java 2010-10-12 01:35:33 UTC (rev 3436)
@@ -1061,7 +1061,7 @@
nativeAfterVars = "\tvoid **args_mem_loc = num_mem_objects == 0 ? NULL : (void **)malloc(num_mem_objects * sizeof(void *));",
nativeBeforeCall = "\t_ptr_i = 0;\n" +
"\twhile ( _ptr_i < num_mem_objects ) {\n" +
- "\t\targs_mem_loc[_ptr_i] = (cl_void *)((char *)args_address + (4 + _ptr_i * (4 + sizeof(size_t))));\n" +
+ "\t\targs_mem_loc[_ptr_i] = (cl_void *)((char *)args_address + (4 + _ptr_i * (4 + sizeof(void *))));\n" +
"\t\t_ptr_i++;\n" +
"\t}",
nativeAfterCall = "\tfree(args_mem_loc);"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|