@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 subBufferTest01ByteBuffer() { 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)); } // device only final CLBuffer<?> buffer = context.createBuffer(iMaxAlignment + subelements); assertFalse(buffer.isSubBuffer()); assertNotNull(buffer.getSubBuffers()); assertTrue(buffer.getSubBuffers().isEmpty()); final CLSubBuffer<?> subBuffer = buffer.createSubBuffer(iMaxAlignment, subelements); assertTrue(subBuffer.isSubBuffer()); assertEquals(subelements, subBuffer.getCLSize()); assertEquals(iMaxAlignment, subBuffer.getOffset()); assertEquals(iMaxAlignment, subBuffer.getCLOffset()); assertEquals(buffer, subBuffer.getParent()); assertEquals(1, buffer.getSubBuffers().size()); subBuffer.release(); assertEquals(0, buffer.getSubBuffers().size()); } finally { context.release(); } }