Hi there.
I heard of the situation that the OpenCL Buffers can only be allocated in appropriate chunks:
http://devgurus.amd.com/thread/158397
http://devgurus.amd.com/message/1282922#1282922
I am using the Cpp Bindings from the Khronos Group with the compiler option "DCL_USE_DEPRECATED_OPENCL_1_1_APIS" to achieve correct linking. The Buffer is allocated as follows:
cl::Buffer tempBuffer(m_context,CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR,size,VBOpos,&errret);
This Buffer contains 3D positions of points as 3 integers per point and is about 120mb. (10 mio points) This command returns cl_success. Can i assume that this behaviour indicates that the buffer is small enough to have not the problem of the 2 links above?
My Kernel reads the data as follows:
__kernel
void testKernel(__global int* VBOpos)
{
gid = get_global_id(0);
__private int4 WorldSpacePointPosInt;
WorldSpacePointPosInt = vload4(0,&(VBOpos[3*gid]));
}
The values of the about first 8mio Points are correct. But after that I get only nonsense. It seems that the allocation is done correctly, but the informations are not settet correctly. I tried it also bevorhand with an shared GL VBO. The GL rendering of the VBO is correct. But when i read it with CL from the shared GL VBO also there are only about 8mio correct points and the rest is dirt.
My Nvidia Notebook does not has this problem.
I would like to chunk the date into several buffers, but I do not know which exact size of the buffer is definitively correct initialized.
Testsystem:
AMD 7970, Win7 X64, Ubuntu X64 12.04, catalyst 12.8, AMD APP SDK 2.7
Sorry for my bad english and please reply, this would help me a lot.