server_texture.c revision f3e7d9f629952c2a40ea9788ba1d9b748131e26b
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * VBox crOpenGL: teximage functions.
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * Copyright (C) 2010 Oracle Corporation
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * available from http://www.virtualbox.org. This file is free software;
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * you can redistribute it and/or modify it under the terms of the GNU
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * General Public License (GPL) as published by the Free Software
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a399af7c964fd519318bb906a1274e720943a4c1vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a399af7c964fd519318bb906a1274e720943a4c1vboxsync# define CR_FIXPTR() (uintptr_t) realptr += (uintptr_t) cr_server.head_spu->dispatch_table.MapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, GL_READ_ONLY_ARB)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync if (crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB)) \
a399af7c964fd519318bb906a1274e720943a4c1vboxsync#if defined(CR_ARB_pixel_buffer_object) && !defined(CR_STATE_NO_TEXTURE_IMAGE_STORE)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync if (crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB)) \
a399af7c964fd519318bb906a1274e720943a4c1vboxsync if (!cr_server.head_spu->dispatch_table.UnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB)) \
a399af7c964fd519318bb906a1274e720943a4c1vboxsync#define CR_FUNC_SUBIMAGE(name, def, call, ptrname) \
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imagesize, const GLvoid * data),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, xoffset, width, format, imagesize, realptr), data)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imagesize, const GLvoid * data),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, xoffset, yoffset, width, height, format, imagesize, realptr), data)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imagesize, const GLvoid * data),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imagesize, realptr), data)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imagesize, const GLvoid * data),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, internalFormat, width, border, imagesize, realptr), data)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imagesize, const GLvoid * data),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, internalFormat, width, height, border, imagesize, realptr), data)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imagesize, const GLvoid * data),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, internalFormat, width, height, depth, border, imagesize, realptr), data)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, xoffset, width, format, type, realptr), pixels)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, xoffset, yoffset, width, height, format, type, realptr), pixels)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, realptr), pixels)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, internalFormat, width, border, format, type, realptr), pixels)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, internalFormat, width, height, border, format, type, realptr), pixels)
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels),
a399af7c964fd519318bb906a1274e720943a4c1vboxsync (target, level, internalFormat, width, height, depth, border, format, type, realptr), pixels)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvf( GLenum target, GLenum pname, GLfloat param )
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvf( target, pname, param ););
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvfv( GLenum target, GLenum pname, const GLfloat * params )
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvfv( target, pname, params ););
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvi( GLenum target, GLenum pname, GLint param )
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvi( target, pname, param ););
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchTexEnviv( GLenum target, GLenum pname, const GLint * params )
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnviv( target, pname, params ););
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchGetTexEnvfv( GLenum target, GLenum pname, GLfloat * params )
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync cr_server.head_spu->dispatch_table.GetTexEnvfv( target, pname, local_params );
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crServerReturnValue( &(local_params[0]), crStateHlpComponentsCount(pname)*sizeof (GLfloat) );
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchGetTexEnviv( GLenum target, GLenum pname, GLint * params )
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync cr_server.head_spu->dispatch_table.GetTexEnviv( target, pname, local_params );
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync crServerReturnValue( &(local_params[0]), crStateHlpComponentsCount(pname)*sizeof (GLint) );
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchBindTexture( GLenum target, GLuint texture )
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync cr_server.head_spu->dispatch_table.BindTexture(target, crStateGetTextureHWID(texture));
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchDeleteTextures( GLsizei n, const GLuint *textures)
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync GLuint *newTextures = (GLuint *) crAlloc(n * sizeof(GLuint));
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync crError("crServerDispatchDeleteTextures: out of memory");
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync for (i = 0; i < n; i++)
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync newTextures[i] = crStateGetTextureHWID(textures[i]);
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync// for (i = 0; i < n; ++i)
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync// crDebug("DeleteTexture: %d, pid %d, ctx %d", textures[i], (uint32_t)cr_server.curClient->pid, cr_server.currentCtxInfo->pContext->id);
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync cr_server.head_spu->dispatch_table.DeleteTextures(n, newTextures);
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsyncvoid SERVER_DISPATCH_APIENTRY crServerDispatchPrioritizeTextures( GLsizei n, const GLuint * textures, const GLclampf * priorities )
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync GLuint *newTextures = (GLuint *) crAlloc(n * sizeof(GLuint));
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync crError("crServerDispatchDeleteTextures: out of memory");
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync crStatePrioritizeTextures(n, textures, priorities);
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync for (i = 0; i < n; i++)
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync newTextures[i] = crStateGetTextureHWID(textures[i]);
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync cr_server.head_spu->dispatch_table.PrioritizeTextures(n, newTextures, priorities);
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync/*@todo will fail for textures loaded from snapshot */
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsyncGLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsTexture( GLuint texture )
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync retval = cr_server.head_spu->dispatch_table.IsTexture(crStateGetTextureHWID(texture));
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsynccrServerDispatchAreTexturesResident(GLsizei n, const GLuint *textures,
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync GLboolean *res = (GLboolean *) crAlloc(n * sizeof(GLboolean));
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync GLuint *textures2 = (GLuint *) crAlloc(n * sizeof(GLuint));
f3e7d9f629952c2a40ea9788ba1d9b748131e26bvboxsync for (i = 0; i < n; i++)