It seems OpenCL somehow allocates too much memory when I point opengl 3d texture as OpenCL object.
look to the code:
unsigned char* data = new unsigned char[length*length*length*4];
for (int k = 0; k < length*length*length*4; k++) data[k] = 0;
glEnable(GL_TEXTURE_3D);
PFNGLTEXIMAGE3DPROC glTexImage3D;
glTexImage3D = (PFNGLTEXIMAGE3DPROC) wglGetProcAddress("glTexImage3D");
glGenTextures(1, &texname);
glBindTexture(GL_TEXTURE_3D, texname);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, length, length, length, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
glBindTexture(GL_TEXTURE_3D, 0);
int stopFirst = 0;
cl_texname = clCreateFromGLTexture3D(cxGPUContext, CL_MEM_READ_WRITE, GL_TEXTURE_3D, 0, texname, &ciErrNum);
shrCheckErrorEX(ciErrNum, CL_SUCCESS, pCleanup);
ciErrNum = clEnqueueAcquireGLObjects(cqCommandQueue, 1, &cl_texname, 0, NULL, NULL);
shrCheckErrorEX(ciErrNum, CL_SUCCESS, pCleanup);
stopFirst = 0;
ciErrNum = clEnqueueReleaseGLObjects(cqCommandQueue, 1, &cl_texname, 0, NULL, NULL);
shrCheckErrorEX(ciErrNum, CL_SUCCESS, pCleanup);
so after the last step it is engaged about 192Mb! on my videocard, but the volume is 64Mb only. (Nvidia GT 650M)
any suggestions?