texformat.h revision c1f859d4
1/* 2 * Mesa 3-D graphics library 3 * Version: 6.5.1 4 * 5 * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included 15 * in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25 26/** 27 * \file texformat.h 28 * Texture formats definitions. 29 * 30 * \author Gareth Hughes 31 */ 32 33 34#ifndef TEXFORMAT_H 35#define TEXFORMAT_H 36 37 38#include "mtypes.h" 39 40 41/** 42 * Mesa internal texture image formats. 43 * All texture images are stored in one of these formats. 44 * 45 * NOTE: when you add a new format, be sure to update the do_row() 46 * function in texstore.c used for auto mipmap generation. 47 */ 48enum _format { 49 /** 50 * \name Hardware-friendly formats. 51 * 52 * Drivers can override the default formats and convert texture images to 53 * one of these as required. The driver's 54 * dd_function_table::ChooseTextureFormat function will choose one of these 55 * formats. 56 * 57 * \note In the default case, some of these formats will be duplicates of 58 * the generic formats listed below. However, these formats guarantee their 59 * internal component sizes, while GLchan may vary between GLubyte, GLushort 60 * and GLfloat. 61 */ 62 /*@{*/ 63 /* msb <------ TEXEL BITS -----------> lsb */ 64 /* ---- ---- ---- ---- ---- ---- ---- ---- */ 65 MESA_FORMAT_RGBA8888, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ 66 MESA_FORMAT_RGBA8888_REV, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ 67 MESA_FORMAT_ARGB8888, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */ 68 MESA_FORMAT_ARGB8888_REV, /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */ 69 MESA_FORMAT_RGB888, /* RRRR RRRR GGGG GGGG BBBB BBBB */ 70 MESA_FORMAT_BGR888, /* BBBB BBBB GGGG GGGG RRRR RRRR */ 71 MESA_FORMAT_RGB565, /* RRRR RGGG GGGB BBBB */ 72 MESA_FORMAT_RGB565_REV, /* GGGB BBBB RRRR RGGG */ 73 MESA_FORMAT_RGBA4444, /* RRRR GGGG BBBB AAAA */ 74 MESA_FORMAT_ARGB4444, /* AAAA RRRR GGGG BBBB */ 75 MESA_FORMAT_ARGB4444_REV, /* GGGG BBBB AAAA RRRR */ 76 MESA_FORMAT_RGBA5551, /* RRRR RGGG GGBB BBBA */ 77 MESA_FORMAT_ARGB1555, /* ARRR RRGG GGGB BBBB */ 78 MESA_FORMAT_ARGB1555_REV, /* GGGB BBBB ARRR RRGG */ 79 MESA_FORMAT_AL88, /* AAAA AAAA LLLL LLLL */ 80 MESA_FORMAT_AL88_REV, /* LLLL LLLL AAAA AAAA */ 81 MESA_FORMAT_RGB332, /* RRRG GGBB */ 82 MESA_FORMAT_A8, /* AAAA AAAA */ 83 MESA_FORMAT_L8, /* LLLL LLLL */ 84 MESA_FORMAT_I8, /* IIII IIII */ 85 MESA_FORMAT_CI8, /* CCCC CCCC */ 86 MESA_FORMAT_YCBCR, /* YYYY YYYY UorV UorV */ 87 MESA_FORMAT_YCBCR_REV, /* UorV UorV YYYY YYYY */ 88 MESA_FORMAT_Z24_S8, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */ 89 MESA_FORMAT_S8_Z24, /* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ 90 MESA_FORMAT_Z16, /* ZZZZ ZZZZ ZZZZ ZZZZ */ 91 MESA_FORMAT_Z32, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ 92 /*@}*/ 93 94#if FEATURE_EXT_texture_sRGB 95 /** 96 * \name 8-bit/channel sRGB formats 97 */ 98 /*@{*/ 99 MESA_FORMAT_SRGB8, 100 MESA_FORMAT_SRGBA8, 101 MESA_FORMAT_SL8, 102 MESA_FORMAT_SLA8, 103 MESA_FORMAT_SRGB_DXT1, 104 /*@}*/ 105#endif 106 107 /** 108 * \name Compressed texture formats. 109 */ 110 /*@{*/ 111 MESA_FORMAT_RGB_FXT1, 112 MESA_FORMAT_RGBA_FXT1, 113 MESA_FORMAT_RGB_DXT1, 114 MESA_FORMAT_RGBA_DXT1, 115 MESA_FORMAT_RGBA_DXT3, 116 MESA_FORMAT_RGBA_DXT5, 117 /*@}*/ 118 119 /** 120 * \name Generic GLchan-based formats. 121 * 122 * Software-oriented texture formats. Texels are arrays of GLchan 123 * values so there are no byte order issues. 124 * 125 * \note Because these are based on the GLchan data type, one cannot assume 126 * 8 bits per channel with these formats. If you require GLubyte channels, 127 * use one of the hardware formats above. 128 */ 129 /*@{*/ 130 MESA_FORMAT_RGBA, 131 MESA_FORMAT_RGB, 132 MESA_FORMAT_ALPHA, 133 MESA_FORMAT_LUMINANCE, 134 MESA_FORMAT_LUMINANCE_ALPHA, 135 MESA_FORMAT_INTENSITY, 136 /*@}*/ 137 138 /** 139 * \name Floating point texture formats. 140 */ 141 /*@{*/ 142 MESA_FORMAT_RGBA_FLOAT32, 143 MESA_FORMAT_RGBA_FLOAT16, 144 MESA_FORMAT_RGB_FLOAT32, 145 MESA_FORMAT_RGB_FLOAT16, 146 MESA_FORMAT_ALPHA_FLOAT32, 147 MESA_FORMAT_ALPHA_FLOAT16, 148 MESA_FORMAT_LUMINANCE_FLOAT32, 149 MESA_FORMAT_LUMINANCE_FLOAT16, 150 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32, 151 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, 152 MESA_FORMAT_INTENSITY_FLOAT32, 153 MESA_FORMAT_INTENSITY_FLOAT16 154 /*@}*/ 155}; 156 157 158/** GLchan-valued formats */ 159/*@{*/ 160extern const struct gl_texture_format _mesa_texformat_rgba; 161extern const struct gl_texture_format _mesa_texformat_rgb; 162extern const struct gl_texture_format _mesa_texformat_alpha; 163extern const struct gl_texture_format _mesa_texformat_luminance; 164extern const struct gl_texture_format _mesa_texformat_luminance_alpha; 165extern const struct gl_texture_format _mesa_texformat_intensity; 166/*@}*/ 167 168#if FEATURE_EXT_texture_sRGB 169/** sRGB (nonlinear) formats */ 170/*@{*/ 171extern const struct gl_texture_format _mesa_texformat_srgb8; 172extern const struct gl_texture_format _mesa_texformat_srgba8; 173extern const struct gl_texture_format _mesa_texformat_sl8; 174extern const struct gl_texture_format _mesa_texformat_sla8; 175extern const struct gl_texture_format _mesa_texformat_srgb_dxt1; 176/*@}*/ 177#endif 178 179/** Floating point texture formats */ 180/*@{*/ 181extern const struct gl_texture_format _mesa_texformat_rgba_float32; 182extern const struct gl_texture_format _mesa_texformat_rgba_float16; 183extern const struct gl_texture_format _mesa_texformat_rgb_float32; 184extern const struct gl_texture_format _mesa_texformat_rgb_float16; 185extern const struct gl_texture_format _mesa_texformat_alpha_float32; 186extern const struct gl_texture_format _mesa_texformat_alpha_float16; 187extern const struct gl_texture_format _mesa_texformat_luminance_float32; 188extern const struct gl_texture_format _mesa_texformat_luminance_float16; 189extern const struct gl_texture_format _mesa_texformat_luminance_alpha_float32; 190extern const struct gl_texture_format _mesa_texformat_luminance_alpha_float16; 191extern const struct gl_texture_format _mesa_texformat_intensity_float32; 192extern const struct gl_texture_format _mesa_texformat_intensity_float16; 193/*@}*/ 194 195/** \name Assorted hardware-friendly formats */ 196/*@{*/ 197extern const struct gl_texture_format _mesa_texformat_rgba8888; 198extern const struct gl_texture_format _mesa_texformat_rgba8888_rev; 199extern const struct gl_texture_format _mesa_texformat_argb8888; 200extern const struct gl_texture_format _mesa_texformat_argb8888_rev; 201extern const struct gl_texture_format _mesa_texformat_rgb888; 202extern const struct gl_texture_format _mesa_texformat_bgr888; 203extern const struct gl_texture_format _mesa_texformat_rgb565; 204extern const struct gl_texture_format _mesa_texformat_rgb565_rev; 205extern const struct gl_texture_format _mesa_texformat_rgba4444; 206extern const struct gl_texture_format _mesa_texformat_argb4444; 207extern const struct gl_texture_format _mesa_texformat_argb4444_rev; 208extern const struct gl_texture_format _mesa_texformat_argb1555; 209extern const struct gl_texture_format _mesa_texformat_argb1555_rev; 210extern const struct gl_texture_format _mesa_texformat_rgba5551; 211extern const struct gl_texture_format _mesa_texformat_al88; 212extern const struct gl_texture_format _mesa_texformat_al88_rev; 213extern const struct gl_texture_format _mesa_texformat_rgb332; 214extern const struct gl_texture_format _mesa_texformat_a8; 215extern const struct gl_texture_format _mesa_texformat_l8; 216extern const struct gl_texture_format _mesa_texformat_i8; 217extern const struct gl_texture_format _mesa_texformat_ci8; 218extern const struct gl_texture_format _mesa_texformat_z24_s8; 219extern const struct gl_texture_format _mesa_texformat_s8_z24; 220extern const struct gl_texture_format _mesa_texformat_z16; 221extern const struct gl_texture_format _mesa_texformat_z32; 222/*@}*/ 223 224/** \name YCbCr formats */ 225/*@{*/ 226extern const struct gl_texture_format _mesa_texformat_ycbcr; 227extern const struct gl_texture_format _mesa_texformat_ycbcr_rev; 228/*@}*/ 229 230/** \name Compressed formats */ 231/*@{*/ 232extern const struct gl_texture_format _mesa_texformat_rgb_fxt1; 233extern const struct gl_texture_format _mesa_texformat_rgba_fxt1; 234extern const struct gl_texture_format _mesa_texformat_rgb_dxt1; 235extern const struct gl_texture_format _mesa_texformat_rgba_dxt1; 236extern const struct gl_texture_format _mesa_texformat_rgba_dxt3; 237extern const struct gl_texture_format _mesa_texformat_rgba_dxt5; 238/*@}*/ 239 240/** \name The null format */ 241/*@{*/ 242extern const struct gl_texture_format _mesa_null_texformat; 243/*@}*/ 244 245 246extern const struct gl_texture_format * 247_mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat, 248 GLenum format, GLenum type ); 249 250 251extern void 252_mesa_format_to_type_and_comps(const struct gl_texture_format *format, 253 GLenum *datatype, GLuint *comps); 254 255 256#endif 257