summaryrefslogtreecommitdiffstats
path: root/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c')
-rw-r--r--src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c507
1 files changed, 507 insertions, 0 deletions
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c
new file mode 100644
index 00000000..8c757e95
--- /dev/null
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_texture.c
@@ -0,0 +1,507 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "unpacker.h"
+#include "cr_error.h"
+#include "cr_protocol.h"
+#include "cr_mem.h"
+#include "cr_version.h"
+
+#if defined( GL_EXT_texture3D )
+void crUnpackTexImage3DEXT( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( sizeof( int ) + 4, GLint );
+ GLenum internalformat = READ_DATA( sizeof( int ) + 8, GLint );
+ GLsizei width = READ_DATA( sizeof( int ) + 12, GLsizei );
+ GLsizei height = READ_DATA( sizeof( int ) + 16, GLsizei );
+ GLsizei depth = READ_DATA( sizeof( int ) + 20, GLsizei );
+ GLint border = READ_DATA( sizeof( int ) + 24, GLint );
+ GLenum format = READ_DATA( sizeof( int ) + 28, GLenum );
+ GLenum type = READ_DATA( sizeof( int ) + 32, GLenum );
+ int noimagedata = READ_DATA( sizeof( int ) + 36, int );
+ GLvoid *pixels;
+
+ /*If there's no imagedata send, it's either that passed pointer was NULL or
+ there was GL_PIXEL_UNPACK_BUFFER_ARB bound, in both cases 4bytes of passed
+ pointer would convert to either NULL or offset in the bound buffer.
+ */
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(sizeof(int)+40, GLint);
+ else
+ pixels = DATA_POINTER( sizeof( int ) + 44, GLvoid );
+
+ cr_unpackDispatch.TexImage3DEXT(target, level, internalformat, width,
+ height, depth, border, format, type,
+ pixels);
+ INCR_VAR_PTR();
+}
+#endif /* GL_EXT_texture3D */
+
+#if defined( CR_OPENGL_VERSION_1_2 )
+void crUnpackTexImage3D( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( sizeof( int ) + 4, GLint );
+ GLint internalformat = READ_DATA( sizeof( int ) + 8, GLint );
+ GLsizei width = READ_DATA( sizeof( int ) + 12, GLsizei );
+ GLsizei height = READ_DATA( sizeof( int ) + 16, GLsizei );
+ GLsizei depth = READ_DATA( sizeof( int ) + 20, GLsizei );
+ GLint border = READ_DATA( sizeof( int ) + 24, GLint );
+ GLenum format = READ_DATA( sizeof( int ) + 28, GLenum );
+ GLenum type = READ_DATA( sizeof( int ) + 32, GLenum );
+ int noimagedata = READ_DATA( sizeof( int ) + 36, int );
+ GLvoid *pixels;
+
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(sizeof(int)+40, GLint);
+ else
+ pixels = DATA_POINTER( sizeof( int ) + 44, GLvoid );
+
+ cr_unpackDispatch.TexImage3D( target, level, internalformat, width, height,
+ depth, border, format, type, pixels );
+ INCR_VAR_PTR();
+}
+#endif /* CR_OPENGL_VERSION_1_2 */
+
+void crUnpackTexImage2D( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( sizeof( int ) + 4, GLint );
+ GLint internalformat = READ_DATA( sizeof( int ) + 8, GLint );
+ GLsizei width = READ_DATA( sizeof( int ) + 12, GLsizei );
+ GLsizei height = READ_DATA( sizeof( int ) + 16, GLsizei );
+ GLint border = READ_DATA( sizeof( int ) + 20, GLint );
+ GLenum format = READ_DATA( sizeof( int ) + 24, GLenum );
+ GLenum type = READ_DATA( sizeof( int ) + 28, GLenum );
+ int noimagedata = READ_DATA( sizeof( int ) + 32, int );
+ GLvoid *pixels;
+
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(sizeof(int)+36, GLint);
+ else
+ pixels = DATA_POINTER( sizeof( int ) + 40, GLvoid );
+
+ cr_unpackDispatch.TexImage2D( target, level, internalformat, width, height,
+ border, format, type, pixels );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexImage1D( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( sizeof( int ) + 4, GLint );
+ GLint internalformat = READ_DATA( sizeof( int ) + 8, GLint );
+ GLsizei width = READ_DATA( sizeof( int ) + 12, GLsizei );
+ GLint border = READ_DATA( sizeof( int ) + 16, GLint );
+ GLenum format = READ_DATA( sizeof( int ) + 20, GLenum );
+ GLenum type = READ_DATA( sizeof( int ) + 24, GLenum );
+ int noimagedata = READ_DATA( sizeof( int ) + 28, int );
+ GLvoid *pixels;
+
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(sizeof(int)+32, GLint);
+ else
+ pixels = DATA_POINTER( sizeof( int ) + 36, GLvoid );
+
+ cr_unpackDispatch.TexImage1D( target, level, internalformat, width, border,
+ format, type, pixels );
+ INCR_VAR_PTR();
+}
+
+void crUnpackDeleteTextures( void )
+{
+ GLsizei n = READ_DATA( sizeof( int ) + 0, GLsizei );
+ GLuint *textures = DATA_POINTER( sizeof( int ) + 4, GLuint );
+
+ cr_unpackDispatch.DeleteTextures( n, textures );
+ INCR_VAR_PTR();
+}
+
+
+void crUnpackPrioritizeTextures( void )
+{
+ GLsizei n = READ_DATA( sizeof( int ) + 0, GLsizei );
+ GLuint *textures = DATA_POINTER( sizeof( int ) + 4, GLuint );
+ GLclampf *priorities = DATA_POINTER( sizeof( int ) + 4 + n*sizeof( GLuint ),
+ GLclampf );
+
+ cr_unpackDispatch.PrioritizeTextures( n, textures, priorities );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexParameterfv( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLfloat *params = DATA_POINTER( sizeof( int ) + 8, GLfloat );
+
+ cr_unpackDispatch.TexParameterfv( target, pname, params );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexParameteriv( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLint *params = DATA_POINTER( sizeof( int ) + 8, GLint );
+
+ cr_unpackDispatch.TexParameteriv( target, pname, params );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexParameterf( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLfloat param = READ_DATA( sizeof( int ) + 8, GLfloat );
+
+ cr_unpackDispatch.TexParameterf( target, pname, param );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexParameteri( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLint param = READ_DATA( sizeof( int ) + 8, GLint );
+
+ cr_unpackDispatch.TexParameteri( target, pname, param );
+ INCR_VAR_PTR();
+}
+
+#if defined(CR_OPENGL_VERSION_1_2)
+void crUnpackTexSubImage3D( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( sizeof( int ) + 4, GLint );
+ GLint xoffset = READ_DATA( sizeof( int ) + 8, GLint );
+ GLint yoffset = READ_DATA( sizeof( int ) + 12, GLint );
+ GLint zoffset = READ_DATA( sizeof( int ) + 16, GLint );
+ GLsizei width = READ_DATA( sizeof( int ) + 20, GLsizei );
+ GLsizei height = READ_DATA( sizeof( int ) + 24, GLsizei );
+ GLsizei depth = READ_DATA( sizeof( int ) + 28, GLsizei );
+ GLenum format = READ_DATA( sizeof( int ) + 32, GLenum );
+ GLenum type = READ_DATA( sizeof( int ) + 36, GLenum );
+ int noimagedata = READ_DATA( sizeof( int ) + 40, int );
+ GLvoid *pixels;
+
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(sizeof(int)+44, GLint);
+ else
+ pixels = DATA_POINTER( sizeof( int ) + 48, GLvoid );
+
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_ALIGNMENT, 1 );
+
+ cr_unpackDispatch.TexSubImage3D(target, level, xoffset, yoffset, zoffset,
+ width, height, depth, format, type, pixels);
+ INCR_VAR_PTR();
+}
+#endif /* CR_OPENGL_VERSION_1_2 */
+
+void crUnpackTexSubImage2D( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( sizeof( int ) + 4, GLint );
+ GLint xoffset = READ_DATA( sizeof( int ) + 8, GLint );
+ GLint yoffset = READ_DATA( sizeof( int ) + 12, GLint );
+ GLsizei width = READ_DATA( sizeof( int ) + 16, GLsizei );
+ GLsizei height = READ_DATA( sizeof( int ) + 20, GLsizei );
+ GLenum format = READ_DATA( sizeof( int ) + 24, GLenum );
+ GLenum type = READ_DATA( sizeof( int ) + 28, GLenum );
+ int noimagedata = READ_DATA( sizeof( int ) + 32, int );
+ GLvoid *pixels;
+
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(sizeof(int)+36, GLint);
+ else
+ pixels = DATA_POINTER( sizeof( int ) + 40, GLvoid );
+
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_ALIGNMENT, 1 );
+
+ cr_unpackDispatch.TexSubImage2D( target, level, xoffset, yoffset, width,
+ height, format, type, pixels );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexSubImage1D( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( sizeof( int ) + 4, GLint );
+ GLint xoffset = READ_DATA( sizeof( int ) + 8, GLint );
+ GLsizei width = READ_DATA( sizeof( int ) + 12, GLsizei );
+ GLenum format = READ_DATA( sizeof( int ) + 16, GLenum );
+ GLenum type = READ_DATA( sizeof( int ) + 20, GLenum );
+ int noimagedata = READ_DATA( sizeof( int ) + 24, int );
+ GLvoid *pixels;
+
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(sizeof(int)+28, GLint);
+ else
+ pixels = DATA_POINTER( sizeof( int ) + 32, GLvoid );
+
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
+ cr_unpackDispatch.PixelStorei( GL_UNPACK_ALIGNMENT, 1 );
+
+ cr_unpackDispatch.TexSubImage1D( target, level, xoffset, width, format,
+ type, pixels );
+ INCR_VAR_PTR();
+}
+
+
+void crUnpackTexEnvfv( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLfloat *params = DATA_POINTER( sizeof( int ) + 8, GLfloat );
+
+ cr_unpackDispatch.TexEnvfv( target, pname, params );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexEnviv( void )
+{
+ GLenum target = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLint *params = DATA_POINTER( sizeof( int ) + 8, GLint );
+
+ cr_unpackDispatch.TexEnviv( target, pname, params );
+ INCR_VAR_PTR();
+}
+
+#define DATA_POINTER_DOUBLE( offset )
+
+void crUnpackTexGendv( void )
+{
+ GLenum coord = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLdouble params[4];
+ unsigned int n_param = READ_DATA( 0, int ) - ( sizeof(int) + 8 );
+
+ if (n_param > sizeof(params))
+ {
+ crError("crUnpackTexGendv: n_param=%d, expected <= %d\n", n_param,
+ (unsigned int)sizeof(params));
+ return;
+ }
+
+ crMemcpy( params, DATA_POINTER( sizeof( int ) + 8, GLdouble ), n_param );
+
+ cr_unpackDispatch.TexGendv( coord, pname, params );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexGenfv( void )
+{
+ GLenum coord = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLfloat *params = DATA_POINTER( sizeof( int ) + 8, GLfloat );
+
+ cr_unpackDispatch.TexGenfv( coord, pname, params );
+ INCR_VAR_PTR();
+}
+
+void crUnpackTexGeniv( void )
+{
+ GLenum coord = READ_DATA( sizeof( int ) + 0, GLenum );
+ GLenum pname = READ_DATA( sizeof( int ) + 4, GLenum );
+ GLint *params = DATA_POINTER( sizeof( int ) + 8, GLint );
+
+ cr_unpackDispatch.TexGeniv( coord, pname, params );
+ INCR_VAR_PTR();
+}
+
+void crUnpackExtendAreTexturesResident( void )
+{
+ GLsizei n = READ_DATA( 8, GLsizei );
+ const GLuint *textures = DATA_POINTER( 12, const GLuint );
+
+ if (n <= 0 || n >= INT32_MAX / sizeof(GLuint) / 4 || !DATA_POINTER_CHECK(20 + n * sizeof(GLuint)))
+ {
+ crError("crUnpackExtendAreTexturesResident: %d is out of range", n);
+ return;
+ }
+
+ SET_RETURN_PTR(12 + n * sizeof(GLuint));
+ SET_WRITEBACK_PTR(20 + n * sizeof(GLuint));
+ (void) cr_unpackDispatch.AreTexturesResident( n, textures, NULL );
+}
+
+
+void crUnpackExtendCompressedTexImage3DARB( void )
+{
+ GLenum target = READ_DATA( 4 + sizeof(int) + 0, GLenum );
+ GLint level = READ_DATA( 4 + sizeof(int) + 4, GLint );
+ GLenum internalformat = READ_DATA( 4 + sizeof(int) + 8, GLenum );
+ GLsizei width = READ_DATA( 4 + sizeof(int) + 12, GLsizei );
+ GLsizei height = READ_DATA( 4 + sizeof(int) + 16, GLsizei );
+ GLsizei depth = READ_DATA( 4 + sizeof(int) + 20, GLsizei );
+ GLint border = READ_DATA( 4 + sizeof(int) + 24, GLint );
+ GLsizei imagesize = READ_DATA( 4 + sizeof(int) + 28, GLsizei );
+ int noimagedata = READ_DATA( 4 + sizeof(int) + 32, int );
+ GLvoid *pixels;
+
+ if( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(4+sizeof(int)+36, GLint);
+ else
+ pixels = DATA_POINTER( 4 + sizeof(int) + 40, GLvoid );
+
+ cr_unpackDispatch.CompressedTexImage3DARB(target, level, internalformat,
+ width, height, depth, border,
+ imagesize, pixels);
+}
+
+
+void crUnpackExtendCompressedTexImage2DARB( void )
+{
+ GLenum target = READ_DATA( 4 + sizeof( int ) + 0, GLenum );
+ GLint level = READ_DATA( 4 + sizeof( int ) + 4, GLint );
+ GLenum internalformat = READ_DATA( 4 + sizeof( int ) + 8, GLenum );
+ GLsizei width = READ_DATA( 4 + sizeof( int ) + 12, GLsizei );
+ GLsizei height = READ_DATA( 4 + sizeof( int ) + 16, GLsizei );
+ GLint border = READ_DATA( 4 + sizeof( int ) + 20, GLint );
+ GLsizei imagesize = READ_DATA( 4 + sizeof( int ) + 24, GLsizei );
+ int noimagedata = READ_DATA( 4 + sizeof( int ) + 28, int );
+ GLvoid *pixels;
+
+ if ( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(4+sizeof(int)+32, GLint);
+ else
+ pixels = DATA_POINTER( 4 + sizeof( int ) + 36, GLvoid );
+
+ cr_unpackDispatch.CompressedTexImage2DARB( target, level, internalformat,
+ width, height, border, imagesize,
+ pixels );
+}
+
+
+void crUnpackExtendCompressedTexImage1DARB( void )
+{
+ GLenum target = READ_DATA( 4 + sizeof(int) + 0, GLenum );
+ GLint level = READ_DATA( 4 + sizeof(int) + 4, GLint );
+ GLenum internalformat = READ_DATA( 4 + sizeof(int) + 8, GLenum );
+ GLsizei width = READ_DATA( 4 + sizeof(int) + 12, GLsizei );
+ GLint border = READ_DATA( 4 + sizeof(int) + 16, GLint );
+ GLsizei imagesize = READ_DATA( 4 + sizeof(int) + 20, GLsizei );
+ int noimagedata = READ_DATA( 4 + sizeof(int) + 24, int );
+ GLvoid *pixels;
+
+ if( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(4+sizeof(int)+28, GLint);
+ else
+ pixels = DATA_POINTER( 4 + sizeof(int) + 32, GLvoid );
+
+ cr_unpackDispatch.CompressedTexImage1DARB(target, level, internalformat,
+ width, border, imagesize, pixels);
+}
+
+
+void crUnpackExtendCompressedTexSubImage3DARB( void )
+{
+ GLenum target = READ_DATA( 4 + sizeof(int) + 0, GLenum );
+ GLint level = READ_DATA( 4 + sizeof(int) + 4, GLint );
+ GLint xoffset = READ_DATA( 4 + sizeof(int) + 8, GLint );
+ GLint yoffset = READ_DATA( 4 + sizeof(int) + 12, GLint );
+ GLint zoffset = READ_DATA( 4 + sizeof(int) + 16, GLint );
+ GLsizei width = READ_DATA( 4 + sizeof(int) + 20, GLsizei );
+ GLsizei height = READ_DATA( 4 + sizeof(int) + 24, GLsizei );
+ GLsizei depth = READ_DATA( 4 + sizeof(int) + 28, GLsizei );
+ GLenum format = READ_DATA( 4 + sizeof(int) + 32, GLenum );
+ GLsizei imagesize = READ_DATA( 4 + sizeof(int) + 36, GLsizei );
+ int noimagedata = READ_DATA( 4 + sizeof(int) + 40, int );
+ GLvoid *pixels;
+
+ if( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(4+sizeof(int)+44, GLint);
+ else
+ pixels = DATA_POINTER( 4 + sizeof(int) + 48, GLvoid );
+
+ cr_unpackDispatch.CompressedTexSubImage3DARB(target, level, xoffset,
+ yoffset, zoffset, width,
+ height, depth, format,
+ imagesize, pixels);
+}
+
+
+void crUnpackExtendCompressedTexSubImage2DARB( void )
+{
+ GLenum target = READ_DATA( 4 + sizeof(int) + 0, GLenum );
+ GLint level = READ_DATA( 4 + sizeof(int) + 4, GLint );
+ GLint xoffset = READ_DATA( 4 + sizeof(int) + 8, GLint );
+ GLint yoffset = READ_DATA( 4 + sizeof(int) + 12, GLint );
+ GLsizei width = READ_DATA( 4 + sizeof(int) + 16, GLsizei );
+ GLsizei height = READ_DATA( 4 + sizeof(int) + 20, GLsizei );
+ GLenum format = READ_DATA( 4 + sizeof(int) + 24, GLenum );
+ GLsizei imagesize = READ_DATA( 4 + sizeof(int) + 28, GLsizei );
+ int noimagedata = READ_DATA( 4 + sizeof(int) + 32, int );
+ GLvoid *pixels;
+
+ if( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(4+sizeof(int)+36, GLint);
+ else
+ pixels = DATA_POINTER( 4 + sizeof(int) + 40, GLvoid );
+
+ cr_unpackDispatch.CompressedTexSubImage2DARB(target, level, xoffset,
+ yoffset, width, height,
+ format, imagesize, pixels);
+}
+
+
+void crUnpackExtendCompressedTexSubImage1DARB( void )
+{
+ GLenum target = READ_DATA( 4 + sizeof(int) + 0, GLenum );
+ GLint level = READ_DATA( 4 + sizeof(int) + 4, GLint );
+ GLint xoffset = READ_DATA( 4 + sizeof(int) + 8, GLint );
+ GLsizei width = READ_DATA( 4 + sizeof(int) + 12, GLsizei );
+ GLenum format = READ_DATA( 4 + sizeof(int) + 16, GLenum );
+ GLsizei imagesize = READ_DATA( 4 + sizeof(int) + 20, GLsizei );
+ int noimagedata = READ_DATA( 4 + sizeof(int) + 24, int );
+ GLvoid *pixels;
+
+ if( noimagedata )
+ pixels = (void*) (uintptr_t) READ_DATA(4+sizeof(int)+28, GLint);
+ else
+ pixels = DATA_POINTER( 4 + sizeof(int) + 32, GLvoid );
+
+ cr_unpackDispatch.CompressedTexSubImage1DARB(target, level, xoffset, width,
+ format, imagesize, pixels);
+}
+
+void crUnpackExtendGetTexImage(void)
+{
+ GLenum target = READ_DATA( 8, GLenum );
+ GLint level = READ_DATA( 12, GLint );
+ GLenum format = READ_DATA( 16, GLenum );
+ GLenum type = READ_DATA( 20, GLenum );
+ GLvoid *pixels;
+
+ SET_RETURN_PTR(24);
+ SET_WRITEBACK_PTR(32);
+ pixels = DATA_POINTER(24, GLvoid);
+
+ cr_unpackDispatch.GetTexImage(target, level, format, type, pixels);
+}
+
+void crUnpackExtendGetCompressedTexImageARB(void)
+{
+ GLenum target = READ_DATA( 8, GLenum );
+ GLint level = READ_DATA( 12, GLint );
+ GLvoid *img;
+
+ SET_RETURN_PTR( 16 );
+ SET_WRITEBACK_PTR( 24 );
+ img = DATA_POINTER(16, GLvoid);
+
+ cr_unpackDispatch.GetCompressedTexImageARB( target, level, img );
+}