formats.c revision f57df7f2130dfe20a6f7e75cfc1f5d4e1717d098
1813870fd9588de101f68728507cff726d7513695Brian Paul/*
2813870fd9588de101f68728507cff726d7513695Brian Paul * Mesa 3-D graphics library
3813870fd9588de101f68728507cff726d7513695Brian Paul * Version:  7.7
4813870fd9588de101f68728507cff726d7513695Brian Paul *
5813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (c) 2008-2009  VMware, Inc.
7813870fd9588de101f68728507cff726d7513695Brian Paul *
8813870fd9588de101f68728507cff726d7513695Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
9813870fd9588de101f68728507cff726d7513695Brian Paul * copy of this software and associated documentation files (the "Software"),
10813870fd9588de101f68728507cff726d7513695Brian Paul * to deal in the Software without restriction, including without limitation
11813870fd9588de101f68728507cff726d7513695Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12813870fd9588de101f68728507cff726d7513695Brian Paul * and/or sell copies of the Software, and to permit persons to whom the
13813870fd9588de101f68728507cff726d7513695Brian Paul * Software is furnished to do so, subject to the following conditions:
14813870fd9588de101f68728507cff726d7513695Brian Paul *
15813870fd9588de101f68728507cff726d7513695Brian Paul * The above copyright notice and this permission notice shall be included
16813870fd9588de101f68728507cff726d7513695Brian Paul * in all copies or substantial portions of the Software.
17813870fd9588de101f68728507cff726d7513695Brian Paul *
18813870fd9588de101f68728507cff726d7513695Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19813870fd9588de101f68728507cff726d7513695Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20813870fd9588de101f68728507cff726d7513695Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21813870fd9588de101f68728507cff726d7513695Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22813870fd9588de101f68728507cff726d7513695Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23813870fd9588de101f68728507cff726d7513695Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24813870fd9588de101f68728507cff726d7513695Brian Paul */
25813870fd9588de101f68728507cff726d7513695Brian Paul
26813870fd9588de101f68728507cff726d7513695Brian Paul
27c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul#include "imports.h"
28813870fd9588de101f68728507cff726d7513695Brian Paul#include "formats.h"
29813870fd9588de101f68728507cff726d7513695Brian Paul
30813870fd9588de101f68728507cff726d7513695Brian Paul
31813870fd9588de101f68728507cff726d7513695Brian Paul/**
32be0765cd6ec47cf068775197f312a1123e044566Brian Paul * Information about texture formats.
33be0765cd6ec47cf068775197f312a1123e044566Brian Paul */
34be0765cd6ec47cf068775197f312a1123e044566Brian Paulstruct gl_format_info
35be0765cd6ec47cf068775197f312a1123e044566Brian Paul{
36be0765cd6ec47cf068775197f312a1123e044566Brian Paul   gl_format Name;
37be0765cd6ec47cf068775197f312a1123e044566Brian Paul
38bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   /** text name for debugging */
39bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   const char *StrName;
40bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
41be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
42be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * Base format is one of GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE,
43eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul    * GL_LUMINANCE_ALPHA, GL_INTENSITY, GL_YCBCR_MESA, GL_COLOR_INDEX,
44eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul    * GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
45be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
46be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLenum BaseFormat;
47be0765cd6ec47cf068775197f312a1123e044566Brian Paul
48be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
49be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * Logical data type: one of  GL_UNSIGNED_NORMALIZED, GL_SIGNED_NORMALED,
50abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    * GL_UNSIGNED_INT, GL_INT, GL_FLOAT.
51be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
52be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLenum DataType;
53be0765cd6ec47cf068775197f312a1123e044566Brian Paul
54be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte RedBits;
55be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte GreenBits;
56be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BlueBits;
57be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte AlphaBits;
58be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte LuminanceBits;
59be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte IntensityBits;
60be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte IndexBits;
61be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte DepthBits;
62be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte StencilBits;
63be0765cd6ec47cf068775197f312a1123e044566Brian Paul
64be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
65be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * To describe compressed formats.  If not compressed, Width=Height=1.
66be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
67be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BlockWidth, BlockHeight;
68be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BytesPerBlock;
69be0765cd6ec47cf068775197f312a1123e044566Brian Paul};
70be0765cd6ec47cf068775197f312a1123e044566Brian Paul
71be0765cd6ec47cf068775197f312a1123e044566Brian Paul
72be0765cd6ec47cf068775197f312a1123e044566Brian Paul/**
73813870fd9588de101f68728507cff726d7513695Brian Paul * Info about each format.
74813870fd9588de101f68728507cff726d7513695Brian Paul * These must be in the same order as the MESA_FORMAT_* enums so that
75813870fd9588de101f68728507cff726d7513695Brian Paul * we can do lookups without searching.
76813870fd9588de101f68728507cff726d7513695Brian Paul */
77813870fd9588de101f68728507cff726d7513695Brian Paulstatic struct gl_format_info format_info[MESA_FORMAT_COUNT] =
78813870fd9588de101f68728507cff726d7513695Brian Paul{
79813870fd9588de101f68728507cff726d7513695Brian Paul   {
80e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      MESA_FORMAT_NONE,            /* Name */
81bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_NONE",          /* StrName */
82e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* BaseFormat */
83e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* DataType */
84e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
85e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
86e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0                      /* BlockWidth/Height,Bytes */
87e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   },
88e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   {
89813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888,        /* Name */
90bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA8888",      /* StrName */
91813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
92813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
93813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
94813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
95813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
96813870fd9588de101f68728507cff726d7513695Brian Paul   },
97813870fd9588de101f68728507cff726d7513695Brian Paul   {
98813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888_REV,    /* Name */
99bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA8888_REV",  /* StrName */
100813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
101813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
102813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
103813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
104813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
105813870fd9588de101f68728507cff726d7513695Brian Paul   },
106813870fd9588de101f68728507cff726d7513695Brian Paul   {
107813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888,        /* Name */
108bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB8888",      /* StrName */
109813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
110813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
111813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
112813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
113813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
114813870fd9588de101f68728507cff726d7513695Brian Paul   },
115813870fd9588de101f68728507cff726d7513695Brian Paul   {
116813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888_REV,    /* Name */
117bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB8888_REV",  /* StrName */
118813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
119813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
120813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
121813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
122813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
123813870fd9588de101f68728507cff726d7513695Brian Paul   },
124813870fd9588de101f68728507cff726d7513695Brian Paul   {
12574d61d03b54d72217d463c248468cdcd09320efcBrian Paul      MESA_FORMAT_XRGB8888,        /* Name */
126bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_XRGB8888",      /* StrName */
12774d61d03b54d72217d463c248468cdcd09320efcBrian Paul      GL_RGB,                      /* BaseFormat */
12874d61d03b54d72217d463c248468cdcd09320efcBrian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
12974d61d03b54d72217d463c248468cdcd09320efcBrian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
13074d61d03b54d72217d463c248468cdcd09320efcBrian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
13174d61d03b54d72217d463c248468cdcd09320efcBrian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
13274d61d03b54d72217d463c248468cdcd09320efcBrian Paul   },
13374d61d03b54d72217d463c248468cdcd09320efcBrian Paul   {
1342d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      MESA_FORMAT_XRGB8888_REV,    /* Name */
1352d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      "MESA_FORMAT_XRGB8888_REV",  /* StrName */
1362d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      GL_RGB,                      /* BaseFormat */
1372d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      GL_UNSIGNED_NORMALIZED,      /* DataType */
1382d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
1392d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
1402d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      1, 1, 4                      /* BlockWidth/Height,Bytes */
1412d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer   },
1422d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer   {
143813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB888,          /* Name */
144bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB888",        /* StrName */
145813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
146813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
147813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
148813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
149813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
150813870fd9588de101f68728507cff726d7513695Brian Paul   },
151813870fd9588de101f68728507cff726d7513695Brian Paul   {
152813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_BGR888,          /* Name */
153bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_BGR888",        /* StrName */
154813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
155813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
156813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
157813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
158813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
159813870fd9588de101f68728507cff726d7513695Brian Paul   },
160813870fd9588de101f68728507cff726d7513695Brian Paul   {
161813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565,          /* Name */
162bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB565",        /* StrName */
163813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
164813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
165813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
166813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
167813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
168813870fd9588de101f68728507cff726d7513695Brian Paul   },
169813870fd9588de101f68728507cff726d7513695Brian Paul   {
170813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565_REV,      /* Name */
171bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB565_REV",    /* StrName */
172813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
173813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
174813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
175813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
176813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
177813870fd9588de101f68728507cff726d7513695Brian Paul   },
178813870fd9588de101f68728507cff726d7513695Brian Paul   {
179813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444,        /* Name */
180bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB4444",      /* StrName */
181813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
182813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
183813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
184813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
185813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
186813870fd9588de101f68728507cff726d7513695Brian Paul   },
187813870fd9588de101f68728507cff726d7513695Brian Paul   {
188813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444_REV,    /* Name */
189bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB4444_REV",  /* StrName */
190813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
191813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
192813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
193813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
194813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
195813870fd9588de101f68728507cff726d7513695Brian Paul   },
196813870fd9588de101f68728507cff726d7513695Brian Paul   {
197813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA5551,        /* Name */
198bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA5551",      /* StrName */
199813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
200813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
201813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
202813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
203813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
204813870fd9588de101f68728507cff726d7513695Brian Paul   },
205813870fd9588de101f68728507cff726d7513695Brian Paul   {
206813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555,        /* Name */
207bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB1555",      /* StrName */
208813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
209813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
210813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
211813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
212813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
213813870fd9588de101f68728507cff726d7513695Brian Paul   },
214813870fd9588de101f68728507cff726d7513695Brian Paul   {
215813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555_REV,    /* Name */
216bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB1555_REV",  /* StrName */
217813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
218813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
219813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
220813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
221813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
222813870fd9588de101f68728507cff726d7513695Brian Paul   },
223813870fd9588de101f68728507cff726d7513695Brian Paul   {
224813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88,            /* Name */
225bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_AL88",          /* StrName */
226813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
227813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
228813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
229813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
230813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
231813870fd9588de101f68728507cff726d7513695Brian Paul   },
232813870fd9588de101f68728507cff726d7513695Brian Paul   {
233813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88_REV,        /* Name */
234bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_AL88_REV",      /* StrName */
235813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
236813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
237813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
238813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
239813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
240813870fd9588de101f68728507cff726d7513695Brian Paul   },
241813870fd9588de101f68728507cff726d7513695Brian Paul   {
242eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      MESA_FORMAT_AL1616,          /* Name */
243eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      "MESA_FORMAT_AL1616",        /* StrName */
244eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_LUMINANCE_ALPHA,          /* BaseFormat */
245eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_UNSIGNED_NORMALIZED,      /* DataType */
246eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
247eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
248eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      1, 1, 4                      /* BlockWidth/Height,Bytes */
249eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   },
250eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   {
251eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      MESA_FORMAT_AL1616_REV,      /* Name */
252eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      "MESA_FORMAT_AL1616_REV",    /* StrName */
253eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_LUMINANCE_ALPHA,          /* BaseFormat */
254eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_UNSIGNED_NORMALIZED,      /* DataType */
255eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
256eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
257eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      1, 1, 4                      /* BlockWidth/Height,Bytes */
258eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   },
259eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   {
260813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB332,          /* Name */
261bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB332",        /* StrName */
262813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
263813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
264813870fd9588de101f68728507cff726d7513695Brian Paul      3, 3, 2, 0,                  /* Red/Green/Blue/AlphaBits */
265813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
266813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
267813870fd9588de101f68728507cff726d7513695Brian Paul   },
268813870fd9588de101f68728507cff726d7513695Brian Paul   {
269813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_A8,              /* Name */
270bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_A8",            /* StrName */
271813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,                    /* BaseFormat */
272813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
273813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
274813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
275813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
276813870fd9588de101f68728507cff726d7513695Brian Paul   },
277813870fd9588de101f68728507cff726d7513695Brian Paul   {
278813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_L8,              /* Name */
279bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_L8",            /* StrName */
280813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE,                /* BaseFormat */
281813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
282813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
283813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
284813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
285813870fd9588de101f68728507cff726d7513695Brian Paul   },
286813870fd9588de101f68728507cff726d7513695Brian Paul   {
287813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_I8,              /* Name */
288bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_I8",            /* StrName */
289813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,                /* BaseFormat */
290813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
291813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
292813870fd9588de101f68728507cff726d7513695Brian Paul      0, 8, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
293813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
294813870fd9588de101f68728507cff726d7513695Brian Paul   },
295813870fd9588de101f68728507cff726d7513695Brian Paul   {
296813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_CI8,             /* Name */
297bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_CI8",           /* StrName */
298813870fd9588de101f68728507cff726d7513695Brian Paul      GL_COLOR_INDEX,              /* BaseFormat */
299813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
300813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
301813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 8, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
302813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
303813870fd9588de101f68728507cff726d7513695Brian Paul   },
304813870fd9588de101f68728507cff726d7513695Brian Paul   {
305813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR,           /* Name */
306bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_YCBCR",         /* StrName */
307813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
308813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
309813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
310813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
311813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
312813870fd9588de101f68728507cff726d7513695Brian Paul   },
313813870fd9588de101f68728507cff726d7513695Brian Paul   {
314813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR_REV,       /* Name */
315bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_YCBCR_REV",     /* StrName */
316813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
317813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
318813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
319813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
320813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
321813870fd9588de101f68728507cff726d7513695Brian Paul   },
322813870fd9588de101f68728507cff726d7513695Brian Paul   {
323813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z24_S8,          /* Name */
324bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z24_S8",        /* StrName */
325813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
326813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
327813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
328813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
329813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
330813870fd9588de101f68728507cff726d7513695Brian Paul   },
331813870fd9588de101f68728507cff726d7513695Brian Paul   {
332813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8_Z24,          /* Name */
333bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8_Z24",        /* StrName */
334813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
335813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
336813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
337813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
338813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
339813870fd9588de101f68728507cff726d7513695Brian Paul   },
340813870fd9588de101f68728507cff726d7513695Brian Paul   {
341813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z16,             /* Name */
342bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z16",           /* StrName */
343813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
344813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
345813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
346813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16, 0,              /* Lum/Int/Index/Depth/StencilBits */
347813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
348813870fd9588de101f68728507cff726d7513695Brian Paul   },
349813870fd9588de101f68728507cff726d7513695Brian Paul   {
350e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      MESA_FORMAT_X8_Z24,          /* Name */
351bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_X8_Z24",        /* StrName */
352e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
353e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_UNSIGNED_INT,             /* DataType */
354e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
355e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
356e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
357e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   },
358e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   {
359c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      MESA_FORMAT_Z24_X8,          /* Name */
360c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      "MESA_FORMAT_Z24_X8",        /* StrName */
361c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_DEPTH_COMPONENT,          /* BaseFormat */
362c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_UNSIGNED_INT,             /* DataType */
363c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
364c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
365c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      1, 1, 4                      /* BlockWidth/Height,Bytes */
366c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   },
367c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   {
368813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z32,             /* Name */
369bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z32",           /* StrName */
370813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
371813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
372813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
373813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
374813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
375813870fd9588de101f68728507cff726d7513695Brian Paul   },
376813870fd9588de101f68728507cff726d7513695Brian Paul   {
377813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8,              /* Name */
378bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8",            /* StrName */
379813870fd9588de101f68728507cff726d7513695Brian Paul      GL_STENCIL_INDEX,            /* BaseFormat */
380813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
381813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
382813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
383813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
384813870fd9588de101f68728507cff726d7513695Brian Paul   },
385813870fd9588de101f68728507cff726d7513695Brian Paul   {
386813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB8,
387bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB8",
388813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
389813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
390813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,
391813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
392813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3
393813870fd9588de101f68728507cff726d7513695Brian Paul   },
394813870fd9588de101f68728507cff726d7513695Brian Paul   {
395813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA8,
396bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA8",
397813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
398813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
399813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
400813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
401813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
402813870fd9588de101f68728507cff726d7513695Brian Paul   },
403813870fd9588de101f68728507cff726d7513695Brian Paul   {
404813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SARGB8,
405bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SARGB8",
406813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
407813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
408813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
409813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
410813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
411813870fd9588de101f68728507cff726d7513695Brian Paul   },
412813870fd9588de101f68728507cff726d7513695Brian Paul   {
413813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SL8,
414bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SL8",
41571cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      GL_LUMINANCE,
416813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
41771cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      0, 0, 0, 0,
418813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
41971cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      1, 1, 1
420813870fd9588de101f68728507cff726d7513695Brian Paul   },
421813870fd9588de101f68728507cff726d7513695Brian Paul   {
422813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SLA8,
423bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SLA8",
424813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
425813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
426813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,
427813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
428813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
429813870fd9588de101f68728507cff726d7513695Brian Paul   },
430813870fd9588de101f68728507cff726d7513695Brian Paul   {
431813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB_DXT1,       /* Name */
432bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB_DXT1",     /* StrName */
433813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
434813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
435813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
436813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
437813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
438813870fd9588de101f68728507cff726d7513695Brian Paul   },
439813870fd9588de101f68728507cff726d7513695Brian Paul   {
440813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT1,
441bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT1",
442813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
443813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
444813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
445813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
446813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
447813870fd9588de101f68728507cff726d7513695Brian Paul   },
448813870fd9588de101f68728507cff726d7513695Brian Paul   {
449813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT3,
450bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT3",
451813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
452813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
453813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
454813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
455813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
456813870fd9588de101f68728507cff726d7513695Brian Paul   },
457813870fd9588de101f68728507cff726d7513695Brian Paul   {
458813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT5,
459bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT5",
460813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
461813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
462813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
463813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
464813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
465813870fd9588de101f68728507cff726d7513695Brian Paul   },
466813870fd9588de101f68728507cff726d7513695Brian Paul
467813870fd9588de101f68728507cff726d7513695Brian Paul   {
468813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FXT1,
469bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FXT1",
470813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
471813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
472c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/BlueBits */
473813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
474813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
475813870fd9588de101f68728507cff726d7513695Brian Paul   },
476813870fd9588de101f68728507cff726d7513695Brian Paul   {
477813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FXT1,
478bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FXT1",
479813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
480813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
481c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 1,                  /* approx Red/Green/Blue/AlphaBits */
482813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
483813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
484813870fd9588de101f68728507cff726d7513695Brian Paul   },
485813870fd9588de101f68728507cff726d7513695Brian Paul
486813870fd9588de101f68728507cff726d7513695Brian Paul   {
487813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_DXT1,        /* Name */
488bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_DXT1",      /* StrName */
489813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
490813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
491813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
492813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
493813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
494813870fd9588de101f68728507cff726d7513695Brian Paul   },
495813870fd9588de101f68728507cff726d7513695Brian Paul   {
496813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT1,
497bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT1",
498813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
499813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
500813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
501813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
502813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
503813870fd9588de101f68728507cff726d7513695Brian Paul   },
504813870fd9588de101f68728507cff726d7513695Brian Paul   {
505813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT3,
506bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT3",
507813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
508813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
509813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
510813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
511813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
512813870fd9588de101f68728507cff726d7513695Brian Paul   },
513813870fd9588de101f68728507cff726d7513695Brian Paul   {
514813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT5,
515bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT5",
516813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
517813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
518813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
519813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
520813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
521813870fd9588de101f68728507cff726d7513695Brian Paul   },
522813870fd9588de101f68728507cff726d7513695Brian Paul   {
523813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT32,
524bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT32",
525813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
526813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
527813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 32,
528813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
529813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 16
530813870fd9588de101f68728507cff726d7513695Brian Paul   },
531813870fd9588de101f68728507cff726d7513695Brian Paul   {
532813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT16,
533bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT16",
534813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
535813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
536813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 16,
537813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
538813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
539813870fd9588de101f68728507cff726d7513695Brian Paul   },
540813870fd9588de101f68728507cff726d7513695Brian Paul   {
541813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT32,
542bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT32",
543813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
544813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
545813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 0,
546813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
547813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 12
548813870fd9588de101f68728507cff726d7513695Brian Paul   },
549813870fd9588de101f68728507cff726d7513695Brian Paul   {
550813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT16,
551bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT16",
552813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
553813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
554813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 0,
555813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
556813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 6
557813870fd9588de101f68728507cff726d7513695Brian Paul   },
558813870fd9588de101f68728507cff726d7513695Brian Paul   {
559813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT32,
560bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT32",
561813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
562813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
563813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
564813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
565813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
566813870fd9588de101f68728507cff726d7513695Brian Paul   },
567813870fd9588de101f68728507cff726d7513695Brian Paul   {
568813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT16,
569bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT16",
570813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
571813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
572813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
573813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
574813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
575813870fd9588de101f68728507cff726d7513695Brian Paul   },
576813870fd9588de101f68728507cff726d7513695Brian Paul   {
577813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT32,
578bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT32",
579813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
580813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
581813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
582813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
583813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
584813870fd9588de101f68728507cff726d7513695Brian Paul   },
585813870fd9588de101f68728507cff726d7513695Brian Paul   {
586813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT16,
587bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT16",
588813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
589813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
590813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
591813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
592813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
593813870fd9588de101f68728507cff726d7513695Brian Paul   },
594813870fd9588de101f68728507cff726d7513695Brian Paul   {
595813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
596bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32",
597813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
598813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
599813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
600813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
601813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
602813870fd9588de101f68728507cff726d7513695Brian Paul   },
603813870fd9588de101f68728507cff726d7513695Brian Paul   {
604813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
605bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16",
606813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
607813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
608813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
609813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
610813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
611813870fd9588de101f68728507cff726d7513695Brian Paul   },
612813870fd9588de101f68728507cff726d7513695Brian Paul   {
613813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT32,
614bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT32",
615813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
616813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
617813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
618813870fd9588de101f68728507cff726d7513695Brian Paul      0, 32, 0, 0, 0,
619813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
620813870fd9588de101f68728507cff726d7513695Brian Paul   },
621813870fd9588de101f68728507cff726d7513695Brian Paul   {
622813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT16,
623bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT16",
624813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
625813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
626813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
627813870fd9588de101f68728507cff726d7513695Brian Paul      0, 16, 0, 0, 0,
628813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
629813870fd9588de101f68728507cff726d7513695Brian Paul   },
630abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
631abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /* unnormalized signed int formats */
632abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
633abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT8,
634abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT8",
635abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
636abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
637abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      8, 8, 8, 8,
638abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
639abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 4
640abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
641abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
642abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT16,
643abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT16",
644abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
645abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
646abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      16, 16, 16, 16,
647abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
648abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 8
649abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
650abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
651abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT32,
652abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT32",
653abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
654abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
655abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      32, 32, 32, 32,
656abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
657abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 16
658abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
659abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
660abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /* unnormalized unsigned int formats */
661abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
662abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT8,
663abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT8",
664abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
665abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
666abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      8, 8, 8, 8,
667abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
668abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 4
669abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
670abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
671abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT16,
672abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT16",
673abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
674abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
675abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      16, 16, 16, 16,
676abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
677abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 8
678abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
679abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
680abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT32,
681abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT32",
682abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
683abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
684abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      32, 32, 32, 32,
685abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
686abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 16
687abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
688abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
689abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
690813870fd9588de101f68728507cff726d7513695Brian Paul   {
691813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_DUDV8,
692bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_DUDV8",
693813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DUDV_ATI,
694813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
695813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
696813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
697813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
698813870fd9588de101f68728507cff726d7513695Brian Paul   },
69984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
70084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 8 bits / channel */
70184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
70284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_R8,        /* Name */
70384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_R8",      /* StrName */
70484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,                      /* BaseFormat */
70584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,         /* DataType */
70684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 0, 0, 0,                   /* Red/Green/Blue/AlphaBits */
70784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,                /* Lum/Int/Index/Depth/StencilBits */
70884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 1                       /* BlockWidth/Height,Bytes */
70984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
71084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
71184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RG88,
71284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RG88",
71384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
71484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
71584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 0, 0,
71684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
71784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
71884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
71984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
72084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGBX8888,
72184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGBX8888",
72284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
72384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
72484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 8, 0,
72584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
72684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4                       /* 4 bpp, but no alpha */
72784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
728813870fd9588de101f68728507cff726d7513695Brian Paul   {
729813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888,
730bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888",
731813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
732813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
733813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
734813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
735813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
736813870fd9588de101f68728507cff726d7513695Brian Paul   },
737813870fd9588de101f68728507cff726d7513695Brian Paul   {
738813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888_REV,
739bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888_REV",
740813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
741813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
742813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
743813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
744813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
745813870fd9588de101f68728507cff726d7513695Brian Paul   },
74684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
74784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 16 bits / channel */
74884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
74984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_R_16,
75084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_R_16",
75184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
75284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
75384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 0, 0, 0,
75484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
75584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
75684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
75784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
75884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RG_16,
75984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RG_16",
76084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
76184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
76284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 0, 0,
76384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
76484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4
76584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
76684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
76784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGB_16,
76884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGB_16",
76984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
77084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
77184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 16, 0,
77284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
77384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 6
77484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
775c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul   {
776c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      MESA_FORMAT_SIGNED_RGBA_16,
777bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA_16",
778c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_RGBA,
779c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_SIGNED_NORMALIZED,
780c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      16, 16, 16, 16,
781c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      0, 0, 0, 0, 0,
782c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      1, 1, 8
78317e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   },
78417e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   {
78517e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      MESA_FORMAT_RGBA_16,
78617e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      "MESA_FORMAT_RGBA_16",
78717e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_RGBA,
78817e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_UNSIGNED_NORMALIZED,
78917e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      16, 16, 16, 16,
79017e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      0, 0, 0, 0, 0,
79117e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      1, 1, 8
792c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul   }
793813870fd9588de101f68728507cff726d7513695Brian Paul};
794813870fd9588de101f68728507cff726d7513695Brian Paul
795813870fd9588de101f68728507cff726d7513695Brian Paul
796813870fd9588de101f68728507cff726d7513695Brian Paul
797813870fd9588de101f68728507cff726d7513695Brian Paulstatic const struct gl_format_info *
798813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_info(gl_format format)
799813870fd9588de101f68728507cff726d7513695Brian Paul{
800813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = &format_info[format];
801813870fd9588de101f68728507cff726d7513695Brian Paul   assert(info->Name == format);
802813870fd9588de101f68728507cff726d7513695Brian Paul   return info;
803813870fd9588de101f68728507cff726d7513695Brian Paul}
804813870fd9588de101f68728507cff726d7513695Brian Paul
805813870fd9588de101f68728507cff726d7513695Brian Paul
806bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul/** Return string name of format (for debugging) */
807bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paulconst char *
808bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul_mesa_get_format_name(gl_format format)
809bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul{
810bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
811bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   ASSERT(info->BytesPerBlock);
812bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   return info->StrName;
813bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul}
814bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
815bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
816bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
817eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
818eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bytes needed to store a block of pixels in the given format.
819eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Normally, a block is 1x1 (a single pixel).  But for compressed formats
820eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * a block may be 4x4 or 8x4, etc.
821eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
822813870fd9588de101f68728507cff726d7513695Brian PaulGLuint
823813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_bytes(gl_format format)
824813870fd9588de101f68728507cff726d7513695Brian Paul{
825813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
826813870fd9588de101f68728507cff726d7513695Brian Paul   ASSERT(info->BytesPerBlock);
827813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BytesPerBlock;
828813870fd9588de101f68728507cff726d7513695Brian Paul}
829813870fd9588de101f68728507cff726d7513695Brian Paul
830813870fd9588de101f68728507cff726d7513695Brian Paul
831eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
832eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bits per component for the given format.
833eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param format  one of MESA_FORMAT_x
834eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param pname  the component, such as GL_RED_BITS, GL_TEXTURE_BLUE_BITS, etc.
835eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
8365978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLint
8375978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_bits(gl_format format, GLenum pname)
8385978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
8395978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
8405978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
8415978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   switch (pname) {
842edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RED_BITS:
8435978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_RED_SIZE:
844edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_RED_SIZE_EXT:
845edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
8465978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->RedBits;
847edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_GREEN_BITS:
8485978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_GREEN_SIZE:
849edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_GREEN_SIZE_EXT:
850edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
8515978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->GreenBits;
852edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_BLUE_BITS:
8535978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_BLUE_SIZE:
854edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_BLUE_SIZE_EXT:
855edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
8565978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->BlueBits;
857edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_ALPHA_BITS:
8585978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_ALPHA_SIZE:
859edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
860edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
8615978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->AlphaBits;
8625978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INTENSITY_SIZE:
8635978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IntensityBits;
8645978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_LUMINANCE_SIZE:
8655978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->LuminanceBits;
866edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_INDEX_BITS:
8675978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INDEX_SIZE_EXT:
8685978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IndexBits;
869edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_DEPTH_BITS:
8705978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_DEPTH_SIZE_ARB:
871edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
872edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
8735978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->DepthBits;
874edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_STENCIL_BITS:
8755978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_STENCIL_SIZE_EXT:
876edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
877edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
8785978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->StencilBits;
8795978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   default:
8805978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      _mesa_problem(NULL, "bad pname in _mesa_get_format_bits()");
8815978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return 0;
8825978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   }
8835978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
8845978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
8855978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
886eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
887eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the data type (or more specifically, the data representation)
888eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * for the given format.
889eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * The return value will be one of:
890eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_NORMALIZED = unsigned int representing [0,1]
891eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_SIGNED_NORMALIZED = signed int representing [-1, 1]
892eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_INT = an ordinary unsigned integer
893eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_FLOAT = an ordinary float
894eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
8955978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLenum
8965978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_datatype(gl_format format)
8975978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
8985978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
8995978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   return info->DataType;
9005978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
9015978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
9025978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
903eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
904eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the basic format for the given type.  The result will be
905eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * one of GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA,
906eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_INTENSITY, GL_YCBCR_MESA, GL_COLOR_INDEX, GL_DEPTH_COMPONENT,
907eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
908eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
909813870fd9588de101f68728507cff726d7513695Brian PaulGLenum
910813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_base_format(gl_format format)
911813870fd9588de101f68728507cff726d7513695Brian Paul{
912813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
913813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BaseFormat;
914813870fd9588de101f68728507cff726d7513695Brian Paul}
915813870fd9588de101f68728507cff726d7513695Brian Paul
916813870fd9588de101f68728507cff726d7513695Brian Paul
9177b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul/**
9187b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * Return the block size (in pixels) for the given format.  Normally
9197b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * the block size is 1x1.  But compressed formats will have block sizes
9207b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * of 4x4 or 8x4 pixels, etc.
9217b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bw  returns block width in pixels
9227b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bh  returns block height in pixels
9237b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul */
9247b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paulvoid
9257b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh)
9267b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul{
9277b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
9287b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bw = info->BlockWidth;
9297b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bh = info->BlockHeight;
9307b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul}
9317b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
9327b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
933eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/** Is the given format a compressed format? */
934813870fd9588de101f68728507cff726d7513695Brian PaulGLboolean
935813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_is_format_compressed(gl_format format)
936813870fd9588de101f68728507cff726d7513695Brian Paul{
937813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
938813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BlockWidth > 1 || info->BlockHeight > 1;
939813870fd9588de101f68728507cff726d7513695Brian Paul}
940813870fd9588de101f68728507cff726d7513695Brian Paul
941813870fd9588de101f68728507cff726d7513695Brian Paul
942813870fd9588de101f68728507cff726d7513695Brian Paul/**
943e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler * Determine if the given format represents a packed depth/stencil buffer.
944e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler */
945e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick BowlerGLboolean
946e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler_mesa_is_format_packed_depth_stencil(gl_format format)
947e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler{
948f57df7f2130dfe20a6f7e75cfc1f5d4e1717d098Nick Bowler   const struct gl_format_info *info = _mesa_get_format_info(format);
949e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
950f57df7f2130dfe20a6f7e75cfc1f5d4e1717d098Nick Bowler   return info->BaseFormat == GL_DEPTH_STENCIL;
951e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler}
952e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
953e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
954e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler/**
955f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * Return color encoding for given format.
956f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * \return GL_LINEAR or GL_SRGB
957f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul */
958f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian PaulGLenum
959f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul_mesa_get_format_color_encoding(gl_format format)
960f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul{
961f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   /* XXX this info should be encoded in gl_format_info */
962f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   switch (format) {
963f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB8:
964f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA8:
965f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SARGB8:
966f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SL8:
967f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SLA8:
968f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB_DXT1:
969f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT1:
970f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT3:
971f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT5:
972f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_SRGB;
973f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   default:
974f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_LINEAR;
975f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   }
976f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul}
977f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
978f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
979f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul/**
9801c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * Return number of bytes needed to store an image of the given size
9811c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * in the given format.
9821c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul */
9831c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian PaulGLuint
9841c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul_mesa_format_image_size(gl_format format, GLsizei width,
9851c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul                        GLsizei height, GLsizei depth)
9861c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul{
9871c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
988040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
9891c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
9901c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      /* compressed format */
9911c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint bw = info->BlockWidth, bh = info->BlockHeight;
9921c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint wblocks = (width + bw - 1) / bw;
9931c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint hblocks = (height + bh - 1) / bh;
994040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint sz = wblocks * hblocks * info->BytesPerBlock;
9951c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
9961c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
9971c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   else {
9981c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      /* non-compressed */
9991c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint sz = width * height * depth * info->BytesPerBlock;
10001c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
10011c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
10021c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul}
10031c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
10041c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
10051c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
1006040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian PaulGLint
1007040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul_mesa_format_row_stride(gl_format format, GLsizei width)
1008040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul{
1009040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1010040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
1011040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
1012040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      /* compressed format */
1013040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint bw = info->BlockWidth;
1014040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint wblocks = (width + bw - 1) / bw;
1015040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = wblocks * info->BytesPerBlock;
1016040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
1017040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
1018040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   else {
1019040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = width * info->BytesPerBlock;
1020040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
1021040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
1022040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul}
1023040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
1024040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
10251c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
10261c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul/**
1027813870fd9588de101f68728507cff726d7513695Brian Paul * Do sanity checking of the format info table.
1028813870fd9588de101f68728507cff726d7513695Brian Paul */
1029813870fd9588de101f68728507cff726d7513695Brian Paulvoid
1030813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_test_formats(void)
1031813870fd9588de101f68728507cff726d7513695Brian Paul{
1032813870fd9588de101f68728507cff726d7513695Brian Paul   GLuint i;
1033813870fd9588de101f68728507cff726d7513695Brian Paul
1034813870fd9588de101f68728507cff726d7513695Brian Paul   assert(Elements(format_info) == MESA_FORMAT_COUNT);
1035813870fd9588de101f68728507cff726d7513695Brian Paul
1036813870fd9588de101f68728507cff726d7513695Brian Paul   for (i = 0; i < MESA_FORMAT_COUNT; i++) {
1037813870fd9588de101f68728507cff726d7513695Brian Paul      const struct gl_format_info *info = _mesa_get_format_info(i);
1038813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info);
1039813870fd9588de101f68728507cff726d7513695Brian Paul
1040813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->Name == i);
1041813870fd9588de101f68728507cff726d7513695Brian Paul
1042e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      if (info->Name == MESA_FORMAT_NONE)
1043e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul         continue;
1044e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul
1045813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BlockWidth == 1 && info->BlockHeight == 1) {
1046813870fd9588de101f68728507cff726d7513695Brian Paul         if (info->RedBits > 0) {
1047813870fd9588de101f68728507cff726d7513695Brian Paul            GLuint t = info->RedBits + info->GreenBits
1048813870fd9588de101f68728507cff726d7513695Brian Paul               + info->BlueBits + info->AlphaBits;
1049813870fd9588de101f68728507cff726d7513695Brian Paul            assert(t / 8 == info->BytesPerBlock);
10506e0584932b3e556a0aecd2ca36f5ae41dc40a919Vinson Lee            (void) t;
1051813870fd9588de101f68728507cff726d7513695Brian Paul         }
1052813870fd9588de101f68728507cff726d7513695Brian Paul      }
1053813870fd9588de101f68728507cff726d7513695Brian Paul
1054813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->DataType == GL_UNSIGNED_NORMALIZED ||
1055813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_SIGNED_NORMALIZED ||
1056813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_UNSIGNED_INT ||
1057813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_FLOAT);
1058813870fd9588de101f68728507cff726d7513695Brian Paul
1059813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BaseFormat == GL_RGB) {
1060813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
1061813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
1062813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
1063813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1064813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1065813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1066813870fd9588de101f68728507cff726d7513695Brian Paul      }
1067813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_RGBA) {
1068813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
1069813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
1070813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
1071813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits > 0);
1072813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1073813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1074813870fd9588de101f68728507cff726d7513695Brian Paul      }
1075813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_LUMINANCE) {
1076813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1077813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1078813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1079813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1080813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits > 0);
1081813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1082813870fd9588de101f68728507cff726d7513695Brian Paul      }
1083813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_INTENSITY) {
1084813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1085813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1086813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1087813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1088813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1089813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits > 0);
1090813870fd9588de101f68728507cff726d7513695Brian Paul      }
1091813870fd9588de101f68728507cff726d7513695Brian Paul
1092813870fd9588de101f68728507cff726d7513695Brian Paul   }
1093813870fd9588de101f68728507cff726d7513695Brian Paul}
1094813870fd9588de101f68728507cff726d7513695Brian Paul
1095813870fd9588de101f68728507cff726d7513695Brian Paul
1096019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1097813870fd9588de101f68728507cff726d7513695Brian Paul/**
1098019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Return datatype and number of components per texel for the given gl_format.
1099019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Only used for mipmap generation code.
1100813870fd9588de101f68728507cff726d7513695Brian Paul */
1101813870fd9588de101f68728507cff726d7513695Brian Paulvoid
1102019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul_mesa_format_to_type_and_comps(gl_format format,
1103019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul                               GLenum *datatype, GLuint *comps)
1104813870fd9588de101f68728507cff726d7513695Brian Paul{
1105019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   switch (format) {
1106019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888:
1107019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888_REV:
1108019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888:
1109019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888_REV:
111074d61d03b54d72217d463c248468cdcd09320efcBrian Paul   case MESA_FORMAT_XRGB8888:
1111019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1112019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1113019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1114019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB888:
1115019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_BGR888:
1116019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1117019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1118019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1119019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565:
1120019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565_REV:
1121019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_5_6_5;
1122019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1123019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1124019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1125019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444:
1126019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444_REV:
1127019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
1128019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1129019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1130019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1131019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555:
1132019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555_REV:
1133019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
1134019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1135019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1136019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1137019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88:
1138019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88_REV:
1139019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1140019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1141019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1142eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
1143eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616:
1144eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616_REV:
1145eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *datatype = GL_UNSIGNED_SHORT;
1146eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *comps = 2;
1147eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      return;
1148eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
1149019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB332:
1150019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE_3_3_2;
1151019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1152019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1153019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1154019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_A8:
1155019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_L8:
1156019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_I8:
1157019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_CI8:
1158813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1159813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1160019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1161019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1162019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR:
1163019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR_REV:
1164019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT;
1165813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1166019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1167019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1168019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z24_S8:
1169019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1170019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1171019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1172019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1173019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_S8_Z24:
1174019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1175019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1176019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1177019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1178019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z16:
1179813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_SHORT;
1180019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1181019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1182019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1183e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   case MESA_FORMAT_X8_Z24:
1184e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *datatype = GL_UNSIGNED_INT;
1185e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *comps = 1;
1186e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      return;
1187e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul
1188c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   case MESA_FORMAT_Z24_X8:
1189c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *datatype = GL_UNSIGNED_INT;
1190c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *comps = 1;
1191c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      return;
1192c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca
1193019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z32:
1194019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1195019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1196019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1197019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1198019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_DUDV8:
1199019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_BYTE;
1200813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1201019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1202019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1203019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888:
1204019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888_REV:
1205813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_BYTE;
1206019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1207019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1208880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul
1209880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_R_16:
1210880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1211880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 1;
1212880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1213880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_RG_16:
1214880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1215880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 2;
1216880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1217880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_RGB_16:
1218880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1219880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 3;
1220880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1221c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul   case MESA_FORMAT_SIGNED_RGBA_16:
1222c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *datatype = GL_SHORT;
1223c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *comps = 4;
1224c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      return;
1225019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1226019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1227019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB8:
1228019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1229019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1230019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1231019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA8:
1232019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SARGB8:
1233019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1234019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1235019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1236019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SL8:
1237019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1238813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1239019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1240019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SLA8:
1241019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1242019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1243019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1244019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1245019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1246019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_fxt1
1247019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FXT1:
1248019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FXT1:
1249019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1250019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_s3tc
1251019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_DXT1:
1252019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT1:
1253019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT3:
1254019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT5:
1255019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1256019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB_DXT1:
1257019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT1:
1258019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT3:
1259019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT5:
1260019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1261019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      /* XXX generate error instead? */
1262813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1263019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 0;
1264019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1265019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1266019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1267019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT32:
1268019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1269019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1270019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1271019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT16:
1272019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1273019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1274019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1275019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT32:
1276019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1277019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1278019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1279019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT16:
1280019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1281019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1282019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1283019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
1284019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1285019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1286019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1287019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
1288019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1289019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1290019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1291019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT32:
1292019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT32:
1293019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT32:
1294019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1295019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1296019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1297019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT16:
1298019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT16:
1299019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT16:
1300019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1301019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1302019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1303019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1304abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT8:
1305abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_BYTE;
1306abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1307abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1308abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT16:
1309abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_SHORT;
1310abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1311abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1312abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT32:
1313abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_INT;
1314abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1315abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1316abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
1317abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /**
1318abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    * \name Non-normalized unsigned integer formats.
1319abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    */
1320abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT8:
1321abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1322abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1323abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1324abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT16:
1325abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_SHORT;
1326abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1327abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1328abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT32:
1329abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_INT;
1330abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1331abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1332abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
1333abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
1334019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   default:
1335019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      _mesa_problem(NULL, "bad format in _mesa_format_to_type_and_comps");
1336019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = 0;
1337019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1338813870fd9588de101f68728507cff726d7513695Brian Paul   }
1339813870fd9588de101f68728507cff726d7513695Brian Paul}
1340