@Test public void subBufferTest02FloatBuffer() { out.println(" - - - subBufferTest - - - "); @SuppressWarnings("unchecked") final CLPlatform platform = CLPlatform.getDefault(version(CL_1_1)); if (platform == null) { out.println("aborting subBufferTest"); return; } final CLContext context = CLContext.create(platform); try { final int subelements = 5; final long lMaxAlignment = context.getMaxMemBaseAddrAlign(); final int iMaxAlignment = Bitstream.uint32LongToInt(lMaxAlignment); System.err.println( "XXX: maxAlignment " + lMaxAlignment + ", 0x" + Long.toHexString(lMaxAlignment) + ", (int)" + iMaxAlignment + ", (int)0x" + Integer.toHexString(iMaxAlignment)); if (-1 == iMaxAlignment) { throw new RuntimeException( "Cannot handle MaxMemBaseAddrAlign > MAX_INT, has 0x" + Long.toHexString(lMaxAlignment)); } // FIXME: See Bug 979: Offset/Alignment via offset calculation per element-count is faulty! final int floatsPerAlignment = iMaxAlignment / Buffers.SIZEOF_FLOAT; // device + direct buffer final CLBuffer<FloatBuffer> buffer = context.createFloatBuffer(floatsPerAlignment + subelements); assertFalse(buffer.isSubBuffer()); assertNotNull(buffer.getSubBuffers()); assertTrue(buffer.getSubBuffers().isEmpty()); final CLSubBuffer<FloatBuffer> subBuffer = buffer.createSubBuffer(floatsPerAlignment, subelements); assertTrue(subBuffer.isSubBuffer()); assertEquals(subelements, subBuffer.getBuffer().capacity()); assertEquals(floatsPerAlignment, subBuffer.getOffset()); assertEquals(iMaxAlignment, subBuffer.getCLOffset()); assertEquals(buffer, subBuffer.getParent()); assertEquals(1, buffer.getSubBuffers().size()); assertEquals(subBuffer.getCLCapacity(), subBuffer.getBuffer().capacity()); subBuffer.release(); assertEquals(0, buffer.getSubBuffers().size()); } finally { context.release(); } }
@Test public void createBufferTest() { out.println(" - - - highLevelTest; create buffer test - - - "); final CLContext context = CLContext.create(); try { final int size = 6; final CLBuffer<ByteBuffer> bb = context.createByteBuffer(size); final CLBuffer<ShortBuffer> sb = context.createShortBuffer(size); final CLBuffer<IntBuffer> ib = context.createIntBuffer(size); final CLBuffer<LongBuffer> lb = context.createLongBuffer(size); final CLBuffer<FloatBuffer> fb = context.createFloatBuffer(size); final CLBuffer<DoubleBuffer> db = context.createDoubleBuffer(size); final List<CLMemory<? extends Buffer>> buffers = context.getMemoryObjects(); assertEquals(6, buffers.size()); assertEquals(1, bb.getElementSize()); assertEquals(2, sb.getElementSize()); assertEquals(4, ib.getElementSize()); assertEquals(8, lb.getElementSize()); assertEquals(4, fb.getElementSize()); assertEquals(8, db.getElementSize()); final ByteBuffer anotherNIO = newDirectByteBuffer(2); for (final CLMemory<? extends Buffer> memory : buffers) { final CLBuffer<? extends Buffer> buffer = (CLBuffer<? extends Buffer>) memory; final Buffer nio = buffer.getBuffer(); assertEquals(nio.capacity(), buffer.getCLCapacity()); assertEquals(buffer.getNIOSize(), buffer.getCLSize()); assertEquals(sizeOfBufferElem(nio), buffer.getElementSize()); assertEquals(nio.capacity() * sizeOfBufferElem(nio), buffer.getCLSize()); final CLBuffer<ByteBuffer> clone = buffer.cloneWith(anotherNIO); assertEquals(buffer.ID, clone.ID); assertTrue(clone.equals(buffer)); assertTrue(buffer.equals(clone)); assertEquals(buffer.getCLSize(), clone.getCLCapacity()); assertEquals(buffer.getCLSize(), clone.getCLSize()); assertEquals(anotherNIO.capacity(), clone.getNIOCapacity()); } } finally { context.release(); } }