X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Ftexutil.c;h=8a7483128cc0df1f9413c1d5e3d00289b18ed1ae;hb=dec0131a29584171f88e6734c0ec6a429c22b007;hp=5b8edc1f16ef07889eabc737f593956fb1a4b758;hpb=19d1e432612cf7db797da11793b13a6c1c6aac16;p=mesa.git diff --git a/src/mesa/main/texutil.c b/src/mesa/main/texutil.c index 5b8edc1f16e..8a7483128cc 100644 --- a/src/mesa/main/texutil.c +++ b/src/mesa/main/texutil.c @@ -1,10 +1,10 @@ -/* $Id: texutil.c,v 1.19 2001/03/27 19:18:02 gareth Exp $ */ +/* $Id: texutil.c,v 1.27 2002/03/15 18:05:49 brianp Exp $ */ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.2 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -41,7 +41,7 @@ #include "texutil.h" #endif -#define DBG 0 +#define DEBUG_TEXUTIL 0 struct gl_texture_convert { @@ -52,7 +52,7 @@ struct gl_texture_convert { /* Needed for subimage replacement */ GLenum format, type; /* Source (user) format and type */ - const struct gl_pixelstore_attrib *packing; + const struct gl_pixelstore_attrib *unpacking; const GLvoid *srcImage; GLvoid *dstImage; @@ -63,19 +63,19 @@ struct gl_texture_convert { typedef GLboolean (*convert_func)( struct gl_texture_convert *convert ); #define CONVERT_STRIDE_BIT 0x1 -#define CONVERT_PACKING_BIT 0x2 +#define CONVERT_UNPACKING_BIT 0x2 -/* ================================================================ +/* ============================================================= * RGBA8888 textures: */ #define DST_TYPE GLuint #define DST_TEXELS_PER_DWORD 1 -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) #define CONVERT_DIRECT @@ -86,10 +86,10 @@ typedef GLboolean (*convert_func)( struct gl_texture_convert *convert ); #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_8888( src[0], src[1], src[2], src[3] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_8888( src[0], src[1], src[2], src[3] ) -#define CONVERT_TEXEL_DWORD( src ) CONVERT_TEXEL( src ) +#define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) #define SRC_TEXEL_BYTES 4 @@ -98,10 +98,10 @@ typedef GLboolean (*convert_func)( struct gl_texture_convert *convert ); #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_8888( src[0], src[1], src[2], 0xff ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_8888( src[0], src[1], src[2], 0xff ) -#define CONVERT_TEXEL_DWORD( src ) CONVERT_TEXEL( src ) +#define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) #define SRC_TEXEL_BYTES 3 @@ -146,15 +146,15 @@ CONVERT_RGBA8888( texsubimage3d ) -/* ================================================================ +/* ============================================================= * ARGB8888 textures: */ #define DST_TYPE GLuint #define DST_TEXELS_PER_DWORD 1 -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) #define CONVERT_DIRECT @@ -165,10 +165,10 @@ CONVERT_RGBA8888( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_8888( src[3], src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_8888( src[3], src[0], src[1], src[2] ) -#define CONVERT_TEXEL_DWORD( src ) CONVERT_TEXEL( src ) +#define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) #define SRC_TEXEL_BYTES 4 @@ -177,10 +177,10 @@ CONVERT_RGBA8888( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_8888( 0xff, src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_8888( 0xff, src[0], src[1], src[2] ) -#define CONVERT_TEXEL_DWORD( src ) CONVERT_TEXEL( src ) +#define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) #define SRC_TEXEL_BYTES 3 @@ -224,7 +224,7 @@ CONVERT_ARGB8888( texsubimage3d ) -/* ================================================================ +/* ============================================================= * RGB888 textures: */ @@ -246,15 +246,15 @@ convert_texsubimage3d_rgb888( struct gl_texture_convert *convert ) -/* ================================================================ +/* ============================================================= * RGB565 textures: */ #define DST_TYPE GLushort #define DST_TEXELS_PER_DWORD 2 -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_565( src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_565( src[0], src[1], src[2] ) #define CONVERT_DIRECT @@ -265,12 +265,12 @@ convert_texsubimage3d_rgb888( struct gl_texture_convert *convert ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_565( src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_565( src[0], src[1], src[2] ) -#define CONVERT_TEXEL_DWORD( src ) \ - ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ - (PACK_COLOR_565( src[3], src[4], src[5] ) << 16)) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + dst = ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ + (PACK_COLOR_565( src[3], src[4], src[5] ) << 16)) #define SRC_TEXEL_BYTES 3 @@ -279,12 +279,12 @@ convert_texsubimage3d_rgb888( struct gl_texture_convert *convert ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_565( src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_565( src[0], src[1], src[2] ) -#define CONVERT_TEXEL_DWORD( src ) \ - ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ - (PACK_COLOR_565( src[4], src[5], src[6] ) << 16)) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + dst = ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ + (PACK_COLOR_565( src[4], src[5], src[6] ) << 16)) #define SRC_TEXEL_BYTES 4 @@ -328,15 +328,15 @@ CONVERT_RGB565( texsubimage3d ) -/* ================================================================ +/* ============================================================= * ARGB4444 textures: */ #define DST_TYPE GLushort #define DST_TEXELS_PER_DWORD 2 -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) #define CONVERT_DIRECT @@ -347,16 +347,16 @@ CONVERT_RGB565( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) -#define CONVERT_TEXEL_DWORD( src ) \ - ((PACK_COLOR_4444( src[3], src[0], src[1], src[2] )) | \ - (PACK_COLOR_4444( src[7], src[4], src[5], src[6] ) << 16)) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + dst = ((PACK_COLOR_4444( src[3], src[0], src[1], src[2] )) | \ + (PACK_COLOR_4444( src[7], src[4], src[5], src[6] ) << 16)) #define SRC_TEXEL_BYTES 4 -#define TAG(x) x##_rgba8888_to_argb4444 +#define TAG(x) x##_abgr8888_to_argb4444 #include "texutil_tmp.h" @@ -375,7 +375,7 @@ convert_##name##_argb4444( struct gl_texture_convert *convert ) \ else if ( convert->format == GL_RGBA && \ convert->type == GL_UNSIGNED_BYTE ) \ { \ - tab = name##_tab_rgba8888_to_argb4444; \ + tab = name##_tab_abgr8888_to_argb4444; \ } \ else \ { \ @@ -391,15 +391,15 @@ CONVERT_ARGB4444( texsubimage3d ) -/* ================================================================ +/* ============================================================= * ARGB1555 textures: */ #define DST_TYPE GLushort #define DST_TEXELS_PER_DWORD 2 -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) #define CONVERT_DIRECT @@ -410,14 +410,14 @@ CONVERT_ARGB4444( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - ({ GLushort s = *(GLushort *)src; \ - s = (s >> 1) | ((s & 1) << 15); s; }) +#define CONVERT_TEXEL( dst, src ) \ + { const GLushort s = *(GLushort *)src; \ + dst = (s >> 1) | ((s & 1) << 15); } -#define CONVERT_TEXEL_DWORD( src ) \ - ({ GLuint s = *(GLuint *)src; \ - s = (((s & 0xfffefffe) >> 1) | \ - ((s & 0x00010001) << 15)); s; }) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + { const GLuint s = ((fi_type *)src)->i; \ + dst = (((s & 0xfffefffe) >> 1) | \ + ((s & 0x00010001) << 15)); } #define SRC_TEXEL_BYTES 2 @@ -426,16 +426,16 @@ CONVERT_ARGB4444( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) -#define CONVERT_TEXEL_DWORD( src ) \ - ((PACK_COLOR_1555( src[3], src[0], src[1], src[2] )) | \ - (PACK_COLOR_1555( src[7], src[4], src[5], src[6] ) << 16)) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + dst = ((PACK_COLOR_1555( src[3], src[0], src[1], src[2] )) | \ + (PACK_COLOR_1555( src[7], src[4], src[5], src[6] ) << 16)) #define SRC_TEXEL_BYTES 4 -#define TAG(x) x##_rgba8888_to_argb1555 +#define TAG(x) x##_abgr8888_to_argb1555 #include "texutil_tmp.h" @@ -459,7 +459,7 @@ convert_##name##_argb1555( struct gl_texture_convert *convert ) \ else if ( convert->format == GL_RGBA && \ convert->type == GL_UNSIGNED_BYTE ) \ { \ - tab = name##_tab_rgba8888_to_argb1555; \ + tab = name##_tab_abgr8888_to_argb1555; \ } \ else \ { \ @@ -475,15 +475,15 @@ CONVERT_ARGB1555( texsubimage3d ) -/* ================================================================ +/* ============================================================= * AL88 textures: */ #define DST_TYPE GLushort #define DST_TEXELS_PER_DWORD 2 -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_88( src[0], src[1] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_88( src[0], src[1] ) #define CONVERT_DIRECT @@ -494,12 +494,12 @@ CONVERT_ARGB1555( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_88( src[0], 0x00 ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_88( src[0], 0x00 ) -#define CONVERT_TEXEL_DWORD( src ) \ - ((PACK_COLOR_88( src[0], 0x00 )) | \ - (PACK_COLOR_88( src[1], 0x00 ) << 16)) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + dst = ((PACK_COLOR_88( src[0], 0x00 )) | \ + (PACK_COLOR_88( src[1], 0x00 ) << 16)) #define SRC_TEXEL_BYTES 1 @@ -508,12 +508,12 @@ CONVERT_ARGB1555( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_88( 0xff, src[0] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_88( 0xff, src[0] ) -#define CONVERT_TEXEL_DWORD( src ) \ - ((PACK_COLOR_88( 0xff, src[0] )) | \ - (PACK_COLOR_88( 0xff, src[1] ) << 16)) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + dst = ((PACK_COLOR_88( 0xff, src[0] )) | \ + (PACK_COLOR_88( 0xff, src[1] ) << 16)) #define SRC_TEXEL_BYTES 1 @@ -522,12 +522,12 @@ CONVERT_ARGB1555( texsubimage3d ) #include "texutil_tmp.h" -#define CONVERT_TEXEL( src ) \ - PACK_COLOR_88( src[3], src[0] ) +#define CONVERT_TEXEL( dst, src ) \ + dst = PACK_COLOR_88( src[3], src[0] ) -#define CONVERT_TEXEL_DWORD( src ) \ - ((PACK_COLOR_88( src[3], src[0] )) | \ - (PACK_COLOR_88( src[7], src[1] ) << 16)) +#define CONVERT_TEXEL_DWORD( dst, src ) \ + dst = ((PACK_COLOR_88( src[3], src[0] )) | \ + (PACK_COLOR_88( src[7], src[4] ) << 16)) #define SRC_TEXEL_BYTES 4 @@ -576,7 +576,7 @@ CONVERT_AL88( texsubimage3d ) -/* ================================================================ +/* ============================================================= * RGB332 textures: */ @@ -598,14 +598,14 @@ convert_texsubimage3d_rgb332( struct gl_texture_convert *convert ) -/* ================================================================ +/* ============================================================= * CI8 (and all other single-byte texel) textures: */ #define DST_TYPE GLubyte #define DST_TEXELS_PER_DWORD 4 -#define CONVERT_TEXEL( src ) src[0] +#define CONVERT_TEXEL( dst, src ) dst = src[0] #define CONVERT_DIRECT @@ -644,7 +644,7 @@ CONVERT_CI8( texsubimage3d ) -/* ================================================================ +/* ============================================================= * Global entry points */ @@ -681,23 +681,23 @@ static convert_func gl_convert_texsubimage3d_tab[] = { /* See if we need to care about the pixel store attributes when we're * converting the texture image. This should be stored as - * packing->_SomeBoolean and updated when the values change, to avoid + * unpacking->_SomeBoolean and updated when the values change, to avoid * testing every time... */ static INLINE GLboolean -convert_needs_packing( const struct gl_pixelstore_attrib *packing, +convert_needs_unpacking( const struct gl_pixelstore_attrib *unpacking, GLenum format, GLenum type ) { - if ( ( packing->Alignment == 1 || - ( packing->Alignment == 4 && /* Pick up the common Q3A case... */ + if ( ( unpacking->Alignment == 1 || + ( unpacking->Alignment == 4 && /* Pick up the common Q3A case... */ format == GL_RGBA && type == GL_UNSIGNED_BYTE ) ) && - packing->RowLength == 0 && - packing->SkipPixels == 0 && - packing->SkipRows == 0 && - packing->ImageHeight == 0 && - packing->SkipImages == 0 && - packing->SwapBytes == GL_FALSE && - packing->LsbFirst == GL_FALSE ) { + unpacking->RowLength == 0 && + unpacking->SkipPixels == 0 && + unpacking->SkipRows == 0 && + unpacking->ImageHeight == 0 && + unpacking->SkipImages == 0 && + unpacking->SwapBytes == GL_FALSE && + unpacking->LsbFirst == GL_FALSE ) { return GL_FALSE; } else { return GL_TRUE; @@ -710,12 +710,12 @@ _mesa_convert_texsubimage1d( GLint mesaFormat, GLint xoffset, GLint width, GLenum format, GLenum type, - const struct gl_pixelstore_attrib *packing, + const struct gl_pixelstore_attrib *unpacking, const GLvoid *srcImage, GLvoid *dstImage ) { struct gl_texture_convert convert; - ASSERT( packing ); + ASSERT( unpacking ); ASSERT( srcImage ); ASSERT( dstImage ); @@ -730,26 +730,25 @@ _mesa_convert_texsubimage1d( GLint mesaFormat, convert.height = 1; convert.format = format; convert.type = type; - convert.packing = packing; + convert.unpacking = unpacking; convert.srcImage = srcImage; convert.dstImage = dstImage; convert.index = 0; - if ( convert_needs_packing( packing, format, type ) ) - convert.index |= CONVERT_PACKING_BIT; + if ( convert_needs_unpacking( unpacking, format, type ) ) + convert.index |= CONVERT_UNPACKING_BIT; return gl_convert_texsubimage2d_tab[mesaFormat]( &convert ); } -/* - * Convert a user's 2D image into a texture image. This basically repacks - * pixel data into the special texture formats used by core Mesa and the DRI - * drivers. This function can do full images or subimages. +/* Convert a user's 2D image into a texture image. This basically + * repacks pixel data into the special texture formats used by core Mesa + * and the DRI drivers. This function can do full images or subimages. * - * We return a boolean because this function may not accept some kinds of - * source image formats and/or types. For example, if the incoming + * We return a boolean because this function may not accept some kinds + * of source image formats and/or types. For example, if the incoming * format/type = GL_BGR, GL_UNSIGNED_INT this function probably won't * be able to do the conversion. * @@ -765,7 +764,7 @@ _mesa_convert_texsubimage1d( GLint mesaFormat, * width, height - incoming image size, also size of dest region. * dstImageWidth - width (row stride) of dest image in pixels * format, type - incoming image format and type - * packing - describes incoming image packing + * unpacking - describes incoming image unpacking * srcImage - pointer to source image * destImage - pointer to dest image */ @@ -775,12 +774,12 @@ _mesa_convert_texsubimage2d( GLint mesaFormat, GLint width, GLint height, GLint destImageWidth, GLenum format, GLenum type, - const struct gl_pixelstore_attrib *packing, + const struct gl_pixelstore_attrib *unpacking, const GLvoid *srcImage, GLvoid *dstImage ) { struct gl_texture_convert convert; - ASSERT( packing ); + ASSERT( unpacking ); ASSERT( srcImage ); ASSERT( dstImage ); @@ -796,14 +795,14 @@ _mesa_convert_texsubimage2d( GLint mesaFormat, convert.dstImageWidth = destImageWidth; convert.format = format; convert.type = type; - convert.packing = packing; + convert.unpacking = unpacking; convert.srcImage = srcImage; convert.dstImage = dstImage; convert.index = 0; - if ( convert_needs_packing( packing, format, type ) ) - convert.index |= CONVERT_PACKING_BIT; + if ( convert_needs_unpacking( unpacking, format, type ) ) + convert.index |= CONVERT_UNPACKING_BIT; if ( width != destImageWidth ) convert.index |= CONVERT_STRIDE_BIT; @@ -817,12 +816,12 @@ _mesa_convert_texsubimage3d( GLint mesaFormat, GLint width, GLint height, GLint depth, GLint dstImageWidth, GLint dstImageHeight, GLenum format, GLenum type, - const struct gl_pixelstore_attrib *packing, + const struct gl_pixelstore_attrib *unpacking, const GLvoid *srcImage, GLvoid *dstImage ) { struct gl_texture_convert convert; - ASSERT( packing ); + ASSERT( unpacking ); ASSERT( srcImage ); ASSERT( dstImage ); @@ -841,14 +840,14 @@ _mesa_convert_texsubimage3d( GLint mesaFormat, convert.dstImageHeight = dstImageHeight; convert.format = format; convert.type = type; - convert.packing = packing; + convert.unpacking = unpacking; convert.srcImage = srcImage; convert.dstImage = dstImage; convert.index = 0; - if ( convert_needs_packing( packing, format, type ) ) - convert.index |= CONVERT_PACKING_BIT; + if ( convert_needs_unpacking( unpacking, format, type ) ) + convert.index |= CONVERT_UNPACKING_BIT; if ( width != dstImageWidth || height != dstImageHeight ) convert.index |= CONVERT_STRIDE_BIT; @@ -862,20 +861,21 @@ _mesa_convert_texsubimage3d( GLint mesaFormat, * all aspect ratios). This can be made a lot faster, but I don't * really care enough... */ -void _mesa_rescale_teximage2d( const struct gl_texture_format *texFormat, +void _mesa_rescale_teximage2d( GLuint bytesPerPixel, GLuint dstRowStride, GLint srcWidth, GLint srcHeight, GLint dstWidth, GLint dstHeight, const GLvoid *srcImage, GLvoid *dstImage ) { GLint row, col; -#define INNER_LOOP( HOP, WOP ) \ +#define INNER_LOOP( TYPE, HOP, WOP ) \ for ( row = 0 ; row < dstHeight ; row++ ) { \ GLint srcRow = row HOP hScale; \ for ( col = 0 ; col < dstWidth ; col++ ) { \ GLint srcCol = col WOP wScale; \ - *dst++ = src[srcRow * srcWidth + srcCol]; \ + dst[col] = src[srcRow * srcWidth + srcCol]; \ } \ + dst = (TYPE *) ((GLubyte *) dst + dstRowStride); \ } \ #define RESCALE_IMAGE( TYPE ) \ @@ -887,27 +887,27 @@ do { \ const GLint hScale = dstHeight / srcHeight; \ if ( srcWidth <= dstWidth ) { \ const GLint wScale = dstWidth / srcWidth; \ - INNER_LOOP( /, / ); \ + INNER_LOOP( TYPE, /, / ); \ } \ else { \ const GLint wScale = srcWidth / dstWidth; \ - INNER_LOOP( /, * ); \ + INNER_LOOP( TYPE, /, * ); \ } \ } \ else { \ const GLint hScale = srcHeight / dstHeight; \ if ( srcWidth <= dstWidth ) { \ const GLint wScale = dstWidth / srcWidth; \ - INNER_LOOP( *, / ); \ + INNER_LOOP( TYPE, *, / ); \ } \ else { \ const GLint wScale = srcWidth / dstWidth; \ - INNER_LOOP( *, * ); \ + INNER_LOOP( TYPE, *, * ); \ } \ } \ } while (0) - switch ( texFormat->TexelBytes ) { + switch ( bytesPerPixel ) { case 4: RESCALE_IMAGE( GLuint ); break; @@ -919,5 +919,7 @@ do { \ case 1: RESCALE_IMAGE( GLubyte ); break; + default: + _mesa_problem(NULL,"unexpected bytes/pixel in _mesa_rescale_teximage2d"); } }