formats.c revision 5d1387b2da3626326410804026f8b92f1a121fdc
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"
293a6f9d0f47861b1c618366d679ad8ddd9a06b323Brian Paul#include "mfeatures.h"
30813870fd9588de101f68728507cff726d7513695Brian Paul
31813870fd9588de101f68728507cff726d7513695Brian Paul
32813870fd9588de101f68728507cff726d7513695Brian Paul/**
33be0765cd6ec47cf068775197f312a1123e044566Brian Paul * Information about texture formats.
34be0765cd6ec47cf068775197f312a1123e044566Brian Paul */
35be0765cd6ec47cf068775197f312a1123e044566Brian Paulstruct gl_format_info
36be0765cd6ec47cf068775197f312a1123e044566Brian Paul{
37be0765cd6ec47cf068775197f312a1123e044566Brian Paul   gl_format Name;
38be0765cd6ec47cf068775197f312a1123e044566Brian Paul
39bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   /** text name for debugging */
40bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   const char *StrName;
41bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
42be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
43be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * Base format is one of GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE,
44eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul    * GL_LUMINANCE_ALPHA, GL_INTENSITY, GL_YCBCR_MESA, GL_COLOR_INDEX,
45eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul    * GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
46be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
47be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLenum BaseFormat;
48be0765cd6ec47cf068775197f312a1123e044566Brian Paul
49be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
50be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * Logical data type: one of  GL_UNSIGNED_NORMALIZED, GL_SIGNED_NORMALED,
51abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    * GL_UNSIGNED_INT, GL_INT, GL_FLOAT.
52be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
53be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLenum DataType;
54be0765cd6ec47cf068775197f312a1123e044566Brian Paul
55be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte RedBits;
56be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte GreenBits;
57be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BlueBits;
58be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte AlphaBits;
59be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte LuminanceBits;
60be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte IntensityBits;
61be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte IndexBits;
62be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte DepthBits;
63be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte StencilBits;
64be0765cd6ec47cf068775197f312a1123e044566Brian Paul
65be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
66be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * To describe compressed formats.  If not compressed, Width=Height=1.
67be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
68be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BlockWidth, BlockHeight;
69be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BytesPerBlock;
70be0765cd6ec47cf068775197f312a1123e044566Brian Paul};
71be0765cd6ec47cf068775197f312a1123e044566Brian Paul
72be0765cd6ec47cf068775197f312a1123e044566Brian Paul
73be0765cd6ec47cf068775197f312a1123e044566Brian Paul/**
74813870fd9588de101f68728507cff726d7513695Brian Paul * Info about each format.
75813870fd9588de101f68728507cff726d7513695Brian Paul * These must be in the same order as the MESA_FORMAT_* enums so that
76813870fd9588de101f68728507cff726d7513695Brian Paul * we can do lookups without searching.
77813870fd9588de101f68728507cff726d7513695Brian Paul */
78813870fd9588de101f68728507cff726d7513695Brian Paulstatic struct gl_format_info format_info[MESA_FORMAT_COUNT] =
79813870fd9588de101f68728507cff726d7513695Brian Paul{
80813870fd9588de101f68728507cff726d7513695Brian Paul   {
81e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      MESA_FORMAT_NONE,            /* Name */
82bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_NONE",          /* StrName */
83e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* BaseFormat */
84e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* DataType */
85e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
86e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
87e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0                      /* BlockWidth/Height,Bytes */
88e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   },
89e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   {
90813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888,        /* Name */
91bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA8888",      /* StrName */
92813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
93813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
94813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
95813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
96813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
97813870fd9588de101f68728507cff726d7513695Brian Paul   },
98813870fd9588de101f68728507cff726d7513695Brian Paul   {
99813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888_REV,    /* Name */
100bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA8888_REV",  /* StrName */
101813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
102813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
103813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
104813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
105813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
106813870fd9588de101f68728507cff726d7513695Brian Paul   },
107813870fd9588de101f68728507cff726d7513695Brian Paul   {
108813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888,        /* Name */
109bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB8888",      /* StrName */
110813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
111813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
112813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
113813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
114813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
115813870fd9588de101f68728507cff726d7513695Brian Paul   },
116813870fd9588de101f68728507cff726d7513695Brian Paul   {
117813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888_REV,    /* Name */
118bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB8888_REV",  /* StrName */
119813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
120813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
121813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
122813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
123813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
124813870fd9588de101f68728507cff726d7513695Brian Paul   },
125813870fd9588de101f68728507cff726d7513695Brian Paul   {
12674d61d03b54d72217d463c248468cdcd09320efcBrian Paul      MESA_FORMAT_XRGB8888,        /* Name */
127bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_XRGB8888",      /* StrName */
12874d61d03b54d72217d463c248468cdcd09320efcBrian Paul      GL_RGB,                      /* BaseFormat */
12974d61d03b54d72217d463c248468cdcd09320efcBrian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
13074d61d03b54d72217d463c248468cdcd09320efcBrian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
13174d61d03b54d72217d463c248468cdcd09320efcBrian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
13274d61d03b54d72217d463c248468cdcd09320efcBrian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
13374d61d03b54d72217d463c248468cdcd09320efcBrian Paul   },
13474d61d03b54d72217d463c248468cdcd09320efcBrian Paul   {
1352d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      MESA_FORMAT_XRGB8888_REV,    /* Name */
1362d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      "MESA_FORMAT_XRGB8888_REV",  /* StrName */
1372d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      GL_RGB,                      /* BaseFormat */
1382d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      GL_UNSIGNED_NORMALIZED,      /* DataType */
1392d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
1402d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
1412d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      1, 1, 4                      /* BlockWidth/Height,Bytes */
1422d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer   },
1432d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer   {
144813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB888,          /* Name */
145bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB888",        /* StrName */
146813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
147813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
148813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
149813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
150813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
151813870fd9588de101f68728507cff726d7513695Brian Paul   },
152813870fd9588de101f68728507cff726d7513695Brian Paul   {
153813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_BGR888,          /* Name */
154bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_BGR888",        /* StrName */
155813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
156813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
157813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
158813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
159813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
160813870fd9588de101f68728507cff726d7513695Brian Paul   },
161813870fd9588de101f68728507cff726d7513695Brian Paul   {
162813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565,          /* Name */
163bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB565",        /* StrName */
164813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
165813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
166813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
167813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
168813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
169813870fd9588de101f68728507cff726d7513695Brian Paul   },
170813870fd9588de101f68728507cff726d7513695Brian Paul   {
171813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565_REV,      /* Name */
172bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB565_REV",    /* StrName */
173813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
174813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
175813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
176813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
177813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
178813870fd9588de101f68728507cff726d7513695Brian Paul   },
179813870fd9588de101f68728507cff726d7513695Brian Paul   {
180813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444,        /* Name */
181bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB4444",      /* StrName */
182813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
183813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
184813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
185813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
186813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
187813870fd9588de101f68728507cff726d7513695Brian Paul   },
188813870fd9588de101f68728507cff726d7513695Brian Paul   {
189813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444_REV,    /* Name */
190bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB4444_REV",  /* StrName */
191813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
192813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
193813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
194813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
195813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
196813870fd9588de101f68728507cff726d7513695Brian Paul   },
197813870fd9588de101f68728507cff726d7513695Brian Paul   {
198813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA5551,        /* Name */
199bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA5551",      /* StrName */
200813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
201813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
202813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
203813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
204813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
205813870fd9588de101f68728507cff726d7513695Brian Paul   },
206813870fd9588de101f68728507cff726d7513695Brian Paul   {
207813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555,        /* Name */
208bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB1555",      /* StrName */
209813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
210813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
211813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
212813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
213813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
214813870fd9588de101f68728507cff726d7513695Brian Paul   },
215813870fd9588de101f68728507cff726d7513695Brian Paul   {
216813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555_REV,    /* Name */
217bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB1555_REV",  /* StrName */
218813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
219813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
220813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
221813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
222813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
223813870fd9588de101f68728507cff726d7513695Brian Paul   },
224813870fd9588de101f68728507cff726d7513695Brian Paul   {
225813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88,            /* Name */
226bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_AL88",          /* StrName */
227813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
228813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
229813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
230813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
231813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
232813870fd9588de101f68728507cff726d7513695Brian Paul   },
233813870fd9588de101f68728507cff726d7513695Brian Paul   {
234813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88_REV,        /* Name */
235bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_AL88_REV",      /* StrName */
236813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
237813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
238813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
239813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
240813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
241813870fd9588de101f68728507cff726d7513695Brian Paul   },
242813870fd9588de101f68728507cff726d7513695Brian Paul   {
243eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      MESA_FORMAT_AL1616,          /* Name */
244eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      "MESA_FORMAT_AL1616",        /* StrName */
245eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_LUMINANCE_ALPHA,          /* BaseFormat */
246eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_UNSIGNED_NORMALIZED,      /* DataType */
247eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
248eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
249eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      1, 1, 4                      /* BlockWidth/Height,Bytes */
250eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   },
251eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   {
252eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      MESA_FORMAT_AL1616_REV,      /* Name */
253eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      "MESA_FORMAT_AL1616_REV",    /* StrName */
254eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_LUMINANCE_ALPHA,          /* BaseFormat */
255eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_UNSIGNED_NORMALIZED,      /* DataType */
256eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
257eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
258eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      1, 1, 4                      /* BlockWidth/Height,Bytes */
259eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   },
260eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   {
261813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB332,          /* Name */
262bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB332",        /* StrName */
263813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
264813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
265813870fd9588de101f68728507cff726d7513695Brian Paul      3, 3, 2, 0,                  /* Red/Green/Blue/AlphaBits */
266813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
267813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
268813870fd9588de101f68728507cff726d7513695Brian Paul   },
269813870fd9588de101f68728507cff726d7513695Brian Paul   {
270813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_A8,              /* Name */
271bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_A8",            /* StrName */
272813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,                    /* BaseFormat */
273813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
274813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
275813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
276813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
277813870fd9588de101f68728507cff726d7513695Brian Paul   },
278813870fd9588de101f68728507cff726d7513695Brian Paul   {
279813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_L8,              /* Name */
280bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_L8",            /* StrName */
281813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE,                /* BaseFormat */
282813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
283813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
284813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
285813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
286813870fd9588de101f68728507cff726d7513695Brian Paul   },
287813870fd9588de101f68728507cff726d7513695Brian Paul   {
288813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_I8,              /* Name */
289bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_I8",            /* StrName */
290813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,                /* BaseFormat */
291813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
292813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
293813870fd9588de101f68728507cff726d7513695Brian Paul      0, 8, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
294813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
295813870fd9588de101f68728507cff726d7513695Brian Paul   },
296813870fd9588de101f68728507cff726d7513695Brian Paul   {
297813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_CI8,             /* Name */
298bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_CI8",           /* StrName */
299813870fd9588de101f68728507cff726d7513695Brian Paul      GL_COLOR_INDEX,              /* BaseFormat */
300813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
301813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
302813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 8, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
303813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
304813870fd9588de101f68728507cff726d7513695Brian Paul   },
305813870fd9588de101f68728507cff726d7513695Brian Paul   {
306813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR,           /* Name */
307bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_YCBCR",         /* StrName */
308813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
309813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
310813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
311813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
312813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
313813870fd9588de101f68728507cff726d7513695Brian Paul   },
314813870fd9588de101f68728507cff726d7513695Brian Paul   {
315813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR_REV,       /* Name */
316bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_YCBCR_REV",     /* StrName */
317813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
318813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
319813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
320813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
321813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
322813870fd9588de101f68728507cff726d7513695Brian Paul   },
323813870fd9588de101f68728507cff726d7513695Brian Paul   {
3245d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_R8,
3255d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_R8",
3265d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RED,
3275d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3285d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      8, 0, 0, 0,
3295d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3305d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 1
3315d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3325d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3335d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG88,
3345d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG88",
3355d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
3365d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3375d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      8, 8, 0, 0,
3385d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3395d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 2
3405d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3415d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3425d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG88_REV,
3435d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG88_REV",
3445d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
3455d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3465d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      8, 8, 0, 0,
3475d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3485d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 2
3495d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3505d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3515d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_R16,
3525d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_R16",
3535d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RED,
3545d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3555d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      16, 0, 0, 0,
3565d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3575d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 2
3585d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3595d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3605d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG1616,
3615d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG1616",
3625d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
3635d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3645d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      16, 16, 0, 0,
3655d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3665d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 4
3675d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3685d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3695d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG1616_REV,
3705d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG1616_REV",
3715d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
3725d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3735d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      16, 16, 0, 0,
3745d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3755d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 4
3765d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3775d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
378813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z24_S8,          /* Name */
379bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z24_S8",        /* StrName */
380813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
381813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
382813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
383813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
384813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
385813870fd9588de101f68728507cff726d7513695Brian Paul   },
386813870fd9588de101f68728507cff726d7513695Brian Paul   {
387813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8_Z24,          /* Name */
388bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8_Z24",        /* StrName */
389813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
390813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
391813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
392813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
393813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
394813870fd9588de101f68728507cff726d7513695Brian Paul   },
395813870fd9588de101f68728507cff726d7513695Brian Paul   {
396813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z16,             /* Name */
397bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z16",           /* StrName */
398813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
399813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
400813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
401813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16, 0,              /* Lum/Int/Index/Depth/StencilBits */
402813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
403813870fd9588de101f68728507cff726d7513695Brian Paul   },
404813870fd9588de101f68728507cff726d7513695Brian Paul   {
405e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      MESA_FORMAT_X8_Z24,          /* Name */
406bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_X8_Z24",        /* StrName */
407e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
408e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_UNSIGNED_INT,             /* DataType */
409e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
410e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
411e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
412e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   },
413e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   {
414c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      MESA_FORMAT_Z24_X8,          /* Name */
415c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      "MESA_FORMAT_Z24_X8",        /* StrName */
416c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_DEPTH_COMPONENT,          /* BaseFormat */
417c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_UNSIGNED_INT,             /* DataType */
418c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
419c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
420c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      1, 1, 4                      /* BlockWidth/Height,Bytes */
421c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   },
422c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   {
423813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z32,             /* Name */
424bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z32",           /* StrName */
425813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
426813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
427813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
428813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
429813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
430813870fd9588de101f68728507cff726d7513695Brian Paul   },
431813870fd9588de101f68728507cff726d7513695Brian Paul   {
432813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8,              /* Name */
433bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8",            /* StrName */
434813870fd9588de101f68728507cff726d7513695Brian Paul      GL_STENCIL_INDEX,            /* BaseFormat */
435813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
436813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
437813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
438813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
439813870fd9588de101f68728507cff726d7513695Brian Paul   },
440813870fd9588de101f68728507cff726d7513695Brian Paul   {
441813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB8,
442bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB8",
443813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
444813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
445813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,
446813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
447813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3
448813870fd9588de101f68728507cff726d7513695Brian Paul   },
449813870fd9588de101f68728507cff726d7513695Brian Paul   {
450813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA8,
451bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA8",
452813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
453813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
454813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
455813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
456813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
457813870fd9588de101f68728507cff726d7513695Brian Paul   },
458813870fd9588de101f68728507cff726d7513695Brian Paul   {
459813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SARGB8,
460bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SARGB8",
461813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
462813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
463813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
464813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
465813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
466813870fd9588de101f68728507cff726d7513695Brian Paul   },
467813870fd9588de101f68728507cff726d7513695Brian Paul   {
468813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SL8,
469bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SL8",
47071cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      GL_LUMINANCE,
471813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
47271cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      0, 0, 0, 0,
473813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
47471cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      1, 1, 1
475813870fd9588de101f68728507cff726d7513695Brian Paul   },
476813870fd9588de101f68728507cff726d7513695Brian Paul   {
477813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SLA8,
478bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SLA8",
479813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
480813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
481813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,
482813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
483813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
484813870fd9588de101f68728507cff726d7513695Brian Paul   },
485813870fd9588de101f68728507cff726d7513695Brian Paul   {
486813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB_DXT1,       /* Name */
487bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB_DXT1",     /* StrName */
488813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
489813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
490813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
491813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
492813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
493813870fd9588de101f68728507cff726d7513695Brian Paul   },
494813870fd9588de101f68728507cff726d7513695Brian Paul   {
495813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT1,
496bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT1",
497813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
498813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
499813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
500813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
501813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
502813870fd9588de101f68728507cff726d7513695Brian Paul   },
503813870fd9588de101f68728507cff726d7513695Brian Paul   {
504813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT3,
505bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT3",
506813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
507813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
508813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
509813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
510813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
511813870fd9588de101f68728507cff726d7513695Brian Paul   },
512813870fd9588de101f68728507cff726d7513695Brian Paul   {
513813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT5,
514bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT5",
515813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
516813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
517813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
518813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
519813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
520813870fd9588de101f68728507cff726d7513695Brian Paul   },
521813870fd9588de101f68728507cff726d7513695Brian Paul
522813870fd9588de101f68728507cff726d7513695Brian Paul   {
523813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FXT1,
524bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FXT1",
525813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
526813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
527c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/BlueBits */
528813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
529813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
530813870fd9588de101f68728507cff726d7513695Brian Paul   },
531813870fd9588de101f68728507cff726d7513695Brian Paul   {
532813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FXT1,
533bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FXT1",
534813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
535813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
536c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 1,                  /* approx Red/Green/Blue/AlphaBits */
537813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
538813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
539813870fd9588de101f68728507cff726d7513695Brian Paul   },
540813870fd9588de101f68728507cff726d7513695Brian Paul
541813870fd9588de101f68728507cff726d7513695Brian Paul   {
542813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_DXT1,        /* Name */
543bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_DXT1",      /* StrName */
544813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
545813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
546813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
547813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
548813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
549813870fd9588de101f68728507cff726d7513695Brian Paul   },
550813870fd9588de101f68728507cff726d7513695Brian Paul   {
551813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT1,
552bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT1",
553813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
554813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
555813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
556813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
557813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
558813870fd9588de101f68728507cff726d7513695Brian Paul   },
559813870fd9588de101f68728507cff726d7513695Brian Paul   {
560813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT3,
561bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT3",
562813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
563813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
564813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
565813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
566813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
567813870fd9588de101f68728507cff726d7513695Brian Paul   },
568813870fd9588de101f68728507cff726d7513695Brian Paul   {
569813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT5,
570bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT5",
571813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
572813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
573813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
574813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
575813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
576813870fd9588de101f68728507cff726d7513695Brian Paul   },
577813870fd9588de101f68728507cff726d7513695Brian Paul   {
578813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT32,
579bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT32",
580813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
581813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
582813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 32,
583813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
584813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 16
585813870fd9588de101f68728507cff726d7513695Brian Paul   },
586813870fd9588de101f68728507cff726d7513695Brian Paul   {
587813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT16,
588bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT16",
589813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
590813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
591813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 16,
592813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
593813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
594813870fd9588de101f68728507cff726d7513695Brian Paul   },
595813870fd9588de101f68728507cff726d7513695Brian Paul   {
596813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT32,
597bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT32",
598813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
599813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
600813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 0,
601813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
602813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 12
603813870fd9588de101f68728507cff726d7513695Brian Paul   },
604813870fd9588de101f68728507cff726d7513695Brian Paul   {
605813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT16,
606bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT16",
607813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
608813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
609813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 0,
610813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
611813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 6
612813870fd9588de101f68728507cff726d7513695Brian Paul   },
613813870fd9588de101f68728507cff726d7513695Brian Paul   {
614813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT32,
615bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT32",
616813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
617813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
618813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
619813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
620813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
621813870fd9588de101f68728507cff726d7513695Brian Paul   },
622813870fd9588de101f68728507cff726d7513695Brian Paul   {
623813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT16,
624bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT16",
625813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
626813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
627813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
628813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
629813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
630813870fd9588de101f68728507cff726d7513695Brian Paul   },
631813870fd9588de101f68728507cff726d7513695Brian Paul   {
632813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT32,
633bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT32",
634813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
635813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
636813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
637813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
638813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
639813870fd9588de101f68728507cff726d7513695Brian Paul   },
640813870fd9588de101f68728507cff726d7513695Brian Paul   {
641813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT16,
642bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT16",
643813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
644813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
645813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
646813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
647813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
648813870fd9588de101f68728507cff726d7513695Brian Paul   },
649813870fd9588de101f68728507cff726d7513695Brian Paul   {
650813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
651bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32",
652813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
653813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
654813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
655813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
656813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
657813870fd9588de101f68728507cff726d7513695Brian Paul   },
658813870fd9588de101f68728507cff726d7513695Brian Paul   {
659813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
660bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16",
661813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
662813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
663813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
664813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
665813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
666813870fd9588de101f68728507cff726d7513695Brian Paul   },
667813870fd9588de101f68728507cff726d7513695Brian Paul   {
668813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT32,
669bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT32",
670813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
671813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
672813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
673813870fd9588de101f68728507cff726d7513695Brian Paul      0, 32, 0, 0, 0,
674813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
675813870fd9588de101f68728507cff726d7513695Brian Paul   },
676813870fd9588de101f68728507cff726d7513695Brian Paul   {
677813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT16,
678bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT16",
679813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
680813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
681813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
682813870fd9588de101f68728507cff726d7513695Brian Paul      0, 16, 0, 0, 0,
683813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
684813870fd9588de101f68728507cff726d7513695Brian Paul   },
685abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
686abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /* unnormalized signed int formats */
687abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
688abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT8,
689abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT8",
690abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
691abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
692abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      8, 8, 8, 8,
693abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
694abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 4
695abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
696abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
697abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT16,
698abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT16",
699abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
700abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
701abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      16, 16, 16, 16,
702abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
703abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 8
704abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
705abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
706abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT32,
707abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT32",
708abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
709abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
710abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      32, 32, 32, 32,
711abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
712abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 16
713abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
714abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
715abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /* unnormalized unsigned int formats */
716abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
717abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT8,
718abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT8",
719abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
720abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
721abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      8, 8, 8, 8,
722abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
723abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 4
724abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
725abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
726abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT16,
727abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT16",
728abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
729abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
730abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      16, 16, 16, 16,
731abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
732abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 8
733abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
734abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
735abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT32,
736abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT32",
737abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
738abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
739abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      32, 32, 32, 32,
740abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
741abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 16
742abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
743abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
744abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
745813870fd9588de101f68728507cff726d7513695Brian Paul   {
746813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_DUDV8,
747bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_DUDV8",
748813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DUDV_ATI,
749813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
750813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
751813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
752813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
753813870fd9588de101f68728507cff726d7513695Brian Paul   },
75484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
75584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 8 bits / channel */
75684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
75784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_R8,        /* Name */
75884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_R8",      /* StrName */
75984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,                      /* BaseFormat */
76084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,         /* DataType */
76184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 0, 0, 0,                   /* Red/Green/Blue/AlphaBits */
76284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,                /* Lum/Int/Index/Depth/StencilBits */
76384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 1                       /* BlockWidth/Height,Bytes */
76484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
76584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
76684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RG88,
76784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RG88",
76884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
76984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
77084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 0, 0,
77184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
77284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
77384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
77484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
77584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGBX8888,
77684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGBX8888",
77784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
77884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
77984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 8, 0,
78084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
78184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4                       /* 4 bpp, but no alpha */
78284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
783813870fd9588de101f68728507cff726d7513695Brian Paul   {
784813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888,
785bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888",
786813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
787813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
788813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
789813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
790813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
791813870fd9588de101f68728507cff726d7513695Brian Paul   },
792813870fd9588de101f68728507cff726d7513695Brian Paul   {
793813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888_REV,
794bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888_REV",
795813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
796813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
797813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
798813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
799813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
800813870fd9588de101f68728507cff726d7513695Brian Paul   },
80184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
80284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 16 bits / channel */
80384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
80484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_R_16,
80584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_R_16",
80684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
80784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
80884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 0, 0, 0,
80984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
81084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
81184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
81284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
81384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RG_16,
81484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RG_16",
81584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
81684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
81784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 0, 0,
81884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
81984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4
82084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
82184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
82284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGB_16,
82384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGB_16",
82484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
82584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
82684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 16, 0,
82784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
82884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 6
82984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
830c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul   {
831c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      MESA_FORMAT_SIGNED_RGBA_16,
832bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA_16",
833c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_RGBA,
834c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_SIGNED_NORMALIZED,
835c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      16, 16, 16, 16,
836c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      0, 0, 0, 0, 0,
837c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      1, 1, 8
83817e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   },
83917e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   {
84017e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      MESA_FORMAT_RGBA_16,
84117e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      "MESA_FORMAT_RGBA_16",
84217e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_RGBA,
84317e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_UNSIGNED_NORMALIZED,
84417e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      16, 16, 16, 16,
84517e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      0, 0, 0, 0, 0,
84617e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      1, 1, 8
847c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul   }
848813870fd9588de101f68728507cff726d7513695Brian Paul};
849813870fd9588de101f68728507cff726d7513695Brian Paul
850813870fd9588de101f68728507cff726d7513695Brian Paul
851813870fd9588de101f68728507cff726d7513695Brian Paul
852813870fd9588de101f68728507cff726d7513695Brian Paulstatic const struct gl_format_info *
853813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_info(gl_format format)
854813870fd9588de101f68728507cff726d7513695Brian Paul{
855813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = &format_info[format];
856813870fd9588de101f68728507cff726d7513695Brian Paul   assert(info->Name == format);
857813870fd9588de101f68728507cff726d7513695Brian Paul   return info;
858813870fd9588de101f68728507cff726d7513695Brian Paul}
859813870fd9588de101f68728507cff726d7513695Brian Paul
860813870fd9588de101f68728507cff726d7513695Brian Paul
861bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul/** Return string name of format (for debugging) */
862bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paulconst char *
863bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul_mesa_get_format_name(gl_format format)
864bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul{
865bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
866bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   ASSERT(info->BytesPerBlock);
867bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   return info->StrName;
868bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul}
869bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
870bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
871bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
872eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
873eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bytes needed to store a block of pixels in the given format.
874eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Normally, a block is 1x1 (a single pixel).  But for compressed formats
875eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * a block may be 4x4 or 8x4, etc.
876eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
877813870fd9588de101f68728507cff726d7513695Brian PaulGLuint
878813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_bytes(gl_format format)
879813870fd9588de101f68728507cff726d7513695Brian Paul{
880813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
881813870fd9588de101f68728507cff726d7513695Brian Paul   ASSERT(info->BytesPerBlock);
882813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BytesPerBlock;
883813870fd9588de101f68728507cff726d7513695Brian Paul}
884813870fd9588de101f68728507cff726d7513695Brian Paul
885813870fd9588de101f68728507cff726d7513695Brian Paul
886eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
887eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bits per component for the given format.
888eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param format  one of MESA_FORMAT_x
889eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param pname  the component, such as GL_RED_BITS, GL_TEXTURE_BLUE_BITS, etc.
890eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
8915978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLint
8925978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_bits(gl_format format, GLenum pname)
8935978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
8945978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
8955978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
8965978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   switch (pname) {
897edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RED_BITS:
8985978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_RED_SIZE:
899edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_RED_SIZE_EXT:
900edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
9015978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->RedBits;
902edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_GREEN_BITS:
9035978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_GREEN_SIZE:
904edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_GREEN_SIZE_EXT:
905edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
9065978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->GreenBits;
907edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_BLUE_BITS:
9085978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_BLUE_SIZE:
909edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_BLUE_SIZE_EXT:
910edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
9115978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->BlueBits;
912edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_ALPHA_BITS:
9135978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_ALPHA_SIZE:
914edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
915edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
9165978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->AlphaBits;
9175978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INTENSITY_SIZE:
9185978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IntensityBits;
9195978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_LUMINANCE_SIZE:
9205978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->LuminanceBits;
921edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_INDEX_BITS:
9225978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INDEX_SIZE_EXT:
9235978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IndexBits;
924edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_DEPTH_BITS:
9255978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_DEPTH_SIZE_ARB:
926edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
927edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
9285978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->DepthBits;
929edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_STENCIL_BITS:
9305978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_STENCIL_SIZE_EXT:
931edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
932edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
9335978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->StencilBits;
9345978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   default:
9355978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      _mesa_problem(NULL, "bad pname in _mesa_get_format_bits()");
9365978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return 0;
9375978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   }
9385978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
9395978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
9405978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
941eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
942eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the data type (or more specifically, the data representation)
943eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * for the given format.
944eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * The return value will be one of:
945eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_NORMALIZED = unsigned int representing [0,1]
946eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_SIGNED_NORMALIZED = signed int representing [-1, 1]
947eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_INT = an ordinary unsigned integer
948eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_FLOAT = an ordinary float
949eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
9505978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLenum
9515978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_datatype(gl_format format)
9525978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
9535978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
9545978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   return info->DataType;
9555978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
9565978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
9575978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
958eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
959eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the basic format for the given type.  The result will be
960eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * one of GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA,
961eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_INTENSITY, GL_YCBCR_MESA, GL_COLOR_INDEX, GL_DEPTH_COMPONENT,
962eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
963eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
964813870fd9588de101f68728507cff726d7513695Brian PaulGLenum
965813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_base_format(gl_format format)
966813870fd9588de101f68728507cff726d7513695Brian Paul{
967813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
968813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BaseFormat;
969813870fd9588de101f68728507cff726d7513695Brian Paul}
970813870fd9588de101f68728507cff726d7513695Brian Paul
971813870fd9588de101f68728507cff726d7513695Brian Paul
9727b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul/**
9737b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * Return the block size (in pixels) for the given format.  Normally
9747b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * the block size is 1x1.  But compressed formats will have block sizes
9757b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * of 4x4 or 8x4 pixels, etc.
9767b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bw  returns block width in pixels
9777b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bh  returns block height in pixels
9787b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul */
9797b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paulvoid
9807b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh)
9817b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul{
9827b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
9837b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bw = info->BlockWidth;
9847b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bh = info->BlockHeight;
9857b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul}
9867b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
9877b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
988eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/** Is the given format a compressed format? */
989813870fd9588de101f68728507cff726d7513695Brian PaulGLboolean
990813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_is_format_compressed(gl_format format)
991813870fd9588de101f68728507cff726d7513695Brian Paul{
992813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
993813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BlockWidth > 1 || info->BlockHeight > 1;
994813870fd9588de101f68728507cff726d7513695Brian Paul}
995813870fd9588de101f68728507cff726d7513695Brian Paul
996813870fd9588de101f68728507cff726d7513695Brian Paul
997813870fd9588de101f68728507cff726d7513695Brian Paul/**
998e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler * Determine if the given format represents a packed depth/stencil buffer.
999e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler */
1000e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick BowlerGLboolean
1001e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler_mesa_is_format_packed_depth_stencil(gl_format format)
1002e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler{
1003f57df7f2130dfe20a6f7e75cfc1f5d4e1717d098Nick Bowler   const struct gl_format_info *info = _mesa_get_format_info(format);
1004e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
1005f57df7f2130dfe20a6f7e75cfc1f5d4e1717d098Nick Bowler   return info->BaseFormat == GL_DEPTH_STENCIL;
1006e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler}
1007e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
1008e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
1009e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler/**
1010f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * Return color encoding for given format.
1011f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * \return GL_LINEAR or GL_SRGB
1012f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul */
1013f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian PaulGLenum
1014f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul_mesa_get_format_color_encoding(gl_format format)
1015f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul{
1016f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   /* XXX this info should be encoded in gl_format_info */
1017f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   switch (format) {
1018f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB8:
1019f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA8:
1020f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SARGB8:
1021f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SL8:
1022f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SLA8:
1023f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB_DXT1:
1024f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT1:
1025f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT3:
1026f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT5:
1027f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_SRGB;
1028f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   default:
1029f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_LINEAR;
1030f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   }
1031f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul}
1032f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
1033f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
1034f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul/**
10351c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * Return number of bytes needed to store an image of the given size
10361c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * in the given format.
10371c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul */
10381c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian PaulGLuint
10391c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul_mesa_format_image_size(gl_format format, GLsizei width,
10401c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul                        GLsizei height, GLsizei depth)
10411c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul{
10421c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1043040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
10441c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
10451c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      /* compressed format */
10461c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint bw = info->BlockWidth, bh = info->BlockHeight;
10471c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint wblocks = (width + bw - 1) / bw;
10481c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint hblocks = (height + bh - 1) / bh;
1049040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint sz = wblocks * hblocks * info->BytesPerBlock;
10501c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
10511c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
10521c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   else {
10531c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      /* non-compressed */
10541c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint sz = width * height * depth * info->BytesPerBlock;
10551c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
10561c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
10571c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul}
10581c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
10591c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
10601c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
1061040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian PaulGLint
1062040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul_mesa_format_row_stride(gl_format format, GLsizei width)
1063040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul{
1064040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1065040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
1066040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
1067040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      /* compressed format */
1068040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint bw = info->BlockWidth;
1069040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint wblocks = (width + bw - 1) / bw;
1070040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = wblocks * info->BytesPerBlock;
1071040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
1072040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
1073040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   else {
1074040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = width * info->BytesPerBlock;
1075040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
1076040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
1077040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul}
1078040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
1079040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
10801c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
10811c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul/**
1082813870fd9588de101f68728507cff726d7513695Brian Paul * Do sanity checking of the format info table.
1083813870fd9588de101f68728507cff726d7513695Brian Paul */
1084813870fd9588de101f68728507cff726d7513695Brian Paulvoid
1085813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_test_formats(void)
1086813870fd9588de101f68728507cff726d7513695Brian Paul{
1087813870fd9588de101f68728507cff726d7513695Brian Paul   GLuint i;
1088813870fd9588de101f68728507cff726d7513695Brian Paul
1089813870fd9588de101f68728507cff726d7513695Brian Paul   assert(Elements(format_info) == MESA_FORMAT_COUNT);
1090813870fd9588de101f68728507cff726d7513695Brian Paul
1091813870fd9588de101f68728507cff726d7513695Brian Paul   for (i = 0; i < MESA_FORMAT_COUNT; i++) {
1092813870fd9588de101f68728507cff726d7513695Brian Paul      const struct gl_format_info *info = _mesa_get_format_info(i);
1093813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info);
1094813870fd9588de101f68728507cff726d7513695Brian Paul
1095813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->Name == i);
1096813870fd9588de101f68728507cff726d7513695Brian Paul
1097e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      if (info->Name == MESA_FORMAT_NONE)
1098e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul         continue;
1099e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul
1100813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BlockWidth == 1 && info->BlockHeight == 1) {
1101813870fd9588de101f68728507cff726d7513695Brian Paul         if (info->RedBits > 0) {
1102813870fd9588de101f68728507cff726d7513695Brian Paul            GLuint t = info->RedBits + info->GreenBits
1103813870fd9588de101f68728507cff726d7513695Brian Paul               + info->BlueBits + info->AlphaBits;
1104813870fd9588de101f68728507cff726d7513695Brian Paul            assert(t / 8 == info->BytesPerBlock);
11056e0584932b3e556a0aecd2ca36f5ae41dc40a919Vinson Lee            (void) t;
1106813870fd9588de101f68728507cff726d7513695Brian Paul         }
1107813870fd9588de101f68728507cff726d7513695Brian Paul      }
1108813870fd9588de101f68728507cff726d7513695Brian Paul
1109813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->DataType == GL_UNSIGNED_NORMALIZED ||
1110813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_SIGNED_NORMALIZED ||
1111813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_UNSIGNED_INT ||
1112813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_FLOAT);
1113813870fd9588de101f68728507cff726d7513695Brian Paul
1114813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BaseFormat == GL_RGB) {
1115813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
1116813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
1117813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
1118813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1119813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1120813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1121813870fd9588de101f68728507cff726d7513695Brian Paul      }
1122813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_RGBA) {
1123813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
1124813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
1125813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
1126813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits > 0);
1127813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1128813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1129813870fd9588de101f68728507cff726d7513695Brian Paul      }
11305d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      else if (info->BaseFormat == GL_RG) {
11315d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->RedBits > 0);
11325d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->GreenBits > 0);
11335d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->BlueBits == 0);
11345d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->AlphaBits == 0);
11355d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->LuminanceBits == 0);
11365d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->IntensityBits == 0);
11375d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      }
11385d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      else if (info->BaseFormat == GL_RED) {
11395d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->RedBits > 0);
11405d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->GreenBits == 0);
11415d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->BlueBits == 0);
11425d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->AlphaBits == 0);
11435d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->LuminanceBits == 0);
11445d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->IntensityBits == 0);
11455d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      }
1146813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_LUMINANCE) {
1147813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1148813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1149813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1150813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1151813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits > 0);
1152813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1153813870fd9588de101f68728507cff726d7513695Brian Paul      }
1154813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_INTENSITY) {
1155813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1156813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1157813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1158813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1159813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1160813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits > 0);
1161813870fd9588de101f68728507cff726d7513695Brian Paul      }
1162813870fd9588de101f68728507cff726d7513695Brian Paul
1163813870fd9588de101f68728507cff726d7513695Brian Paul   }
1164813870fd9588de101f68728507cff726d7513695Brian Paul}
1165813870fd9588de101f68728507cff726d7513695Brian Paul
1166813870fd9588de101f68728507cff726d7513695Brian Paul
1167019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1168813870fd9588de101f68728507cff726d7513695Brian Paul/**
1169019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Return datatype and number of components per texel for the given gl_format.
1170019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Only used for mipmap generation code.
1171813870fd9588de101f68728507cff726d7513695Brian Paul */
1172813870fd9588de101f68728507cff726d7513695Brian Paulvoid
1173019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul_mesa_format_to_type_and_comps(gl_format format,
1174019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul                               GLenum *datatype, GLuint *comps)
1175813870fd9588de101f68728507cff726d7513695Brian Paul{
1176019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   switch (format) {
1177019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888:
1178019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888_REV:
1179019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888:
1180019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888_REV:
118174d61d03b54d72217d463c248468cdcd09320efcBrian Paul   case MESA_FORMAT_XRGB8888:
1182019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1183019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1184019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1185019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB888:
1186019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_BGR888:
1187019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1188019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1189019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1190019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565:
1191019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565_REV:
1192019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_5_6_5;
1193019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1194019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1195019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1196019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444:
1197019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444_REV:
1198019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
1199019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1200019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1201019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1202019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555:
1203019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555_REV:
1204019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
1205019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1206019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1207019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1208019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88:
1209019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88_REV:
12105d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG88:
12115d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG88_REV:
1212019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1213019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1214019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1215eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
1216eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616:
1217eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616_REV:
12185d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG1616:
12195d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG1616_REV:
1220eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *datatype = GL_UNSIGNED_SHORT;
1221eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *comps = 2;
1222eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      return;
1223eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
12245d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_R16:
12255d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      *datatype = GL_UNSIGNED_SHORT;
12265d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      *comps = 1;
12275d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      return;
12285d1387b2da3626326410804026f8b92f1a121fdcIan Romanick
1229019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB332:
1230019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE_3_3_2;
1231019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1232019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1233019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1234019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_A8:
1235019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_L8:
1236019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_I8:
1237019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_CI8:
12385d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_R8:
1239813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1240813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1241019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1242019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1243019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR:
1244019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR_REV:
1245019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT;
1246813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1247019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1248019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1249019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z24_S8:
1250019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1251019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1252019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1253019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1254019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_S8_Z24:
1255019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1256019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1257019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1258019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1259019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z16:
1260813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_SHORT;
1261019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1262019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1263019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1264e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   case MESA_FORMAT_X8_Z24:
1265e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *datatype = GL_UNSIGNED_INT;
1266e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *comps = 1;
1267e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      return;
1268e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul
1269c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   case MESA_FORMAT_Z24_X8:
1270c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *datatype = GL_UNSIGNED_INT;
1271c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *comps = 1;
1272c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      return;
1273c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca
1274019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z32:
1275019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1276019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1277019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1278019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1279019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_DUDV8:
1280019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_BYTE;
1281813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1282019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1283019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1284019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888:
1285019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888_REV:
1286813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_BYTE;
1287019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1288019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1289880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul
1290880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_R_16:
1291880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1292880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 1;
1293880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1294880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_RG_16:
1295880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1296880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 2;
1297880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1298880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_RGB_16:
1299880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1300880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 3;
1301880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1302c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul   case MESA_FORMAT_SIGNED_RGBA_16:
1303c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *datatype = GL_SHORT;
1304c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *comps = 4;
1305c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      return;
1306019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1307019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1308019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB8:
1309019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1310019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1311019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1312019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA8:
1313019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SARGB8:
1314019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1315019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1316019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1317019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SL8:
1318019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1319813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1320019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1321019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SLA8:
1322019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1323019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1324019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1325019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1326019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1327019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_fxt1
1328019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FXT1:
1329019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FXT1:
1330019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1331019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_s3tc
1332019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_DXT1:
1333019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT1:
1334019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT3:
1335019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT5:
1336019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1337019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB_DXT1:
1338019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT1:
1339019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT3:
1340019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT5:
1341019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1342019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      /* XXX generate error instead? */
1343813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1344019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 0;
1345019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1346019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1347019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1348019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT32:
1349019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1350019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1351019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1352019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT16:
1353019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1354019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1355019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1356019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT32:
1357019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1358019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1359019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1360019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT16:
1361019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1362019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1363019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1364019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
1365019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1366019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1367019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1368019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
1369019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1370019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1371019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1372019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT32:
1373019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT32:
1374019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT32:
1375019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1376019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1377019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1378019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT16:
1379019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT16:
1380019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT16:
1381019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1382019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1383019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1384019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1385abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT8:
1386abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_BYTE;
1387abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1388abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1389abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT16:
1390abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_SHORT;
1391abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1392abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1393abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT32:
1394abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_INT;
1395abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1396abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1397abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
1398abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /**
1399abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    * \name Non-normalized unsigned integer formats.
1400abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    */
1401abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT8:
1402abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1403abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1404abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1405abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT16:
1406abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_SHORT;
1407abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1408abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1409abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT32:
1410abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_INT;
1411abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1412abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1413abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
1414abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
1415019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   default:
1416019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      _mesa_problem(NULL, "bad format in _mesa_format_to_type_and_comps");
1417019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = 0;
1418019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1419813870fd9588de101f68728507cff726d7513695Brian Paul   }
1420813870fd9588de101f68728507cff726d7513695Brian Paul}
1421