formats.c revision 17e96718946486ef77927fcf3bb299d8bff32b98
1813870fd9588de101f68728507cff726d7513695Brian Paul/*
2813870fd9588de101f68728507cff726d7513695Brian Paul * Mesa 3-D graphics library
3813870fd9588de101f68728507cff726d7513695Brian Paul * Version:  7.7
4813870fd9588de101f68728507cff726d7513695Brian Paul *
5813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (c) 2008-2009  VMware, Inc.
7813870fd9588de101f68728507cff726d7513695Brian Paul *
8813870fd9588de101f68728507cff726d7513695Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
9813870fd9588de101f68728507cff726d7513695Brian Paul * copy of this software and associated documentation files (the "Software"),
10813870fd9588de101f68728507cff726d7513695Brian Paul * to deal in the Software without restriction, including without limitation
11813870fd9588de101f68728507cff726d7513695Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12813870fd9588de101f68728507cff726d7513695Brian Paul * and/or sell copies of the Software, and to permit persons to whom the
13813870fd9588de101f68728507cff726d7513695Brian Paul * Software is furnished to do so, subject to the following conditions:
14813870fd9588de101f68728507cff726d7513695Brian Paul *
15813870fd9588de101f68728507cff726d7513695Brian Paul * The above copyright notice and this permission notice shall be included
16813870fd9588de101f68728507cff726d7513695Brian Paul * in all copies or substantial portions of the Software.
17813870fd9588de101f68728507cff726d7513695Brian Paul *
18813870fd9588de101f68728507cff726d7513695Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19813870fd9588de101f68728507cff726d7513695Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20813870fd9588de101f68728507cff726d7513695Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21813870fd9588de101f68728507cff726d7513695Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22813870fd9588de101f68728507cff726d7513695Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23813870fd9588de101f68728507cff726d7513695Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24813870fd9588de101f68728507cff726d7513695Brian Paul */
25813870fd9588de101f68728507cff726d7513695Brian Paul
26813870fd9588de101f68728507cff726d7513695Brian Paul
27c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul#include "imports.h"
28813870fd9588de101f68728507cff726d7513695Brian Paul#include "formats.h"
29813870fd9588de101f68728507cff726d7513695Brian Paul#include "config.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,
51be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * GL_UNSIGNED_INT, GL_SIGNED_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   {
324813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z24_S8,          /* Name */
325bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z24_S8",        /* StrName */
326813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
327813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
328813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
329813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
330813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
331813870fd9588de101f68728507cff726d7513695Brian Paul   },
332813870fd9588de101f68728507cff726d7513695Brian Paul   {
333813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8_Z24,          /* Name */
334bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8_Z24",        /* StrName */
335813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
336813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
337813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
338813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
339813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
340813870fd9588de101f68728507cff726d7513695Brian Paul   },
341813870fd9588de101f68728507cff726d7513695Brian Paul   {
342813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z16,             /* Name */
343bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z16",           /* StrName */
344813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
345813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
346813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
347813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16, 0,              /* Lum/Int/Index/Depth/StencilBits */
348813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
349813870fd9588de101f68728507cff726d7513695Brian Paul   },
350813870fd9588de101f68728507cff726d7513695Brian Paul   {
351e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      MESA_FORMAT_X8_Z24,          /* Name */
352bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_X8_Z24",        /* StrName */
353e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
354e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_UNSIGNED_INT,             /* DataType */
355e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
356e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
357e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
358e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   },
359e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   {
360c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      MESA_FORMAT_Z24_X8,          /* Name */
361c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      "MESA_FORMAT_Z24_X8",        /* StrName */
362c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_DEPTH_COMPONENT,          /* BaseFormat */
363c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_UNSIGNED_INT,             /* DataType */
364c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
365c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
366c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      1, 1, 4                      /* BlockWidth/Height,Bytes */
367c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   },
368c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   {
369813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z32,             /* Name */
370bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z32",           /* StrName */
371813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
372813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
373813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
374813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
375813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
376813870fd9588de101f68728507cff726d7513695Brian Paul   },
377813870fd9588de101f68728507cff726d7513695Brian Paul   {
378813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8,              /* Name */
379bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8",            /* StrName */
380813870fd9588de101f68728507cff726d7513695Brian Paul      GL_STENCIL_INDEX,            /* BaseFormat */
381813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
382813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
383813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
384813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
385813870fd9588de101f68728507cff726d7513695Brian Paul   },
386813870fd9588de101f68728507cff726d7513695Brian Paul   {
387813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB8,
388bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB8",
389813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
390813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
391813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,
392813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
393813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3
394813870fd9588de101f68728507cff726d7513695Brian Paul   },
395813870fd9588de101f68728507cff726d7513695Brian Paul   {
396813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA8,
397bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA8",
398813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
399813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
400813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
401813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
402813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
403813870fd9588de101f68728507cff726d7513695Brian Paul   },
404813870fd9588de101f68728507cff726d7513695Brian Paul   {
405813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SARGB8,
406bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SARGB8",
407813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
408813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
409813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
410813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
411813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
412813870fd9588de101f68728507cff726d7513695Brian Paul   },
413813870fd9588de101f68728507cff726d7513695Brian Paul   {
414813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SL8,
415bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SL8",
41671cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      GL_LUMINANCE,
417813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
41871cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      0, 0, 0, 0,
419813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
42071cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      1, 1, 1
421813870fd9588de101f68728507cff726d7513695Brian Paul   },
422813870fd9588de101f68728507cff726d7513695Brian Paul   {
423813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SLA8,
424bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SLA8",
425813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
426813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
427813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,
428813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
429813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
430813870fd9588de101f68728507cff726d7513695Brian Paul   },
431813870fd9588de101f68728507cff726d7513695Brian Paul   {
432813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB_DXT1,       /* Name */
433bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB_DXT1",     /* StrName */
434813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
435813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
436813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
437813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
438813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
439813870fd9588de101f68728507cff726d7513695Brian Paul   },
440813870fd9588de101f68728507cff726d7513695Brian Paul   {
441813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT1,
442bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT1",
443813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
444813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
445813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
446813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
447813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
448813870fd9588de101f68728507cff726d7513695Brian Paul   },
449813870fd9588de101f68728507cff726d7513695Brian Paul   {
450813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT3,
451bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT3",
452813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
453813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
454813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
455813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
456813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
457813870fd9588de101f68728507cff726d7513695Brian Paul   },
458813870fd9588de101f68728507cff726d7513695Brian Paul   {
459813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT5,
460bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT5",
461813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
462813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
463813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
464813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
465813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
466813870fd9588de101f68728507cff726d7513695Brian Paul   },
467813870fd9588de101f68728507cff726d7513695Brian Paul
468813870fd9588de101f68728507cff726d7513695Brian Paul   {
469813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FXT1,
470bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FXT1",
471813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
472813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
473c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/BlueBits */
474813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
475813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
476813870fd9588de101f68728507cff726d7513695Brian Paul   },
477813870fd9588de101f68728507cff726d7513695Brian Paul   {
478813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FXT1,
479bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FXT1",
480813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
481813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
482c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 1,                  /* approx Red/Green/Blue/AlphaBits */
483813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
484813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
485813870fd9588de101f68728507cff726d7513695Brian Paul   },
486813870fd9588de101f68728507cff726d7513695Brian Paul
487813870fd9588de101f68728507cff726d7513695Brian Paul   {
488813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_DXT1,        /* Name */
489bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_DXT1",      /* StrName */
490813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
491813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
492813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
493813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
494813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
495813870fd9588de101f68728507cff726d7513695Brian Paul   },
496813870fd9588de101f68728507cff726d7513695Brian Paul   {
497813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT1,
498bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT1",
499813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
500813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
501813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
502813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
503813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
504813870fd9588de101f68728507cff726d7513695Brian Paul   },
505813870fd9588de101f68728507cff726d7513695Brian Paul   {
506813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT3,
507bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT3",
508813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
509813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
510813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
511813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
512813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
513813870fd9588de101f68728507cff726d7513695Brian Paul   },
514813870fd9588de101f68728507cff726d7513695Brian Paul   {
515813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT5,
516bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT5",
517813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
518813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
519813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
520813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
521813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
522813870fd9588de101f68728507cff726d7513695Brian Paul   },
523813870fd9588de101f68728507cff726d7513695Brian Paul   {
524813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT32,
525bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT32",
526813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
527813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
528813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 32,
529813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
530813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 16
531813870fd9588de101f68728507cff726d7513695Brian Paul   },
532813870fd9588de101f68728507cff726d7513695Brian Paul   {
533813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT16,
534bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT16",
535813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
536813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
537813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 16,
538813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
539813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
540813870fd9588de101f68728507cff726d7513695Brian Paul   },
541813870fd9588de101f68728507cff726d7513695Brian Paul   {
542813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT32,
543bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT32",
544813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
545813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
546813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 0,
547813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
548813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 12
549813870fd9588de101f68728507cff726d7513695Brian Paul   },
550813870fd9588de101f68728507cff726d7513695Brian Paul   {
551813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT16,
552bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT16",
553813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
554813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
555813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 0,
556813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
557813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 6
558813870fd9588de101f68728507cff726d7513695Brian Paul   },
559813870fd9588de101f68728507cff726d7513695Brian Paul   {
560813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT32,
561bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT32",
562813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
563813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
564813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
565813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
566813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
567813870fd9588de101f68728507cff726d7513695Brian Paul   },
568813870fd9588de101f68728507cff726d7513695Brian Paul   {
569813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT16,
570bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT16",
571813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
572813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
573813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
574813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
575813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
576813870fd9588de101f68728507cff726d7513695Brian Paul   },
577813870fd9588de101f68728507cff726d7513695Brian Paul   {
578813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT32,
579bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT32",
580813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
581813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
582813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
583813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
584813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
585813870fd9588de101f68728507cff726d7513695Brian Paul   },
586813870fd9588de101f68728507cff726d7513695Brian Paul   {
587813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT16,
588bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT16",
589813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
590813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
591813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
592813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
593813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
594813870fd9588de101f68728507cff726d7513695Brian Paul   },
595813870fd9588de101f68728507cff726d7513695Brian Paul   {
596813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
597bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32",
598813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
599813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
600813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
601813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
602813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
603813870fd9588de101f68728507cff726d7513695Brian Paul   },
604813870fd9588de101f68728507cff726d7513695Brian Paul   {
605813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
606bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16",
607813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
608813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
609813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
610813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
611813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
612813870fd9588de101f68728507cff726d7513695Brian Paul   },
613813870fd9588de101f68728507cff726d7513695Brian Paul   {
614813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT32,
615bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT32",
616813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
617813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
618813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
619813870fd9588de101f68728507cff726d7513695Brian Paul      0, 32, 0, 0, 0,
620813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
621813870fd9588de101f68728507cff726d7513695Brian Paul   },
622813870fd9588de101f68728507cff726d7513695Brian Paul   {
623813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT16,
624bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT16",
625813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
626813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
627813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
628813870fd9588de101f68728507cff726d7513695Brian Paul      0, 16, 0, 0, 0,
629813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
630813870fd9588de101f68728507cff726d7513695Brian Paul   },
631813870fd9588de101f68728507cff726d7513695Brian Paul   {
632813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_DUDV8,
633bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_DUDV8",
634813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DUDV_ATI,
635813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
636813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
637813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
638813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
639813870fd9588de101f68728507cff726d7513695Brian Paul   },
64084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
64184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 8 bits / channel */
64284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
64384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_R8,        /* Name */
64484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_R8",      /* StrName */
64584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,                      /* BaseFormat */
64684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,         /* DataType */
64784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 0, 0, 0,                   /* Red/Green/Blue/AlphaBits */
64884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,                /* Lum/Int/Index/Depth/StencilBits */
64984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 1                       /* BlockWidth/Height,Bytes */
65084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
65184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
65284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RG88,
65384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RG88",
65484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
65584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
65684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 0, 0,
65784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
65884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
65984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
66084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
66184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGBX8888,
66284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGBX8888",
66384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
66484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
66584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 8, 0,
66684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
66784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4                       /* 4 bpp, but no alpha */
66884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
669813870fd9588de101f68728507cff726d7513695Brian Paul   {
670813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888,
671bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888",
672813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
673813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
674813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
675813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
676813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
677813870fd9588de101f68728507cff726d7513695Brian Paul   },
678813870fd9588de101f68728507cff726d7513695Brian Paul   {
679813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888_REV,
680bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888_REV",
681813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
682813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
683813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
684813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
685813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
686813870fd9588de101f68728507cff726d7513695Brian Paul   },
68784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
68884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 16 bits / channel */
68984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
69084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_R_16,
69184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_R_16",
69284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
69384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
69484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 0, 0, 0,
69584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
69684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
69784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
69884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
69984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RG_16,
70084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RG_16",
70184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
70284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
70384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 0, 0,
70484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
70584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4
70684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
70784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
70884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGB_16,
70984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGB_16",
71084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_RGBA,
71184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
71284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 16, 0,
71384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
71484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 6
71584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
716c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul   {
717c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      MESA_FORMAT_SIGNED_RGBA_16,
718bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA_16",
719c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_RGBA,
720c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_SIGNED_NORMALIZED,
721c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      16, 16, 16, 16,
722c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      0, 0, 0, 0, 0,
723c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      1, 1, 8
72417e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   },
72517e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   {
72617e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      MESA_FORMAT_RGBA_16,
72717e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      "MESA_FORMAT_RGBA_16",
72817e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_RGBA,
72917e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_UNSIGNED_NORMALIZED,
73017e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      16, 16, 16, 16,
73117e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      0, 0, 0, 0, 0,
73217e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      1, 1, 8
733c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul   }
734813870fd9588de101f68728507cff726d7513695Brian Paul};
735813870fd9588de101f68728507cff726d7513695Brian Paul
736813870fd9588de101f68728507cff726d7513695Brian Paul
737813870fd9588de101f68728507cff726d7513695Brian Paul
738813870fd9588de101f68728507cff726d7513695Brian Paulstatic const struct gl_format_info *
739813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_info(gl_format format)
740813870fd9588de101f68728507cff726d7513695Brian Paul{
741813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = &format_info[format];
742813870fd9588de101f68728507cff726d7513695Brian Paul   assert(info->Name == format);
743813870fd9588de101f68728507cff726d7513695Brian Paul   return info;
744813870fd9588de101f68728507cff726d7513695Brian Paul}
745813870fd9588de101f68728507cff726d7513695Brian Paul
746813870fd9588de101f68728507cff726d7513695Brian Paul
747bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul/** Return string name of format (for debugging) */
748bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paulconst char *
749bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul_mesa_get_format_name(gl_format format)
750bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul{
751bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
752bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   ASSERT(info->BytesPerBlock);
753bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   return info->StrName;
754bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul}
755bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
756bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
757bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
758eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
759eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bytes needed to store a block of pixels in the given format.
760eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Normally, a block is 1x1 (a single pixel).  But for compressed formats
761eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * a block may be 4x4 or 8x4, etc.
762eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
763813870fd9588de101f68728507cff726d7513695Brian PaulGLuint
764813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_bytes(gl_format format)
765813870fd9588de101f68728507cff726d7513695Brian Paul{
766813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
767813870fd9588de101f68728507cff726d7513695Brian Paul   ASSERT(info->BytesPerBlock);
768813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BytesPerBlock;
769813870fd9588de101f68728507cff726d7513695Brian Paul}
770813870fd9588de101f68728507cff726d7513695Brian Paul
771813870fd9588de101f68728507cff726d7513695Brian Paul
772eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
773eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bits per component for the given format.
774eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param format  one of MESA_FORMAT_x
775eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param pname  the component, such as GL_RED_BITS, GL_TEXTURE_BLUE_BITS, etc.
776eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
7775978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLint
7785978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_bits(gl_format format, GLenum pname)
7795978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
7805978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
7815978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
7825978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   switch (pname) {
783edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RED_BITS:
7845978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_RED_SIZE:
785edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_RED_SIZE_EXT:
786edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
7875978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->RedBits;
788edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_GREEN_BITS:
7895978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_GREEN_SIZE:
790edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_GREEN_SIZE_EXT:
791edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
7925978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->GreenBits;
793edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_BLUE_BITS:
7945978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_BLUE_SIZE:
795edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_BLUE_SIZE_EXT:
796edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
7975978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->BlueBits;
798edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_ALPHA_BITS:
7995978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_ALPHA_SIZE:
800edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
801edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
8025978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->AlphaBits;
8035978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INTENSITY_SIZE:
8045978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IntensityBits;
8055978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_LUMINANCE_SIZE:
8065978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->LuminanceBits;
807edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_INDEX_BITS:
8085978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INDEX_SIZE_EXT:
8095978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IndexBits;
810edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_DEPTH_BITS:
8115978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_DEPTH_SIZE_ARB:
812edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
813edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
8145978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->DepthBits;
815edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_STENCIL_BITS:
8165978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_STENCIL_SIZE_EXT:
817edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
818edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
8195978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->StencilBits;
8205978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   default:
8215978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      _mesa_problem(NULL, "bad pname in _mesa_get_format_bits()");
8225978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return 0;
8235978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   }
8245978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
8255978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
8265978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
827eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
828eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the data type (or more specifically, the data representation)
829eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * for the given format.
830eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * The return value will be one of:
831eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_NORMALIZED = unsigned int representing [0,1]
832eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_SIGNED_NORMALIZED = signed int representing [-1, 1]
833eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_INT = an ordinary unsigned integer
834eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_FLOAT = an ordinary float
835eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
8365978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLenum
8375978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_datatype(gl_format format)
8385978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
8395978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
8405978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   return info->DataType;
8415978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
8425978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
8435978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
844eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
845eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the basic format for the given type.  The result will be
846eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * one of GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA,
847eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_INTENSITY, GL_YCBCR_MESA, GL_COLOR_INDEX, GL_DEPTH_COMPONENT,
848eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
849eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
850813870fd9588de101f68728507cff726d7513695Brian PaulGLenum
851813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_base_format(gl_format format)
852813870fd9588de101f68728507cff726d7513695Brian Paul{
853813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
854813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BaseFormat;
855813870fd9588de101f68728507cff726d7513695Brian Paul}
856813870fd9588de101f68728507cff726d7513695Brian Paul
857813870fd9588de101f68728507cff726d7513695Brian Paul
8587b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul/**
8597b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * Return the block size (in pixels) for the given format.  Normally
8607b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * the block size is 1x1.  But compressed formats will have block sizes
8617b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * of 4x4 or 8x4 pixels, etc.
8627b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bw  returns block width in pixels
8637b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bh  returns block height in pixels
8647b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul */
8657b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paulvoid
8667b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh)
8677b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul{
8687b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
8697b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bw = info->BlockWidth;
8707b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bh = info->BlockHeight;
8717b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul}
8727b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
8737b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
874eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/** Is the given format a compressed format? */
875813870fd9588de101f68728507cff726d7513695Brian PaulGLboolean
876813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_is_format_compressed(gl_format format)
877813870fd9588de101f68728507cff726d7513695Brian Paul{
878813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
879813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BlockWidth > 1 || info->BlockHeight > 1;
880813870fd9588de101f68728507cff726d7513695Brian Paul}
881813870fd9588de101f68728507cff726d7513695Brian Paul
882813870fd9588de101f68728507cff726d7513695Brian Paul
883813870fd9588de101f68728507cff726d7513695Brian Paul/**
884f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * Return color encoding for given format.
885f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * \return GL_LINEAR or GL_SRGB
886f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul */
887f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian PaulGLenum
888f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul_mesa_get_format_color_encoding(gl_format format)
889f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul{
890f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   /* XXX this info should be encoded in gl_format_info */
891f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   switch (format) {
892f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB8:
893f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA8:
894f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SARGB8:
895f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SL8:
896f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SLA8:
897f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB_DXT1:
898f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT1:
899f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT3:
900f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT5:
901f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_SRGB;
902f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   default:
903f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_LINEAR;
904f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   }
905f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul}
906f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
907f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
908f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul/**
9091c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * Return number of bytes needed to store an image of the given size
9101c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * in the given format.
9111c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul */
9121c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian PaulGLuint
9131c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul_mesa_format_image_size(gl_format format, GLsizei width,
9141c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul                        GLsizei height, GLsizei depth)
9151c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul{
9161c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
917040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
9181c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
9191c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      /* compressed format */
9201c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint bw = info->BlockWidth, bh = info->BlockHeight;
9211c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint wblocks = (width + bw - 1) / bw;
9221c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint hblocks = (height + bh - 1) / bh;
923040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint sz = wblocks * hblocks * info->BytesPerBlock;
9241c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
9251c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
9261c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   else {
9271c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      /* non-compressed */
9281c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint sz = width * height * depth * info->BytesPerBlock;
9291c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
9301c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
9311c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul}
9321c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
9331c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
9341c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
935040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian PaulGLint
936040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul_mesa_format_row_stride(gl_format format, GLsizei width)
937040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul{
938040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
939040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
940040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
941040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      /* compressed format */
942040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint bw = info->BlockWidth;
943040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint wblocks = (width + bw - 1) / bw;
944040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = wblocks * info->BytesPerBlock;
945040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
946040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
947040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   else {
948040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = width * info->BytesPerBlock;
949040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
950040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
951040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul}
952040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
953040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
9541c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
9551c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul/**
956813870fd9588de101f68728507cff726d7513695Brian Paul * Do sanity checking of the format info table.
957813870fd9588de101f68728507cff726d7513695Brian Paul */
958813870fd9588de101f68728507cff726d7513695Brian Paulvoid
959813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_test_formats(void)
960813870fd9588de101f68728507cff726d7513695Brian Paul{
961813870fd9588de101f68728507cff726d7513695Brian Paul   GLuint i;
962813870fd9588de101f68728507cff726d7513695Brian Paul
963813870fd9588de101f68728507cff726d7513695Brian Paul   assert(Elements(format_info) == MESA_FORMAT_COUNT);
964813870fd9588de101f68728507cff726d7513695Brian Paul
965813870fd9588de101f68728507cff726d7513695Brian Paul   for (i = 0; i < MESA_FORMAT_COUNT; i++) {
966813870fd9588de101f68728507cff726d7513695Brian Paul      const struct gl_format_info *info = _mesa_get_format_info(i);
967813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info);
968813870fd9588de101f68728507cff726d7513695Brian Paul
969813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->Name == i);
970813870fd9588de101f68728507cff726d7513695Brian Paul
971e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      if (info->Name == MESA_FORMAT_NONE)
972e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul         continue;
973e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul
974813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BlockWidth == 1 && info->BlockHeight == 1) {
975813870fd9588de101f68728507cff726d7513695Brian Paul         if (info->RedBits > 0) {
976813870fd9588de101f68728507cff726d7513695Brian Paul            GLuint t = info->RedBits + info->GreenBits
977813870fd9588de101f68728507cff726d7513695Brian Paul               + info->BlueBits + info->AlphaBits;
978813870fd9588de101f68728507cff726d7513695Brian Paul            assert(t / 8 == info->BytesPerBlock);
9796e0584932b3e556a0aecd2ca36f5ae41dc40a919Vinson Lee            (void) t;
980813870fd9588de101f68728507cff726d7513695Brian Paul         }
981813870fd9588de101f68728507cff726d7513695Brian Paul      }
982813870fd9588de101f68728507cff726d7513695Brian Paul
983813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->DataType == GL_UNSIGNED_NORMALIZED ||
984813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_SIGNED_NORMALIZED ||
985813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_UNSIGNED_INT ||
986813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_FLOAT);
987813870fd9588de101f68728507cff726d7513695Brian Paul
988813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BaseFormat == GL_RGB) {
989813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
990813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
991813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
992813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
993813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
994813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
995813870fd9588de101f68728507cff726d7513695Brian Paul      }
996813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_RGBA) {
997813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
998813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
999813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
1000813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits > 0);
1001813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1002813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1003813870fd9588de101f68728507cff726d7513695Brian Paul      }
1004813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_LUMINANCE) {
1005813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1006813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1007813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1008813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1009813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits > 0);
1010813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1011813870fd9588de101f68728507cff726d7513695Brian Paul      }
1012813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_INTENSITY) {
1013813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1014813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1015813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1016813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1017813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1018813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits > 0);
1019813870fd9588de101f68728507cff726d7513695Brian Paul      }
1020813870fd9588de101f68728507cff726d7513695Brian Paul
1021813870fd9588de101f68728507cff726d7513695Brian Paul   }
1022813870fd9588de101f68728507cff726d7513695Brian Paul}
1023813870fd9588de101f68728507cff726d7513695Brian Paul
1024813870fd9588de101f68728507cff726d7513695Brian Paul
1025019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1026813870fd9588de101f68728507cff726d7513695Brian Paul/**
1027019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Return datatype and number of components per texel for the given gl_format.
1028019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Only used for mipmap generation code.
1029813870fd9588de101f68728507cff726d7513695Brian Paul */
1030813870fd9588de101f68728507cff726d7513695Brian Paulvoid
1031019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul_mesa_format_to_type_and_comps(gl_format format,
1032019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul                               GLenum *datatype, GLuint *comps)
1033813870fd9588de101f68728507cff726d7513695Brian Paul{
1034019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   switch (format) {
1035019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888:
1036019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888_REV:
1037019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888:
1038019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888_REV:
103974d61d03b54d72217d463c248468cdcd09320efcBrian Paul   case MESA_FORMAT_XRGB8888:
1040019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1041019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1042019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1043019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB888:
1044019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_BGR888:
1045019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1046019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1047019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1048019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565:
1049019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565_REV:
1050019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_5_6_5;
1051019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1052019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1053019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1054019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444:
1055019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444_REV:
1056019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
1057019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1058019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1059019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1060019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555:
1061019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555_REV:
1062019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
1063019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1064019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1065019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1066019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88:
1067019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88_REV:
1068019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1069019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1070019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1071eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
1072eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616:
1073eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616_REV:
1074eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *datatype = GL_UNSIGNED_SHORT;
1075eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *comps = 2;
1076eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      return;
1077eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
1078019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB332:
1079019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE_3_3_2;
1080019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1081019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1082019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1083019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_A8:
1084019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_L8:
1085019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_I8:
1086019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_CI8:
1087813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1088813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1089019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1090019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1091019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR:
1092019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR_REV:
1093019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT;
1094813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1095019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1096019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1097019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z24_S8:
1098019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1099019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1100019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1101019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1102019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_S8_Z24:
1103019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1104019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1105019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1106019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1107019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z16:
1108813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_SHORT;
1109019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1110019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1111019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1112e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   case MESA_FORMAT_X8_Z24:
1113e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *datatype = GL_UNSIGNED_INT;
1114e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *comps = 1;
1115e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      return;
1116e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul
1117c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   case MESA_FORMAT_Z24_X8:
1118c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *datatype = GL_UNSIGNED_INT;
1119c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *comps = 1;
1120c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      return;
1121c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca
1122019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z32:
1123019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1124019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1125019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1126019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1127019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_DUDV8:
1128019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_BYTE;
1129813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1130019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1131019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1132019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888:
1133019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888_REV:
1134813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_BYTE;
1135019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1136019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1137880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul
1138880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_R_16:
1139880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1140880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 1;
1141880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1142880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_RG_16:
1143880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1144880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 2;
1145880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1146880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_RGB_16:
1147880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1148880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 3;
1149880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1150c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul   case MESA_FORMAT_SIGNED_RGBA_16:
1151c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *datatype = GL_SHORT;
1152c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *comps = 4;
1153c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      return;
1154019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1155019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1156019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB8:
1157019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1158019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1159019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1160019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA8:
1161019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SARGB8:
1162019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1163019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1164019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1165019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SL8:
1166019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1167813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1168019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1169019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SLA8:
1170019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1171019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1172019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1173019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1174019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1175019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_fxt1
1176019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FXT1:
1177019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FXT1:
1178019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1179019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_s3tc
1180019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_DXT1:
1181019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT1:
1182019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT3:
1183019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT5:
1184019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1185019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB_DXT1:
1186019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT1:
1187019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT3:
1188019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT5:
1189019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1190019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      /* XXX generate error instead? */
1191813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1192019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 0;
1193019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1194019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1195019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1196019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT32:
1197019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1198019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1199019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1200019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT16:
1201019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1202019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1203019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1204019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT32:
1205019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1206019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1207019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1208019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT16:
1209019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1210019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1211019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1212019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
1213019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1214019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1215019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1216019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
1217019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1218019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1219019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1220019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT32:
1221019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT32:
1222019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT32:
1223019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1224019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1225019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1226019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT16:
1227019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT16:
1228019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT16:
1229019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1230019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1231019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1232019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1233019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   default:
1234019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      _mesa_problem(NULL, "bad format in _mesa_format_to_type_and_comps");
1235019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = 0;
1236019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1237813870fd9588de101f68728507cff726d7513695Brian Paul   }
1238813870fd9588de101f68728507cff726d7513695Brian Paul}
1239