diff options
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/main/mipmap.c | 168 | ||||
| -rw-r--r-- | src/mesa/main/texformat.c | 171 | ||||
| -rw-r--r-- | src/mesa/main/texformat.h | 6 | 
3 files changed, 178 insertions, 167 deletions
| diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c index 09709d1787..b3e40c2da9 100644 --- a/src/mesa/main/mipmap.c +++ b/src/mesa/main/mipmap.c @@ -45,172 +45,6 @@ bytes_per_pixel(GLenum datatype, GLuint comps)  } -static void -mesa_format_to_type_and_comps(const struct gl_texture_format *format, -                              GLenum *datatype, GLuint *comps) -{ -   switch (format->MesaFormat) { -   case MESA_FORMAT_RGBA8888: -   case MESA_FORMAT_RGBA8888_REV: -   case MESA_FORMAT_ARGB8888: -   case MESA_FORMAT_ARGB8888_REV: -      *datatype = CHAN_TYPE; -      *comps = 4; -      return; -   case MESA_FORMAT_RGB888: -   case MESA_FORMAT_BGR888: -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 3; -      return; -   case MESA_FORMAT_RGB565: -   case MESA_FORMAT_RGB565_REV: -      *datatype = GL_UNSIGNED_SHORT_5_6_5; -      *comps = 3; -      return; - -   case MESA_FORMAT_ARGB4444: -   case MESA_FORMAT_ARGB4444_REV: -      *datatype = GL_UNSIGNED_SHORT_4_4_4_4; -      *comps = 4; -      return; - -   case MESA_FORMAT_ARGB1555: -   case MESA_FORMAT_ARGB1555_REV: -      *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV; -      *comps = 3; -      return; - -   case MESA_FORMAT_AL88: -   case MESA_FORMAT_AL88_REV: -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 2; -      return; -   case MESA_FORMAT_RGB332: -      *datatype = GL_UNSIGNED_BYTE_3_3_2; -      *comps = 3; -      return; - -   case MESA_FORMAT_A8: -   case MESA_FORMAT_L8: -   case MESA_FORMAT_I8: -   case MESA_FORMAT_CI8: -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 1; -      return; - -   case MESA_FORMAT_YCBCR: -   case MESA_FORMAT_YCBCR_REV: -      *datatype = GL_UNSIGNED_SHORT; -      *comps = 2; -      return; - -   case MESA_FORMAT_Z24_S8: -      *datatype = GL_UNSIGNED_INT; -      *comps = 1; /* XXX OK? */ -      return; - -   case MESA_FORMAT_Z16: -      *datatype = GL_UNSIGNED_SHORT; -      *comps = 1; -      return; - -   case MESA_FORMAT_Z32: -      *datatype = GL_UNSIGNED_INT; -      *comps = 1; -      return; - -   case MESA_FORMAT_SRGB8: -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 3; -      return; -   case MESA_FORMAT_SRGBA8: -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 4; -      return; -   case MESA_FORMAT_SL8: -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 1; -      return; -   case MESA_FORMAT_SLA8: -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 2; -      return; - -   case MESA_FORMAT_RGB_FXT1: -   case MESA_FORMAT_RGBA_FXT1: -   case MESA_FORMAT_RGB_DXT1: -   case MESA_FORMAT_RGBA_DXT1: -   case MESA_FORMAT_RGBA_DXT3: -   case MESA_FORMAT_RGBA_DXT5: -      /* XXX generate error instead? */ -      *datatype = GL_UNSIGNED_BYTE; -      *comps = 0; -      return; - -   case MESA_FORMAT_RGBA: -      *datatype = CHAN_TYPE; -      *comps = 4; -      return; -   case MESA_FORMAT_RGB: -      *datatype = CHAN_TYPE; -      *comps = 3; -      return; -   case MESA_FORMAT_LUMINANCE_ALPHA: -      *datatype = CHAN_TYPE; -      *comps = 2; -      return; -   case MESA_FORMAT_ALPHA: -   case MESA_FORMAT_LUMINANCE: -   case MESA_FORMAT_INTENSITY: -      *datatype = CHAN_TYPE; -      *comps = 1; -      return; - -   case MESA_FORMAT_RGBA_FLOAT32: -      *datatype = GL_FLOAT; -      *comps = 4; -      return; -   case MESA_FORMAT_RGBA_FLOAT16: -      *datatype = GL_HALF_FLOAT_ARB; -      *comps = 4; -      return; -   case MESA_FORMAT_RGB_FLOAT32: -      *datatype = GL_FLOAT; -      *comps = 3; -      return; -   case MESA_FORMAT_RGB_FLOAT16: -      *datatype = GL_HALF_FLOAT_ARB; -      *comps = 3; -      return; -   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32: -      *datatype = GL_FLOAT; -      *comps = 2; -      return; -   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16: -      *datatype = GL_HALF_FLOAT_ARB; -      *comps = 2; -      return; -   case MESA_FORMAT_ALPHA_FLOAT32: -   case MESA_FORMAT_LUMINANCE_FLOAT32: -   case MESA_FORMAT_INTENSITY_FLOAT32: -      *datatype = GL_FLOAT; -      *comps = 1; -      return; -   case MESA_FORMAT_ALPHA_FLOAT16: -   case MESA_FORMAT_LUMINANCE_FLOAT16: -   case MESA_FORMAT_INTENSITY_FLOAT16: -      *datatype = GL_HALF_FLOAT_ARB; -      *comps = 1; -      return; - -   default: -      _mesa_problem(NULL, "bad texture format in mesa_format_to_type_and_comps"); -      *datatype = 0; -      *comps = 1; -   } -} - -  /**   * Average together two rows of a source image to produce a single new   * row in the dest image.  It's legal for the two source rows to point @@ -1087,7 +921,7 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,        convertFormat = srcImage->TexFormat;     } -   mesa_format_to_type_and_comps(convertFormat, &datatype, &comps); +   _mesa_format_to_type_and_comps(convertFormat, &datatype, &comps);     for (level = texObj->BaseLevel; level < texObj->MaxLevel             && level < maxLevels - 1; level++) { diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index 62acdba1bb..ae9ed0a84b 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -1603,3 +1603,174 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,     _mesa_problem(ctx, "unexpected format in _mesa_choose_tex_format()");     return NULL;  } + + + +/** + * Return datatype and number of components per texel for the + * given gl_texture_format. + */ +void +_mesa_format_to_type_and_comps(const struct gl_texture_format *format, +                               GLenum *datatype, GLuint *comps) +{ +   switch (format->MesaFormat) { +   case MESA_FORMAT_RGBA8888: +   case MESA_FORMAT_RGBA8888_REV: +   case MESA_FORMAT_ARGB8888: +   case MESA_FORMAT_ARGB8888_REV: +      *datatype = CHAN_TYPE; +      *comps = 4; +      return; +   case MESA_FORMAT_RGB888: +   case MESA_FORMAT_BGR888: +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 3; +      return; +   case MESA_FORMAT_RGB565: +   case MESA_FORMAT_RGB565_REV: +      *datatype = GL_UNSIGNED_SHORT_5_6_5; +      *comps = 3; +      return; + +   case MESA_FORMAT_ARGB4444: +   case MESA_FORMAT_ARGB4444_REV: +      *datatype = GL_UNSIGNED_SHORT_4_4_4_4; +      *comps = 4; +      return; + +   case MESA_FORMAT_ARGB1555: +   case MESA_FORMAT_ARGB1555_REV: +      *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV; +      *comps = 3; +      return; + +   case MESA_FORMAT_AL88: +   case MESA_FORMAT_AL88_REV: +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 2; +      return; +   case MESA_FORMAT_RGB332: +      *datatype = GL_UNSIGNED_BYTE_3_3_2; +      *comps = 3; +      return; + +   case MESA_FORMAT_A8: +   case MESA_FORMAT_L8: +   case MESA_FORMAT_I8: +   case MESA_FORMAT_CI8: +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 1; +      return; + +   case MESA_FORMAT_YCBCR: +   case MESA_FORMAT_YCBCR_REV: +      *datatype = GL_UNSIGNED_SHORT; +      *comps = 2; +      return; + +   case MESA_FORMAT_Z24_S8: +      *datatype = GL_UNSIGNED_INT; +      *comps = 1; /* XXX OK? */ +      return; + +   case MESA_FORMAT_Z16: +      *datatype = GL_UNSIGNED_SHORT; +      *comps = 1; +      return; + +   case MESA_FORMAT_Z32: +      *datatype = GL_UNSIGNED_INT; +      *comps = 1; +      return; + +   case MESA_FORMAT_SRGB8: +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 3; +      return; +   case MESA_FORMAT_SRGBA8: +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 4; +      return; +   case MESA_FORMAT_SL8: +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 1; +      return; +   case MESA_FORMAT_SLA8: +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 2; +      return; + +   case MESA_FORMAT_RGB_FXT1: +   case MESA_FORMAT_RGBA_FXT1: +   case MESA_FORMAT_RGB_DXT1: +   case MESA_FORMAT_RGBA_DXT1: +   case MESA_FORMAT_RGBA_DXT3: +   case MESA_FORMAT_RGBA_DXT5: +      /* XXX generate error instead? */ +      *datatype = GL_UNSIGNED_BYTE; +      *comps = 0; +      return; + +   case MESA_FORMAT_RGBA: +      *datatype = CHAN_TYPE; +      *comps = 4; +      return; +   case MESA_FORMAT_RGB: +      *datatype = CHAN_TYPE; +      *comps = 3; +      return; +   case MESA_FORMAT_LUMINANCE_ALPHA: +      *datatype = CHAN_TYPE; +      *comps = 2; +      return; +   case MESA_FORMAT_ALPHA: +   case MESA_FORMAT_LUMINANCE: +   case MESA_FORMAT_INTENSITY: +      *datatype = CHAN_TYPE; +      *comps = 1; +      return; + +   case MESA_FORMAT_RGBA_FLOAT32: +      *datatype = GL_FLOAT; +      *comps = 4; +      return; +   case MESA_FORMAT_RGBA_FLOAT16: +      *datatype = GL_HALF_FLOAT_ARB; +      *comps = 4; +      return; +   case MESA_FORMAT_RGB_FLOAT32: +      *datatype = GL_FLOAT; +      *comps = 3; +      return; +   case MESA_FORMAT_RGB_FLOAT16: +      *datatype = GL_HALF_FLOAT_ARB; +      *comps = 3; +      return; +   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32: +      *datatype = GL_FLOAT; +      *comps = 2; +      return; +   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16: +      *datatype = GL_HALF_FLOAT_ARB; +      *comps = 2; +      return; +   case MESA_FORMAT_ALPHA_FLOAT32: +   case MESA_FORMAT_LUMINANCE_FLOAT32: +   case MESA_FORMAT_INTENSITY_FLOAT32: +      *datatype = GL_FLOAT; +      *comps = 1; +      return; +   case MESA_FORMAT_ALPHA_FLOAT16: +   case MESA_FORMAT_LUMINANCE_FLOAT16: +   case MESA_FORMAT_INTENSITY_FLOAT16: +      *datatype = GL_HALF_FLOAT_ARB; +      *comps = 1; +      return; + +   default: +      _mesa_problem(NULL, "bad format in _mesa_format_to_type_and_comps"); +      *datatype = 0; +      *comps = 1; +   } +} diff --git a/src/mesa/main/texformat.h b/src/mesa/main/texformat.h index f5f851ca21..18900fe08b 100644 --- a/src/mesa/main/texformat.h +++ b/src/mesa/main/texformat.h @@ -243,4 +243,10 @@ extern const struct gl_texture_format *  _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,                           GLenum format, GLenum type ); + +extern void +_mesa_format_to_type_and_comps(const struct gl_texture_format *format, +                               GLenum *datatype, GLuint *comps); + +  #endif | 
