formats.c revision 0ecbb0ab7472fe5cb33be13a8307e16f875254e5
1813870fd9588de101f68728507cff726d7513695Brian Paul/*
2813870fd9588de101f68728507cff726d7513695Brian Paul * Mesa 3-D graphics library
3813870fd9588de101f68728507cff726d7513695Brian Paul * Version:  7.7
4813870fd9588de101f68728507cff726d7513695Brian Paul *
5813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (c) 2008-2009  VMware, Inc.
7813870fd9588de101f68728507cff726d7513695Brian Paul *
8813870fd9588de101f68728507cff726d7513695Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
9813870fd9588de101f68728507cff726d7513695Brian Paul * copy of this software and associated documentation files (the "Software"),
10813870fd9588de101f68728507cff726d7513695Brian Paul * to deal in the Software without restriction, including without limitation
11813870fd9588de101f68728507cff726d7513695Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12813870fd9588de101f68728507cff726d7513695Brian Paul * and/or sell copies of the Software, and to permit persons to whom the
13813870fd9588de101f68728507cff726d7513695Brian Paul * Software is furnished to do so, subject to the following conditions:
14813870fd9588de101f68728507cff726d7513695Brian Paul *
15813870fd9588de101f68728507cff726d7513695Brian Paul * The above copyright notice and this permission notice shall be included
16813870fd9588de101f68728507cff726d7513695Brian Paul * in all copies or substantial portions of the Software.
17813870fd9588de101f68728507cff726d7513695Brian Paul *
18813870fd9588de101f68728507cff726d7513695Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19813870fd9588de101f68728507cff726d7513695Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20813870fd9588de101f68728507cff726d7513695Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21813870fd9588de101f68728507cff726d7513695Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22813870fd9588de101f68728507cff726d7513695Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23813870fd9588de101f68728507cff726d7513695Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24813870fd9588de101f68728507cff726d7513695Brian Paul */
25813870fd9588de101f68728507cff726d7513695Brian Paul
26813870fd9588de101f68728507cff726d7513695Brian Paul
27c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul#include "imports.h"
28813870fd9588de101f68728507cff726d7513695Brian Paul#include "formats.h"
293a6f9d0f47861b1c618366d679ad8ddd9a06b323Brian Paul#include "mfeatures.h"
30813870fd9588de101f68728507cff726d7513695Brian Paul
31813870fd9588de101f68728507cff726d7513695Brian Paul
32813870fd9588de101f68728507cff726d7513695Brian Paul/**
33be0765cd6ec47cf068775197f312a1123e044566Brian Paul * Information about texture formats.
34be0765cd6ec47cf068775197f312a1123e044566Brian Paul */
35be0765cd6ec47cf068775197f312a1123e044566Brian Paulstruct gl_format_info
36be0765cd6ec47cf068775197f312a1123e044566Brian Paul{
37be0765cd6ec47cf068775197f312a1123e044566Brian Paul   gl_format Name;
38be0765cd6ec47cf068775197f312a1123e044566Brian Paul
39bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   /** text name for debugging */
40bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   const char *StrName;
41bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
42be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
432d29349c0083134e3b9b9d2023368268b7dcc951Eric Anholt    * Base format is one of GL_RED, GL_RG, GL_RGB, GL_RGBA, GL_ALPHA,
442d29349c0083134e3b9b9d2023368268b7dcc951Eric Anholt    * GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_INTENSITY, GL_YCBCR_MESA,
452d29349c0083134e3b9b9d2023368268b7dcc951Eric Anholt    * GL_COLOR_INDEX, GL_DEPTH_COMPONENT, GL_STENCIL_INDEX,
462d29349c0083134e3b9b9d2023368268b7dcc951Eric Anholt    * GL_DEPTH_STENCIL, GL_DUDV_ATI.
47be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
48be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLenum BaseFormat;
49be0765cd6ec47cf068775197f312a1123e044566Brian Paul
50be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
51be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * Logical data type: one of  GL_UNSIGNED_NORMALIZED, GL_SIGNED_NORMALED,
52abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    * GL_UNSIGNED_INT, GL_INT, GL_FLOAT.
53be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
54be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLenum DataType;
55be0765cd6ec47cf068775197f312a1123e044566Brian Paul
56be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte RedBits;
57be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte GreenBits;
58be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BlueBits;
59be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte AlphaBits;
60be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte LuminanceBits;
61be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte IntensityBits;
62be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte IndexBits;
63be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte DepthBits;
64be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte StencilBits;
65be0765cd6ec47cf068775197f312a1123e044566Brian Paul
66be0765cd6ec47cf068775197f312a1123e044566Brian Paul   /**
67be0765cd6ec47cf068775197f312a1123e044566Brian Paul    * To describe compressed formats.  If not compressed, Width=Height=1.
68be0765cd6ec47cf068775197f312a1123e044566Brian Paul    */
69be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BlockWidth, BlockHeight;
70be0765cd6ec47cf068775197f312a1123e044566Brian Paul   GLubyte BytesPerBlock;
71be0765cd6ec47cf068775197f312a1123e044566Brian Paul};
72be0765cd6ec47cf068775197f312a1123e044566Brian Paul
73be0765cd6ec47cf068775197f312a1123e044566Brian Paul
74be0765cd6ec47cf068775197f312a1123e044566Brian Paul/**
75813870fd9588de101f68728507cff726d7513695Brian Paul * Info about each format.
76813870fd9588de101f68728507cff726d7513695Brian Paul * These must be in the same order as the MESA_FORMAT_* enums so that
77813870fd9588de101f68728507cff726d7513695Brian Paul * we can do lookups without searching.
78813870fd9588de101f68728507cff726d7513695Brian Paul */
79813870fd9588de101f68728507cff726d7513695Brian Paulstatic struct gl_format_info format_info[MESA_FORMAT_COUNT] =
80813870fd9588de101f68728507cff726d7513695Brian Paul{
81813870fd9588de101f68728507cff726d7513695Brian Paul   {
82e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      MESA_FORMAT_NONE,            /* Name */
83bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_NONE",          /* StrName */
84e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* BaseFormat */
85e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* DataType */
86e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
87e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
88e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0                      /* BlockWidth/Height,Bytes */
89e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   },
90e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   {
91813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888,        /* Name */
92bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA8888",      /* StrName */
93813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
94813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
95813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
96813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
97813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
98813870fd9588de101f68728507cff726d7513695Brian Paul   },
99813870fd9588de101f68728507cff726d7513695Brian Paul   {
100813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888_REV,    /* Name */
101bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA8888_REV",  /* StrName */
102813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
103813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
104813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
105813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
106813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
107813870fd9588de101f68728507cff726d7513695Brian Paul   },
108813870fd9588de101f68728507cff726d7513695Brian Paul   {
109813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888,        /* Name */
110bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB8888",      /* StrName */
111813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
112813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
113813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
114813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
115813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
116813870fd9588de101f68728507cff726d7513695Brian Paul   },
117813870fd9588de101f68728507cff726d7513695Brian Paul   {
118813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888_REV,    /* Name */
119bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB8888_REV",  /* StrName */
120813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
121813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
122813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
123813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
124813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
125813870fd9588de101f68728507cff726d7513695Brian Paul   },
126813870fd9588de101f68728507cff726d7513695Brian Paul   {
12774d61d03b54d72217d463c248468cdcd09320efcBrian Paul      MESA_FORMAT_XRGB8888,        /* Name */
128bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_XRGB8888",      /* StrName */
12974d61d03b54d72217d463c248468cdcd09320efcBrian Paul      GL_RGB,                      /* BaseFormat */
13074d61d03b54d72217d463c248468cdcd09320efcBrian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
13174d61d03b54d72217d463c248468cdcd09320efcBrian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
13274d61d03b54d72217d463c248468cdcd09320efcBrian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
13374d61d03b54d72217d463c248468cdcd09320efcBrian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
13474d61d03b54d72217d463c248468cdcd09320efcBrian Paul   },
13574d61d03b54d72217d463c248468cdcd09320efcBrian Paul   {
1362d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      MESA_FORMAT_XRGB8888_REV,    /* Name */
1372d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      "MESA_FORMAT_XRGB8888_REV",  /* StrName */
1382d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      GL_RGB,                      /* BaseFormat */
1392d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      GL_UNSIGNED_NORMALIZED,      /* DataType */
1402d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
1412d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
1422d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer      1, 1, 4                      /* BlockWidth/Height,Bytes */
1432d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer   },
1442d0c2952566810ef1b277b49b064f4874a973112Michel Dänzer   {
145813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB888,          /* Name */
146bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB888",        /* StrName */
147813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
148813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
149813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
150813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
151813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
152813870fd9588de101f68728507cff726d7513695Brian Paul   },
153813870fd9588de101f68728507cff726d7513695Brian Paul   {
154813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_BGR888,          /* Name */
155bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_BGR888",        /* StrName */
156813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
157813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
158813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
159813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
160813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
161813870fd9588de101f68728507cff726d7513695Brian Paul   },
162813870fd9588de101f68728507cff726d7513695Brian Paul   {
163813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565,          /* Name */
164bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB565",        /* StrName */
165813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
166813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
167813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
168813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
169813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
170813870fd9588de101f68728507cff726d7513695Brian Paul   },
171813870fd9588de101f68728507cff726d7513695Brian Paul   {
172813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565_REV,      /* Name */
173bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB565_REV",    /* StrName */
174813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
175813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
176813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
177813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
178813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
179813870fd9588de101f68728507cff726d7513695Brian Paul   },
180813870fd9588de101f68728507cff726d7513695Brian Paul   {
181813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444,        /* Name */
182bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB4444",      /* StrName */
183813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
184813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
185813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
186813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
187813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
188813870fd9588de101f68728507cff726d7513695Brian Paul   },
189813870fd9588de101f68728507cff726d7513695Brian Paul   {
190813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444_REV,    /* Name */
191bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB4444_REV",  /* StrName */
192813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
193813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
194813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
195813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
196813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
197813870fd9588de101f68728507cff726d7513695Brian Paul   },
198813870fd9588de101f68728507cff726d7513695Brian Paul   {
199813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA5551,        /* Name */
200bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA5551",      /* StrName */
201813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
202813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
203813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
204813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
205813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
206813870fd9588de101f68728507cff726d7513695Brian Paul   },
207813870fd9588de101f68728507cff726d7513695Brian Paul   {
208813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555,        /* Name */
209bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB1555",      /* StrName */
210813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
211813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
212813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
213813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
214813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
215813870fd9588de101f68728507cff726d7513695Brian Paul   },
216813870fd9588de101f68728507cff726d7513695Brian Paul   {
217813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555_REV,    /* Name */
218bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ARGB1555_REV",  /* StrName */
219813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
220813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
221813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
222813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
223813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
224813870fd9588de101f68728507cff726d7513695Brian Paul   },
225813870fd9588de101f68728507cff726d7513695Brian Paul   {
226bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák      MESA_FORMAT_AL44,            /* Name */
227bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák      "MESA_FORMAT_AL44",          /* StrName */
228bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák      GL_LUMINANCE_ALPHA,          /* BaseFormat */
229bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák      GL_UNSIGNED_NORMALIZED,      /* DataType */
230bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák      0, 0, 0, 4,                  /* Red/Green/Blue/AlphaBits */
231bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák      4, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
232bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák      1, 1, 1                      /* BlockWidth/Height,Bytes */
233bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák   },
234bae9d511f343c7bd5eb66d1d1d18d32b47e738e3Marek Olšák   {
235813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88,            /* Name */
236bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_AL88",          /* StrName */
237813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
238813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
239813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
240813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
241813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
242813870fd9588de101f68728507cff726d7513695Brian Paul   },
243813870fd9588de101f68728507cff726d7513695Brian Paul   {
244813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88_REV,        /* Name */
245bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_AL88_REV",      /* StrName */
246813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
247813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
248813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
249813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
250813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
251813870fd9588de101f68728507cff726d7513695Brian Paul   },
252813870fd9588de101f68728507cff726d7513695Brian Paul   {
253eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      MESA_FORMAT_AL1616,          /* Name */
254eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      "MESA_FORMAT_AL1616",        /* StrName */
255eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_LUMINANCE_ALPHA,          /* BaseFormat */
256eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_UNSIGNED_NORMALIZED,      /* DataType */
257eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
258eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
259eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      1, 1, 4                      /* BlockWidth/Height,Bytes */
260eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   },
261eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   {
262eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      MESA_FORMAT_AL1616_REV,      /* Name */
263eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      "MESA_FORMAT_AL1616_REV",    /* StrName */
264eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_LUMINANCE_ALPHA,          /* BaseFormat */
265eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      GL_UNSIGNED_NORMALIZED,      /* DataType */
266eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
267eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
268eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      1, 1, 4                      /* BlockWidth/Height,Bytes */
269eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   },
270eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   {
271813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB332,          /* Name */
272bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB332",        /* StrName */
273813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
274813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
275813870fd9588de101f68728507cff726d7513695Brian Paul      3, 3, 2, 0,                  /* Red/Green/Blue/AlphaBits */
276813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
277813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
278813870fd9588de101f68728507cff726d7513695Brian Paul   },
279813870fd9588de101f68728507cff726d7513695Brian Paul   {
280813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_A8,              /* Name */
281bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_A8",            /* StrName */
282813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,                    /* BaseFormat */
283813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
284813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
285813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
286813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
287813870fd9588de101f68728507cff726d7513695Brian Paul   },
288813870fd9588de101f68728507cff726d7513695Brian Paul   {
289eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák      MESA_FORMAT_A16,             /* Name */
290eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák      "MESA_FORMAT_A16",           /* StrName */
291eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák      GL_ALPHA,                    /* BaseFormat */
292eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák      GL_UNSIGNED_NORMALIZED,      /* DataType */
293eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
294eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
295eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák      1, 1, 2                      /* BlockWidth/Height,Bytes */
296eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák   },
297eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák   {
298813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_L8,              /* Name */
299bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_L8",            /* StrName */
300813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE,                /* BaseFormat */
301813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
302813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
303813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
304813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
305813870fd9588de101f68728507cff726d7513695Brian Paul   },
306813870fd9588de101f68728507cff726d7513695Brian Paul   {
307bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák      MESA_FORMAT_L16,             /* Name */
308bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák      "MESA_FORMAT_L16",           /* StrName */
309bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák      GL_LUMINANCE,                /* BaseFormat */
310bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák      GL_UNSIGNED_NORMALIZED,      /* DataType */
311bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
312bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
313bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák      1, 1, 2                      /* BlockWidth/Height,Bytes */
314bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák   },
315bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák   {
316813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_I8,              /* Name */
317bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_I8",            /* StrName */
318813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,                /* BaseFormat */
319813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
320813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
321813870fd9588de101f68728507cff726d7513695Brian Paul      0, 8, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
322813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
323813870fd9588de101f68728507cff726d7513695Brian Paul   },
324813870fd9588de101f68728507cff726d7513695Brian Paul   {
325fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák      MESA_FORMAT_I16,             /* Name */
326fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák      "MESA_FORMAT_I16",           /* StrName */
327fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák      GL_INTENSITY,                /* BaseFormat */
328fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák      GL_UNSIGNED_NORMALIZED,      /* DataType */
329fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
330fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák      0, 16, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
331fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák      1, 1, 2                      /* BlockWidth/Height,Bytes */
332fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák   },
333fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák   {
334813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_CI8,             /* Name */
335bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_CI8",           /* StrName */
336813870fd9588de101f68728507cff726d7513695Brian Paul      GL_COLOR_INDEX,              /* BaseFormat */
337813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
338813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
339813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 8, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
340813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
341813870fd9588de101f68728507cff726d7513695Brian Paul   },
342813870fd9588de101f68728507cff726d7513695Brian Paul   {
343813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR,           /* Name */
344bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_YCBCR",         /* StrName */
345813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
346813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
347813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
348813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
349813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
350813870fd9588de101f68728507cff726d7513695Brian Paul   },
351813870fd9588de101f68728507cff726d7513695Brian Paul   {
352813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR_REV,       /* Name */
353bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_YCBCR_REV",     /* StrName */
354813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
355813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
356813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
357813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
358813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
359813870fd9588de101f68728507cff726d7513695Brian Paul   },
360813870fd9588de101f68728507cff726d7513695Brian Paul   {
3615d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_R8,
3625d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_R8",
3635d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RED,
3645d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3655d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      8, 0, 0, 0,
3665d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3675d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 1
3685d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3695d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3705d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG88,
3715d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG88",
3725d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
3735d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3745d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      8, 8, 0, 0,
3755d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3765d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 2
3775d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3785d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3795d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG88_REV,
3805d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG88_REV",
3815d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
3825d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3835d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      8, 8, 0, 0,
3845d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3855d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 2
3865d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3875d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3885d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_R16,
3895d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_R16",
3905d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RED,
3915d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
3925d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      16, 0, 0, 0,
3935d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
3945d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 2
3955d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
3965d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
3975d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG1616,
3985d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG1616",
3995d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
4005d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
4015d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      16, 16, 0, 0,
4025d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
4035d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 4
4045d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
4055d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
4065d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      MESA_FORMAT_RG1616_REV,
4075d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      "MESA_FORMAT_RG1616_REV",
4085d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_RG,
4095d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      GL_UNSIGNED_NORMALIZED,
4105d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      16, 16, 0, 0,
4115d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      0, 0, 0, 0, 0,
4125d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      1, 1, 4
4135d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   },
4145d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   {
415621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      MESA_FORMAT_ARGB2101010,
416621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      "MESA_FORMAT_ARGB2101010",
417621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      GL_RGBA,
418621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      GL_UNSIGNED_NORMALIZED,
419621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      10, 10, 10, 2,
420621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      0, 0, 0, 0, 0,
421621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      1, 1, 4
422621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák   },
423621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák   {
424813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z24_S8,          /* Name */
425bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z24_S8",        /* StrName */
426813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
427813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
428813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
429813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
430813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
431813870fd9588de101f68728507cff726d7513695Brian Paul   },
432813870fd9588de101f68728507cff726d7513695Brian Paul   {
433813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8_Z24,          /* Name */
434bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8_Z24",        /* StrName */
435813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
436813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
437813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
438813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
439813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
440813870fd9588de101f68728507cff726d7513695Brian Paul   },
441813870fd9588de101f68728507cff726d7513695Brian Paul   {
442813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z16,             /* Name */
443bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z16",           /* StrName */
444813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
445813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
446813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
447813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16, 0,              /* Lum/Int/Index/Depth/StencilBits */
448813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
449813870fd9588de101f68728507cff726d7513695Brian Paul   },
450813870fd9588de101f68728507cff726d7513695Brian Paul   {
451e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      MESA_FORMAT_X8_Z24,          /* Name */
452bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_X8_Z24",        /* StrName */
453e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
454e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      GL_UNSIGNED_INT,             /* DataType */
455e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
456e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
457e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
458e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   },
459e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   {
460c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      MESA_FORMAT_Z24_X8,          /* Name */
461c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      "MESA_FORMAT_Z24_X8",        /* StrName */
462c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_DEPTH_COMPONENT,          /* BaseFormat */
463c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      GL_UNSIGNED_INT,             /* DataType */
464c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
465c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
466c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      1, 1, 4                      /* BlockWidth/Height,Bytes */
467c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   },
468c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   {
469813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z32,             /* Name */
470bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_Z32",           /* StrName */
471813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
472813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
473813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
474813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
475813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
476813870fd9588de101f68728507cff726d7513695Brian Paul   },
477813870fd9588de101f68728507cff726d7513695Brian Paul   {
478813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8,              /* Name */
479bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_S8",            /* StrName */
480813870fd9588de101f68728507cff726d7513695Brian Paul      GL_STENCIL_INDEX,            /* BaseFormat */
481813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
482813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
483813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
484813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
485813870fd9588de101f68728507cff726d7513695Brian Paul   },
486813870fd9588de101f68728507cff726d7513695Brian Paul   {
487813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB8,
488bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB8",
489813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
490813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
491813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,
492813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
493813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3
494813870fd9588de101f68728507cff726d7513695Brian Paul   },
495813870fd9588de101f68728507cff726d7513695Brian Paul   {
496813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA8,
497bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA8",
498813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
499813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
500813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
501813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
502813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
503813870fd9588de101f68728507cff726d7513695Brian Paul   },
504813870fd9588de101f68728507cff726d7513695Brian Paul   {
505813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SARGB8,
506bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SARGB8",
507813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
508813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
509813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
510813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
511813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
512813870fd9588de101f68728507cff726d7513695Brian Paul   },
513813870fd9588de101f68728507cff726d7513695Brian Paul   {
514813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SL8,
515bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SL8",
51671cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      GL_LUMINANCE,
517813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
51871cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      0, 0, 0, 0,
519813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
52071cd40bccf8dcbf628a7d7d3f7c877d547338c5aBrian Paul      1, 1, 1
521813870fd9588de101f68728507cff726d7513695Brian Paul   },
522813870fd9588de101f68728507cff726d7513695Brian Paul   {
523813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SLA8,
524bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SLA8",
525813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
526813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
527813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,
528813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
529813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
530813870fd9588de101f68728507cff726d7513695Brian Paul   },
531813870fd9588de101f68728507cff726d7513695Brian Paul   {
532813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB_DXT1,       /* Name */
533bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGB_DXT1",     /* StrName */
534813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
535813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
536813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
537813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
538813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
539813870fd9588de101f68728507cff726d7513695Brian Paul   },
540813870fd9588de101f68728507cff726d7513695Brian Paul   {
541813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT1,
542bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT1",
543813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
544813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
545813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
546813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
547813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
548813870fd9588de101f68728507cff726d7513695Brian Paul   },
549813870fd9588de101f68728507cff726d7513695Brian Paul   {
550813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT3,
551bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT3",
552813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
553813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
554813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
555813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
556813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
557813870fd9588de101f68728507cff726d7513695Brian Paul   },
558813870fd9588de101f68728507cff726d7513695Brian Paul   {
559813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT5,
560bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SRGBA_DXT5",
561813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
562813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
563813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
564813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
565813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
566813870fd9588de101f68728507cff726d7513695Brian Paul   },
567813870fd9588de101f68728507cff726d7513695Brian Paul
568813870fd9588de101f68728507cff726d7513695Brian Paul   {
569813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FXT1,
570bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FXT1",
571813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
572813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
573c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/BlueBits */
574813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
575813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
576813870fd9588de101f68728507cff726d7513695Brian Paul   },
577813870fd9588de101f68728507cff726d7513695Brian Paul   {
578813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FXT1,
579bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FXT1",
580813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
581813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
582c02cd82b463661def7842f910dc561313559df80Brian Paul      4, 4, 4, 1,                  /* approx Red/Green/Blue/AlphaBits */
583813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
584813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
585813870fd9588de101f68728507cff726d7513695Brian Paul   },
586813870fd9588de101f68728507cff726d7513695Brian Paul
587813870fd9588de101f68728507cff726d7513695Brian Paul   {
588813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_DXT1,        /* Name */
589bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_DXT1",      /* StrName */
590813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
591813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
592813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
593813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
594813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
595813870fd9588de101f68728507cff726d7513695Brian Paul   },
596813870fd9588de101f68728507cff726d7513695Brian Paul   {
597813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT1,
598bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT1",
599813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
600813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
601813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
602813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
603813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
604813870fd9588de101f68728507cff726d7513695Brian Paul   },
605813870fd9588de101f68728507cff726d7513695Brian Paul   {
606813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT3,
607bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT3",
608813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
609813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
610813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
611813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
612813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
613813870fd9588de101f68728507cff726d7513695Brian Paul   },
614813870fd9588de101f68728507cff726d7513695Brian Paul   {
615813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT5,
616bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_DXT5",
617813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
618813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
619813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
620813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
621813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
622813870fd9588de101f68728507cff726d7513695Brian Paul   },
623813870fd9588de101f68728507cff726d7513695Brian Paul   {
624813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT32,
625bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT32",
626813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
627813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
628813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 32,
629813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
630813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 16
631813870fd9588de101f68728507cff726d7513695Brian Paul   },
632813870fd9588de101f68728507cff726d7513695Brian Paul   {
633813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT16,
634bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGBA_FLOAT16",
635813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
636813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
637813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 16,
638813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
639813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
640813870fd9588de101f68728507cff726d7513695Brian Paul   },
641813870fd9588de101f68728507cff726d7513695Brian Paul   {
642813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT32,
643bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT32",
644813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
645813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
646813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 0,
647813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
648813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 12
649813870fd9588de101f68728507cff726d7513695Brian Paul   },
650813870fd9588de101f68728507cff726d7513695Brian Paul   {
651813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT16,
652bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_RGB_FLOAT16",
653813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
654813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
655813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 0,
656813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
657813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 6
658813870fd9588de101f68728507cff726d7513695Brian Paul   },
659813870fd9588de101f68728507cff726d7513695Brian Paul   {
660813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT32,
661bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT32",
662813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
663813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
664813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
665813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
666813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
667813870fd9588de101f68728507cff726d7513695Brian Paul   },
668813870fd9588de101f68728507cff726d7513695Brian Paul   {
669813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT16,
670bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_ALPHA_FLOAT16",
671813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
672813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
673813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
674813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
675813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
676813870fd9588de101f68728507cff726d7513695Brian Paul   },
677813870fd9588de101f68728507cff726d7513695Brian Paul   {
678813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT32,
679bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT32",
68019648fcf015e512283e93ab9de4a3e969d577e59Marek Olšák      GL_LUMINANCE,
681813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
682813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
683813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
684813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
685813870fd9588de101f68728507cff726d7513695Brian Paul   },
686813870fd9588de101f68728507cff726d7513695Brian Paul   {
687813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT16,
688bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_FLOAT16",
68919648fcf015e512283e93ab9de4a3e969d577e59Marek Olšák      GL_LUMINANCE,
690813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
691813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
692813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
693813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
694813870fd9588de101f68728507cff726d7513695Brian Paul   },
695813870fd9588de101f68728507cff726d7513695Brian Paul   {
696813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
697bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32",
698813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
699813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
700813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
701813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
702813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
703813870fd9588de101f68728507cff726d7513695Brian Paul   },
704813870fd9588de101f68728507cff726d7513695Brian Paul   {
705813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
706bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16",
707813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
708813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
709813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
710813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
711813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
712813870fd9588de101f68728507cff726d7513695Brian Paul   },
713813870fd9588de101f68728507cff726d7513695Brian Paul   {
714813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT32,
715bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT32",
716813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
717813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
718813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
719813870fd9588de101f68728507cff726d7513695Brian Paul      0, 32, 0, 0, 0,
720813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
721813870fd9588de101f68728507cff726d7513695Brian Paul   },
722813870fd9588de101f68728507cff726d7513695Brian Paul   {
723813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT16,
724bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_INTENSITY_FLOAT16",
725813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
726813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
727813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
728813870fd9588de101f68728507cff726d7513695Brian Paul      0, 16, 0, 0, 0,
729813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
730813870fd9588de101f68728507cff726d7513695Brian Paul   },
7310ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   {
7320ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      MESA_FORMAT_R_FLOAT32,
7330ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      "MESA_FORMAT_R_FLOAT32",
7340ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_RED,
7350ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_FLOAT,
7360ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      32, 0, 0, 0,
7370ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      0, 0, 0, 0, 0,
7380ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      1, 1, 4
7390ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   },
7400ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   {
7410ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      MESA_FORMAT_R_FLOAT16,
7420ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      "MESA_FORMAT_R_FLOAT16",
7430ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_RED,
7440ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_FLOAT,
7450ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      16, 0, 0, 0,
7460ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      0, 0, 0, 0, 0,
7470ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      1, 1, 2
7480ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   },
7490ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   {
7500ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      MESA_FORMAT_RG_FLOAT32,
7510ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      "MESA_FORMAT_RG_FLOAT32",
7520ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_RG,
7530ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_FLOAT,
7540ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      32, 32, 0, 0,
7550ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      0, 0, 0, 0, 0,
7560ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      1, 1, 8
7570ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   },
7580ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   {
7590ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      MESA_FORMAT_RG_FLOAT16,
7600ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      "MESA_FORMAT_RG_FLOAT16",
7610ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_RG,
7620ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      GL_FLOAT,
7630ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      16, 16, 0, 0,
7640ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      0, 0, 0, 0, 0,
7650ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák      1, 1, 4
7660ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   },
767abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
768abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /* unnormalized signed int formats */
769abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
770abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT8,
771abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT8",
772abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
773abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
774abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      8, 8, 8, 8,
775abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
776abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 4
777abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
778abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
779abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT16,
780abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT16",
781abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
782abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
783abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      16, 16, 16, 16,
784abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
785abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 8
786abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
787abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
788abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_INT32,
789abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_INT32",
790abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
791abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_INT,
792abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      32, 32, 32, 32,
793abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
794abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 16
795abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
796abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
797abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /* unnormalized unsigned int formats */
798abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
799abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT8,
800abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT8",
801abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
802abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
803abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      8, 8, 8, 8,
804abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
805abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 4
806abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
807abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
808abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT16,
809abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT16",
810abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
811abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
812abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      16, 16, 16, 16,
813abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
814abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 8
815abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
816abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   {
817abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      MESA_FORMAT_RGBA_UINT32,
818abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      "MESA_FORMAT_RGBA_UINT32",
819abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_RGBA,
820abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      GL_UNSIGNED_INT,
821abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      32, 32, 32, 32,
822abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      0, 0, 0, 0, 0,
823abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      1, 1, 16
824abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   },
825abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
826abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
827813870fd9588de101f68728507cff726d7513695Brian Paul   {
828813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_DUDV8,
829bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_DUDV8",
830813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DUDV_ATI,
831813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
832813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
833813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
834813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
835813870fd9588de101f68728507cff726d7513695Brian Paul   },
83684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
83784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 8 bits / channel */
83884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
83984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_R8,        /* Name */
84084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_R8",      /* StrName */
8410073f50cd47c48c706b4524364b9c0594804febfBrian Paul      GL_RED,                       /* BaseFormat */
84284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,         /* DataType */
84384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 0, 0, 0,                   /* Red/Green/Blue/AlphaBits */
84484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,                /* Lum/Int/Index/Depth/StencilBits */
84584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 1                       /* BlockWidth/Height,Bytes */
84684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
84784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
8480be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_RG88_REV,
8490be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_RG88_REV",
8500073f50cd47c48c706b4524364b9c0594804febfBrian Paul      GL_RG,
85184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
85284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 0, 0,
85384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
85484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
85584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
85684407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
85784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGBX8888,
85884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGBX8888",
8590073f50cd47c48c706b4524364b9c0594804febfBrian Paul      GL_RGB,
86084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
86184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      8, 8, 8, 0,
86284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
86384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4                       /* 4 bpp, but no alpha */
86484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
865813870fd9588de101f68728507cff726d7513695Brian Paul   {
866813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888,
867bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888",
868813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
869813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
870813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
871813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
872813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
873813870fd9588de101f68728507cff726d7513695Brian Paul   },
874813870fd9588de101f68728507cff726d7513695Brian Paul   {
875813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888_REV,
876bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA8888_REV",
877813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
878813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
879813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
880813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
881813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
882813870fd9588de101f68728507cff726d7513695Brian Paul   },
88384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul
88484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   /* Signed 16 bits / channel */
88584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
8860be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_R16,
8870be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_R16",
8880073f50cd47c48c706b4524364b9c0594804febfBrian Paul      GL_RED,
88984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
89084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 0, 0, 0,
89184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
89284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 2
89384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
89484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
8950be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_GR1616,
8960be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_GR1616",
8970073f50cd47c48c706b4524364b9c0594804febfBrian Paul      GL_RG,
89884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
89984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 0, 0,
90084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
90184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 4
90284407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
90384407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   {
90484407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      MESA_FORMAT_SIGNED_RGB_16,
90584407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      "MESA_FORMAT_SIGNED_RGB_16",
9060073f50cd47c48c706b4524364b9c0594804febfBrian Paul      GL_RGB,
90784407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      GL_SIGNED_NORMALIZED,
90884407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      16, 16, 16, 0,
90984407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      0, 0, 0, 0, 0,
91084407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul      1, 1, 6
91184407d7365e101c36a83fd0a58c58b0c0c57db14Brian Paul   },
912c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul   {
913c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      MESA_FORMAT_SIGNED_RGBA_16,
914bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul      "MESA_FORMAT_SIGNED_RGBA_16",
915c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_RGBA,
916c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      GL_SIGNED_NORMALIZED,
917c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      16, 16, 16, 16,
918c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      0, 0, 0, 0, 0,
919c13b9a141d77845517bf7cab20cff6115c31e67dBrian Paul      1, 1, 8
92017e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   },
92117e96718946486ef77927fcf3bb299d8bff32b98Brian Paul   {
92217e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      MESA_FORMAT_RGBA_16,
92317e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      "MESA_FORMAT_RGBA_16",
92417e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_RGBA,
92517e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      GL_UNSIGNED_NORMALIZED,
92617e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      16, 16, 16, 16,
92717e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      0, 0, 0, 0, 0,
92817e96718946486ef77927fcf3bb299d8bff32b98Brian Paul      1, 1, 8
9298d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   },
9308d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   {
9318d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     MESA_FORMAT_RED_RGTC1,
9328d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     "MESA_FORMAT_RED_RGTC1",
9338d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_RED,
9348d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_UNSIGNED_NORMALIZED,
9358d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 0, 0, 0,
9368d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     0, 0, 0, 0, 0,
9378d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 4, 8                     /* 8 bytes per 4x4 block */
9388d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   },
9398d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   {
9408d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     MESA_FORMAT_SIGNED_RED_RGTC1,
9418d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     "MESA_FORMAT_SIGNED_RED_RGTC1",
9428d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_RED,
9438d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_SIGNED_NORMALIZED,
9448d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 0, 0, 0,
9458d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     0, 0, 0, 0, 0,
9468d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 4, 8                     /* 8 bytes per 4x4 block */
9478d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   },
9488d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   {
9498d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     MESA_FORMAT_RG_RGTC2,
9508d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     "MESA_FORMAT_RG_RGTC2",
9518d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_RG,
9528d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_UNSIGNED_NORMALIZED,
9538d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 4, 0, 0,
9548d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     0, 0, 0, 0, 0,
9558d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 4, 16                     /* 16 bytes per 4x4 block */
9568d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   },
9578d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   {
9588d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     MESA_FORMAT_SIGNED_RG_RGTC2,
9598d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     "MESA_FORMAT_SIGNED_RG_RGTC2",
9608d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_RG,
9618d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     GL_SIGNED_NORMALIZED,
9628d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 4, 0, 0,
9638d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     0, 0, 0, 0, 0,
9648d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie     4, 4, 16                     /* 16 bytes per 4x4 block */
9658d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   },
9667d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   {
9677d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     MESA_FORMAT_L_LATC1,
9687d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     "MESA_FORMAT_L_LATC1",
9697d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_LUMINANCE,
9707d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_UNSIGNED_NORMALIZED,
9717d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     0, 0, 0, 0,
9727d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 0, 0, 0, 0,
9737d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 4, 8                     /* 8 bytes per 4x4 block */
9747d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   },
9757d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   {
9767d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     MESA_FORMAT_SIGNED_L_LATC1,
9777d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     "MESA_FORMAT_SIGNED_L_LATC1",
9787d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_LUMINANCE,
9797d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_SIGNED_NORMALIZED,
9807d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     0, 0, 0, 0,
9817d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 0, 0, 0, 0,
9827d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 4, 8                     /* 8 bytes per 4x4 block */
9837d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   },
9847d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   {
9857d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     MESA_FORMAT_LA_LATC2,
9867d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     "MESA_FORMAT_LA_LATC2",
9877d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_LUMINANCE_ALPHA,
9887d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_UNSIGNED_NORMALIZED,
9897d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     0, 0, 0, 4,
9907d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 0, 0, 0, 0,
9917d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 4, 16                     /* 16 bytes per 4x4 block */
9927d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   },
9937d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   {
9947d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     MESA_FORMAT_SIGNED_LA_LATC2,
9957d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     "MESA_FORMAT_SIGNED_LA_LATC2",
9967d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_LUMINANCE_ALPHA,
9977d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     GL_SIGNED_NORMALIZED,
9987d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     0, 0, 0, 4,
9997d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 0, 0, 0, 0,
10007d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák     4, 4, 16                     /* 16 bytes per 4x4 block */
10017d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   },
10020be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák
10030be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   /* Signed formats from EXT_texture_snorm that are not in GL3.1 */
10040be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10050be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_A8,
10060be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_A8",
10070be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_ALPHA,
10080be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10090be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 8,
10100be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 0, 0,
10110be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 1
10120be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   },
10130be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10140be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_L8,
10150be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_L8",
10160be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_LUMINANCE,
10170be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10180be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 0,
10190be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      8, 0, 0, 0, 0,
10200be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 1
10210be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   },
10220be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10230be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_AL88,
10240be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_AL88",
10250be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_LUMINANCE_ALPHA,
10260be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10270be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 8,
10280be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      8, 0, 0, 0, 0,
10290be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 2
10300be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   },
10310be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10320be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_I8,
10330be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_I8",
10340be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_INTENSITY,
10350be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10360be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 0,
10370be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 8, 0, 0, 0,
10380be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 1
10390be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   },
10400be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10410be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_A16,
10420be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_A16",
10430be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_ALPHA,
10440be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10450be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 16,
10460be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 0, 0,
10470be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 2
10480be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   },
10490be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10500be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_L16,
10510be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_L16",
10520be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_LUMINANCE,
10530be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10540be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 0,
10550be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      16, 0, 0, 0, 0,
10560be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 2
10570be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   },
10580be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10590be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_AL1616,
10600be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_AL1616",
10610be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_LUMINANCE_ALPHA,
10620be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10630be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 16,
10640be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      16, 0, 0, 0, 0,
10650be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 4
10660be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   },
10670be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   {
10680be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      MESA_FORMAT_SIGNED_I16,
10690be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      "MESA_FORMAT_SIGNED_I16",
10700be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_INTENSITY,
10710be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      GL_SIGNED_NORMALIZED,
10720be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 0, 0, 0,
10730be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      0, 16, 0, 0, 0,
10740be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák      1, 1, 2
10750be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   }
1076813870fd9588de101f68728507cff726d7513695Brian Paul};
1077813870fd9588de101f68728507cff726d7513695Brian Paul
1078813870fd9588de101f68728507cff726d7513695Brian Paul
1079813870fd9588de101f68728507cff726d7513695Brian Paul
1080813870fd9588de101f68728507cff726d7513695Brian Paulstatic const struct gl_format_info *
1081813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_info(gl_format format)
1082813870fd9588de101f68728507cff726d7513695Brian Paul{
1083813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = &format_info[format];
1084813870fd9588de101f68728507cff726d7513695Brian Paul   assert(info->Name == format);
1085813870fd9588de101f68728507cff726d7513695Brian Paul   return info;
1086813870fd9588de101f68728507cff726d7513695Brian Paul}
1087813870fd9588de101f68728507cff726d7513695Brian Paul
1088813870fd9588de101f68728507cff726d7513695Brian Paul
1089bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul/** Return string name of format (for debugging) */
1090bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paulconst char *
1091bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul_mesa_get_format_name(gl_format format)
1092bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul{
1093bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1094bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul   return info->StrName;
1095bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul}
1096bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
1097bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
1098bee6794eb126bc8af87726a2456d0ebc36eb721dBrian Paul
1099eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
1100eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bytes needed to store a block of pixels in the given format.
1101eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Normally, a block is 1x1 (a single pixel).  But for compressed formats
1102eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * a block may be 4x4 or 8x4, etc.
1103eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
1104813870fd9588de101f68728507cff726d7513695Brian PaulGLuint
1105813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_bytes(gl_format format)
1106813870fd9588de101f68728507cff726d7513695Brian Paul{
1107813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1108813870fd9588de101f68728507cff726d7513695Brian Paul   ASSERT(info->BytesPerBlock);
1109813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BytesPerBlock;
1110813870fd9588de101f68728507cff726d7513695Brian Paul}
1111813870fd9588de101f68728507cff726d7513695Brian Paul
1112813870fd9588de101f68728507cff726d7513695Brian Paul
1113eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
1114eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return bits per component for the given format.
1115eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param format  one of MESA_FORMAT_x
1116eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * \param pname  the component, such as GL_RED_BITS, GL_TEXTURE_BLUE_BITS, etc.
1117eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
11185978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLint
11195978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_bits(gl_format format, GLenum pname)
11205978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
11215978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
11225978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
11235978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   switch (pname) {
1124edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RED_BITS:
11255978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_RED_SIZE:
1126edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_RED_SIZE_EXT:
1127edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
11285978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->RedBits;
1129edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_GREEN_BITS:
11305978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_GREEN_SIZE:
1131edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_GREEN_SIZE_EXT:
1132edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
11335978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->GreenBits;
1134edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_BLUE_BITS:
11355978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_BLUE_SIZE:
1136edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_BLUE_SIZE_EXT:
1137edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
11385978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->BlueBits;
1139edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_ALPHA_BITS:
11405978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_ALPHA_SIZE:
1141edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
1142edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
11435978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->AlphaBits;
11445978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INTENSITY_SIZE:
11455978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IntensityBits;
11465978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_LUMINANCE_SIZE:
11475978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->LuminanceBits;
1148edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_INDEX_BITS:
11495978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_INDEX_SIZE_EXT:
11505978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->IndexBits;
1151edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_DEPTH_BITS:
11525978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_DEPTH_SIZE_ARB:
1153edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
1154edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
11555978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->DepthBits;
1156edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_STENCIL_BITS:
11575978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   case GL_TEXTURE_STENCIL_SIZE_EXT:
1158edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
1159edfd2f7c4f942ed0c1aa1238ab0684ee7dd889a2Brian Paul   case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
11605978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return info->StencilBits;
11615978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   default:
11625978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      _mesa_problem(NULL, "bad pname in _mesa_get_format_bits()");
11635978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul      return 0;
11645978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   }
11655978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
11665978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
11675978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
1168eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
1169eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the data type (or more specifically, the data representation)
1170eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * for the given format.
1171eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * The return value will be one of:
1172eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_NORMALIZED = unsigned int representing [0,1]
1173eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_SIGNED_NORMALIZED = signed int representing [-1, 1]
1174eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_UNSIGNED_INT = an ordinary unsigned integer
1175f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul *    GL_INT = an ordinary signed integer
1176eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul *    GL_FLOAT = an ordinary float
1177eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
11785978cbdf7728df7952c9c04165ece23394a5fb95Brian PaulGLenum
11795978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul_mesa_get_format_datatype(gl_format format)
11805978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul{
11815978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
11825978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul   return info->DataType;
11835978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul}
11845978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
11855978cbdf7728df7952c9c04165ece23394a5fb95Brian Paul
1186eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/**
1187eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * Return the basic format for the given type.  The result will be
1188eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * one of GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA,
1189eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_INTENSITY, GL_YCBCR_MESA, GL_COLOR_INDEX, GL_DEPTH_COMPONENT,
1190eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul * GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
1191eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul */
1192813870fd9588de101f68728507cff726d7513695Brian PaulGLenum
1193813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_base_format(gl_format format)
1194813870fd9588de101f68728507cff726d7513695Brian Paul{
1195813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1196813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BaseFormat;
1197813870fd9588de101f68728507cff726d7513695Brian Paul}
1198813870fd9588de101f68728507cff726d7513695Brian Paul
1199813870fd9588de101f68728507cff726d7513695Brian Paul
12007b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul/**
12017b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * Return the block size (in pixels) for the given format.  Normally
12027b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * the block size is 1x1.  But compressed formats will have block sizes
12037b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * of 4x4 or 8x4 pixels, etc.
12047b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bw  returns block width in pixels
12057b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul * \param bh  returns block height in pixels
12067b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul */
12077b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paulvoid
12087b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh)
12097b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul{
12107b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
12117b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bw = info->BlockWidth;
12127b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul   *bh = info->BlockHeight;
12137b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul}
12147b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
12157b16c43e436715bef9118fdb28ca8a9ad91b1e66Brian Paul
1216eb732b1bbb4e4bdd018ee9a1653a62fd8dce2d55Brian Paul/** Is the given format a compressed format? */
1217813870fd9588de101f68728507cff726d7513695Brian PaulGLboolean
1218813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_is_format_compressed(gl_format format)
1219813870fd9588de101f68728507cff726d7513695Brian Paul{
1220813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1221813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BlockWidth > 1 || info->BlockHeight > 1;
1222813870fd9588de101f68728507cff726d7513695Brian Paul}
1223813870fd9588de101f68728507cff726d7513695Brian Paul
1224813870fd9588de101f68728507cff726d7513695Brian Paul
1225813870fd9588de101f68728507cff726d7513695Brian Paul/**
1226e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler * Determine if the given format represents a packed depth/stencil buffer.
1227e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler */
1228e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick BowlerGLboolean
1229e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler_mesa_is_format_packed_depth_stencil(gl_format format)
1230e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler{
1231f57df7f2130dfe20a6f7e75cfc1f5d4e1717d098Nick Bowler   const struct gl_format_info *info = _mesa_get_format_info(format);
1232e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
1233f57df7f2130dfe20a6f7e75cfc1f5d4e1717d098Nick Bowler   return info->BaseFormat == GL_DEPTH_STENCIL;
1234e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler}
1235e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
1236e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler
1237e71a9042cb5e046072d2ea8fbd22a01de625bf8aNick Bowler/**
1238ab50148fdafeb6496b4ab684e5b9a2355ccf542cBrian Paul * Is the given format a signed/unsigned integer color format?
1239f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul */
1240f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian PaulGLboolean
1241412b9608838b872bc294569b3ee913343a7e66f6Brian Paul_mesa_is_format_integer_color(gl_format format)
1242f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul{
1243f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1244ab50148fdafeb6496b4ab684e5b9a2355ccf542cBrian Paul   return (info->DataType == GL_INT || info->DataType == GL_UNSIGNED_INT) &&
1245ab50148fdafeb6496b4ab684e5b9a2355ccf542cBrian Paul      info->BaseFormat != GL_DEPTH_COMPONENT &&
1246ab50148fdafeb6496b4ab684e5b9a2355ccf542cBrian Paul      info->BaseFormat != GL_DEPTH_STENCIL &&
1247ab50148fdafeb6496b4ab684e5b9a2355ccf542cBrian Paul      info->BaseFormat != GL_STENCIL_INDEX;
1248f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul}
1249f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul
1250f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul
1251f5ed39e7e6dd31ea60477475d97d8a5ce6946cccBrian Paul/**
1252f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * Return color encoding for given format.
1253f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul * \return GL_LINEAR or GL_SRGB
1254f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul */
1255f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian PaulGLenum
1256f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul_mesa_get_format_color_encoding(gl_format format)
1257f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul{
1258f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   /* XXX this info should be encoded in gl_format_info */
1259f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   switch (format) {
1260f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB8:
1261f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA8:
1262f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SARGB8:
1263f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SL8:
1264f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SLA8:
1265f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGB_DXT1:
1266f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT1:
1267f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT3:
1268f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   case MESA_FORMAT_SRGBA_DXT5:
1269f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_SRGB;
1270f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   default:
1271f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul      return GL_LINEAR;
1272f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul   }
1273f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul}
1274f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
1275aad7219f80e21739c521d58a6e32a14114ac0bb0Brian Paul
1276aad7219f80e21739c521d58a6e32a14114ac0bb0Brian Paul/**
1277aad7219f80e21739c521d58a6e32a14114ac0bb0Brian Paul * For an sRGB format, return the corresponding linear color space format.
1278aad7219f80e21739c521d58a6e32a14114ac0bb0Brian Paul * For non-sRGB formats, return the format as-is.
1279aad7219f80e21739c521d58a6e32a14114ac0bb0Brian Paul */
1280edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airliegl_format
1281edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie_mesa_get_srgb_format_linear(gl_format format)
1282edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie{
1283edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   switch (format) {
1284edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SRGB8:
1285edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_RGB888;
1286edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1287edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SRGBA8:
1288edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_RGBA8888;
1289edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1290edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SARGB8:
1291edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_ARGB8888;
1292edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1293edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SL8:
1294edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_L8;
1295edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1296edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SLA8:
1297edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_AL88;
1298edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1299edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SRGB_DXT1:
1300edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_RGB_DXT1;
1301edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1302edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SRGBA_DXT1:
1303edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_RGBA_DXT1;
1304edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1305edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SRGBA_DXT3:
1306edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_RGBA_DXT3;
1307edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1308edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   case MESA_FORMAT_SRGBA_DXT5:
1309edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      format = MESA_FORMAT_RGBA_DXT5;
1310edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1311edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   default:
1312edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie      break;
1313edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   }
1314edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie   return format;
1315edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie}
1316edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie
1317f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul
1318f7b5e616e07b5caa27e91bb5733a8a849d5963f6Brian Paul/**
13191c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * Return number of bytes needed to store an image of the given size
13201c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul * in the given format.
13211c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul */
13221c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian PaulGLuint
13231c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul_mesa_format_image_size(gl_format format, GLsizei width,
13241c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul                        GLsizei height, GLsizei depth)
13251c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul{
13261c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1327040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
13281c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
13297bfbd88d2cc4c7e7c1c2fe02b0d223f4a3ea8db2Brian Paul      /* compressed format (2D only for now) */
13301c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint bw = info->BlockWidth, bh = info->BlockHeight;
13311c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint wblocks = (width + bw - 1) / bw;
13321c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint hblocks = (height + bh - 1) / bh;
1333040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint sz = wblocks * hblocks * info->BytesPerBlock;
13347bfbd88d2cc4c7e7c1c2fe02b0d223f4a3ea8db2Brian Paul      assert(depth == 1);
13351c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
13361c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
13371c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   else {
13381c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      /* non-compressed */
13391c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      const GLuint sz = width * height * depth * info->BytesPerBlock;
13401c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul      return sz;
13411c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul   }
13421c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul}
13431c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
13441c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
134574c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul/**
134674c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul * Same as _mesa_format_image_size() but returns a 64-bit value to
134774c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul * accomodate very large textures.
134874c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul */
134974c324fdbaebb7accaee668f2bc54af4699d0025Brian Pauluint64_t
135074c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul_mesa_format_image_size64(gl_format format, GLsizei width,
135174c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul                          GLsizei height, GLsizei depth)
135274c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul{
135374c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
135474c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul   /* Strictly speaking, a conditional isn't needed here */
135574c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
135674c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      /* compressed format (2D only for now) */
135774c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      const uint64_t bw = info->BlockWidth, bh = info->BlockHeight;
135874c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      const uint64_t wblocks = (width + bw - 1) / bw;
135974c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      const uint64_t hblocks = (height + bh - 1) / bh;
136074c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      const uint64_t sz = wblocks * hblocks * info->BytesPerBlock;
136174c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      assert(depth == 1);
136274c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      return sz;
136374c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul   }
136474c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul   else {
136574c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      /* non-compressed */
136674c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      const uint64_t sz = ((uint64_t) width *
136774c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul                           (uint64_t) height *
136874c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul                           (uint64_t) depth *
136974c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul                           info->BytesPerBlock);
137074c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul      return sz;
137174c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul   }
137274c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul}
137374c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul
137474c324fdbaebb7accaee668f2bc54af4699d0025Brian Paul
13751c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
1376040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian PaulGLint
1377040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul_mesa_format_row_stride(gl_format format, GLsizei width)
1378040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul{
1379040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
1380040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   /* Strictly speaking, a conditional isn't needed here */
1381040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
1382040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      /* compressed format */
1383040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint bw = info->BlockWidth;
1384040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLuint wblocks = (width + bw - 1) / bw;
1385040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = wblocks * info->BytesPerBlock;
1386040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
1387040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
1388040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   else {
1389040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      const GLint stride = width * info->BytesPerBlock;
1390040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul      return stride;
1391040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul   }
1392040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul}
1393040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
1394040fd7ed44c21a1faaa6475888e9365e8f0de42bBrian Paul
1395d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul/**
1396d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul * Debug/test: check that all formats are handled in the
1397d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul * _mesa_format_to_type_and_comps() function.  When new pixel formats
1398d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul * are added to Mesa, that function needs to be updated.
1399d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul * This is a no-op after the first call.
1400d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul */
1401d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paulstatic void
1402d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paulcheck_format_to_type_and_comps(void)
1403d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul{
1404d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul   gl_format f;
1405d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul
1406d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul   for (f = MESA_FORMAT_NONE + 1; f < MESA_FORMAT_COUNT; f++) {
1407d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul      GLenum datatype = 0;
1408d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul      GLuint comps = 0;
1409d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul      /* This function will emit a problem/warning if the format is
1410d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul       * not handled.
1411d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul       */
1412d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul      _mesa_format_to_type_and_comps(f, &datatype, &comps);
1413d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul   }
1414d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul}
1415d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul
14161c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul
14171c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4Brian Paul/**
1418813870fd9588de101f68728507cff726d7513695Brian Paul * Do sanity checking of the format info table.
1419813870fd9588de101f68728507cff726d7513695Brian Paul */
1420813870fd9588de101f68728507cff726d7513695Brian Paulvoid
1421813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_test_formats(void)
1422813870fd9588de101f68728507cff726d7513695Brian Paul{
1423813870fd9588de101f68728507cff726d7513695Brian Paul   GLuint i;
1424813870fd9588de101f68728507cff726d7513695Brian Paul
1425813870fd9588de101f68728507cff726d7513695Brian Paul   assert(Elements(format_info) == MESA_FORMAT_COUNT);
1426813870fd9588de101f68728507cff726d7513695Brian Paul
1427813870fd9588de101f68728507cff726d7513695Brian Paul   for (i = 0; i < MESA_FORMAT_COUNT; i++) {
1428813870fd9588de101f68728507cff726d7513695Brian Paul      const struct gl_format_info *info = _mesa_get_format_info(i);
1429813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info);
1430813870fd9588de101f68728507cff726d7513695Brian Paul
1431813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->Name == i);
1432813870fd9588de101f68728507cff726d7513695Brian Paul
1433e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      if (info->Name == MESA_FORMAT_NONE)
1434e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul         continue;
1435e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul
1436813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BlockWidth == 1 && info->BlockHeight == 1) {
1437813870fd9588de101f68728507cff726d7513695Brian Paul         if (info->RedBits > 0) {
1438813870fd9588de101f68728507cff726d7513695Brian Paul            GLuint t = info->RedBits + info->GreenBits
1439813870fd9588de101f68728507cff726d7513695Brian Paul               + info->BlueBits + info->AlphaBits;
14400073f50cd47c48c706b4524364b9c0594804febfBrian Paul            assert(t / 8 <= info->BytesPerBlock);
14416e0584932b3e556a0aecd2ca36f5ae41dc40a919Vinson Lee            (void) t;
1442813870fd9588de101f68728507cff726d7513695Brian Paul         }
1443813870fd9588de101f68728507cff726d7513695Brian Paul      }
1444813870fd9588de101f68728507cff726d7513695Brian Paul
1445813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->DataType == GL_UNSIGNED_NORMALIZED ||
1446813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_SIGNED_NORMALIZED ||
1447813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_UNSIGNED_INT ||
14480073f50cd47c48c706b4524364b9c0594804febfBrian Paul             info->DataType == GL_INT ||
1449813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_FLOAT);
1450813870fd9588de101f68728507cff726d7513695Brian Paul
1451813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BaseFormat == GL_RGB) {
1452813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
1453813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
1454813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
1455813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1456813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1457813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1458813870fd9588de101f68728507cff726d7513695Brian Paul      }
1459813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_RGBA) {
1460813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
1461813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
1462813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
1463813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits > 0);
1464813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1465813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1466813870fd9588de101f68728507cff726d7513695Brian Paul      }
14675d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      else if (info->BaseFormat == GL_RG) {
14685d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->RedBits > 0);
14695d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->GreenBits > 0);
14705d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->BlueBits == 0);
14715d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->AlphaBits == 0);
14725d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->LuminanceBits == 0);
14735d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->IntensityBits == 0);
14745d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      }
14755d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      else if (info->BaseFormat == GL_RED) {
14765d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->RedBits > 0);
14775d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->GreenBits == 0);
14785d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->BlueBits == 0);
14795d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->AlphaBits == 0);
14805d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->LuminanceBits == 0);
14815d1387b2da3626326410804026f8b92f1a121fdcIan Romanick         assert(info->IntensityBits == 0);
14825d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      }
1483813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_LUMINANCE) {
1484813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1485813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1486813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1487813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1488813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits > 0);
1489813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
1490813870fd9588de101f68728507cff726d7513695Brian Paul      }
1491813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_INTENSITY) {
1492813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
1493813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
1494813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
1495813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
1496813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
1497813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits > 0);
1498813870fd9588de101f68728507cff726d7513695Brian Paul      }
1499813870fd9588de101f68728507cff726d7513695Brian Paul   }
1500d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul
1501d92e56460e0b6b6057097fc12c7f947528e58c13Brian Paul   check_format_to_type_and_comps();
1502813870fd9588de101f68728507cff726d7513695Brian Paul}
1503813870fd9588de101f68728507cff726d7513695Brian Paul
1504813870fd9588de101f68728507cff726d7513695Brian Paul
1505019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1506813870fd9588de101f68728507cff726d7513695Brian Paul/**
1507019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Return datatype and number of components per texel for the given gl_format.
1508019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul * Only used for mipmap generation code.
1509813870fd9588de101f68728507cff726d7513695Brian Paul */
1510813870fd9588de101f68728507cff726d7513695Brian Paulvoid
1511019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul_mesa_format_to_type_and_comps(gl_format format,
1512019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul                               GLenum *datatype, GLuint *comps)
1513813870fd9588de101f68728507cff726d7513695Brian Paul{
1514019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   switch (format) {
1515019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888:
1516019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA8888_REV:
1517019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888:
1518019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB8888_REV:
151974d61d03b54d72217d463c248468cdcd09320efcBrian Paul   case MESA_FORMAT_XRGB8888:
152079c65410c132c22b67b7635cee740dea9a736f80Brian Paul   case MESA_FORMAT_XRGB8888_REV:
1521019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1522019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1523019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1524019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB888:
1525019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_BGR888:
1526019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1527019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1528019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1529019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565:
1530019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB565_REV:
1531019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_5_6_5;
1532019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1533019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1534019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1535019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444:
1536019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB4444_REV:
1537019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
1538019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1539019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1540019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1541019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555:
1542019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ARGB1555_REV:
1543019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
1544019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1545019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1546019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1547621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák   case MESA_FORMAT_ARGB2101010:
1548621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      *datatype = GL_UNSIGNED_INT_2_10_10_10_REV;
1549621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      *comps = 4;
1550621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák      return;
1551621e5254ef6714520f106bd3707fe6ddc279aa0cMarek Olšák
155279c65410c132c22b67b7635cee740dea9a736f80Brian Paul   case MESA_FORMAT_RGBA5551:
155379c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *datatype = GL_UNSIGNED_SHORT_5_5_5_1;
155479c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *comps = 4;
155579c65410c132c22b67b7635cee740dea9a736f80Brian Paul      return;
155679c65410c132c22b67b7635cee740dea9a736f80Brian Paul
15574d6994e40ebccf9428fc757d845e25c0e0c12cefMarek Olšák   case MESA_FORMAT_AL44:
15584d6994e40ebccf9428fc757d845e25c0e0c12cefMarek Olšák      *datatype = MESA_UNSIGNED_BYTE_4_4;
15594d6994e40ebccf9428fc757d845e25c0e0c12cefMarek Olšák      *comps = 2;
15604d6994e40ebccf9428fc757d845e25c0e0c12cefMarek Olšák      return;
15614d6994e40ebccf9428fc757d845e25c0e0c12cefMarek Olšák
1562019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88:
1563019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_AL88_REV:
15645d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG88:
15655d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG88_REV:
1566019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1567019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1568019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1569eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
1570eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616:
1571eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick   case MESA_FORMAT_AL1616_REV:
15725d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG1616:
15735d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_RG1616_REV:
1574eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *datatype = GL_UNSIGNED_SHORT;
1575eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      *comps = 2;
1576eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick      return;
1577eb437fabe017611e1f855fffa45f59cd38709be8Ian Romanick
15785d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_R16:
1579eb31837a0d4fa4fe115bb288ddb37cbedea954aeMarek Olšák   case MESA_FORMAT_A16:
1580bb5ace68ce9e8bd171a39162ed6bd93632bd6619Marek Olšák   case MESA_FORMAT_L16:
1581fd8aa7ac71699facf9839e2ae56b5e37579c6bccMarek Olšák   case MESA_FORMAT_I16:
15825d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      *datatype = GL_UNSIGNED_SHORT;
15835d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      *comps = 1;
15845d1387b2da3626326410804026f8b92f1a121fdcIan Romanick      return;
15855d1387b2da3626326410804026f8b92f1a121fdcIan Romanick
1586019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB332:
1587019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE_3_3_2;
1588019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1589019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1590019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1591019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_A8:
1592019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_L8:
1593019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_I8:
1594019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_CI8:
15955d1387b2da3626326410804026f8b92f1a121fdcIan Romanick   case MESA_FORMAT_R8:
159679c65410c132c22b67b7635cee740dea9a736f80Brian Paul   case MESA_FORMAT_S8:
1597813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1598813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1599019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1600019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1601019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR:
1602019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_YCBCR_REV:
1603019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_SHORT;
1604813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1605019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1606019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1607019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z24_S8:
1608019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1609019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1610019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1611019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1612019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_S8_Z24:
1613019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1614019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1; /* XXX OK? */
1615019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1616019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1617019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z16:
1618813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_SHORT;
1619019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1620019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1621019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1622e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul   case MESA_FORMAT_X8_Z24:
1623e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *datatype = GL_UNSIGNED_INT;
1624e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      *comps = 1;
1625e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul      return;
1626e4c700dbbf2a802f32bf62256c801105998c3729Brian Paul
1627c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca   case MESA_FORMAT_Z24_X8:
1628c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *datatype = GL_UNSIGNED_INT;
1629c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      *comps = 1;
1630c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca      return;
1631c6164ff155189007c02aabb31549f5f4dc767d1bJosé Fonseca
1632019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_Z32:
1633019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_INT;
1634019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1635019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1636019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1637019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_DUDV8:
1638019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_BYTE;
1639813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
1640019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1641019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
164279c65410c132c22b67b7635cee740dea9a736f80Brian Paul   case MESA_FORMAT_SIGNED_R8:
16430be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_A8:
16440be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_L8:
16450be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_I8:
164679c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *datatype = GL_BYTE;
164779c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *comps = 1;
164879c65410c132c22b67b7635cee740dea9a736f80Brian Paul      return;
16490be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_RG88_REV:
16500be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_AL88:
165179c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *datatype = GL_BYTE;
165279c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *comps = 2;
165379c65410c132c22b67b7635cee740dea9a736f80Brian Paul      return;
1654019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888:
1655019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SIGNED_RGBA8888_REV:
165679c65410c132c22b67b7635cee740dea9a736f80Brian Paul   case MESA_FORMAT_SIGNED_RGBX8888:
1657813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_BYTE;
1658019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1659019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1660880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul
166179c65410c132c22b67b7635cee740dea9a736f80Brian Paul   case MESA_FORMAT_RGBA_16:
166279c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *datatype = GL_UNSIGNED_SHORT;
166379c65410c132c22b67b7635cee740dea9a736f80Brian Paul      *comps = 4;
166479c65410c132c22b67b7635cee740dea9a736f80Brian Paul      return;
166579c65410c132c22b67b7635cee740dea9a736f80Brian Paul
16660be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_R16:
16670be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_A16:
16680be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_L16:
16690be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_I16:
1670880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1671880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 1;
1672880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
16730be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_GR1616:
16740be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák   case MESA_FORMAT_SIGNED_AL1616:
1675880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1676880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 2;
1677880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1678880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul   case MESA_FORMAT_SIGNED_RGB_16:
1679880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *datatype = GL_SHORT;
1680880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      *comps = 3;
1681880e04ba74603eda3480006f21bc8c2b24ac2f8cBrian Paul      return;
1682c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul   case MESA_FORMAT_SIGNED_RGBA_16:
1683c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *datatype = GL_SHORT;
1684c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      *comps = 4;
1685c5b725489243e6a94ca5e31306cdfa93619bd200Brian Paul      return;
1686019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1687019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1688019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB8:
1689019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1690019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1691019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1692019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA8:
1693019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SARGB8:
1694019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1695019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1696019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1697019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SL8:
1698019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1699813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
1700019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1701019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SLA8:
1702019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_UNSIGNED_BYTE;
1703019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1704019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1705019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1706019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1707019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_fxt1
1708019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FXT1:
1709019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FXT1:
1710019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
1711019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_texture_s3tc
1712019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_DXT1:
1713019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT1:
1714019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT3:
1715019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_DXT5:
1716019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#if FEATURE_EXT_texture_sRGB
1717019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGB_DXT1:
1718019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT1:
1719019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT3:
1720019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_SRGBA_DXT5:
1721019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul#endif
172269c78bf2c21c239d6064847dd0628f3526d68f9bIan Romanick#endif
17238d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   case MESA_FORMAT_RED_RGTC1:
17248d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   case MESA_FORMAT_SIGNED_RED_RGTC1:
17258d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   case MESA_FORMAT_RG_RGTC2:
17268d47c919859e9cd90cfc04eb220ac8a5aa87048eDave Airlie   case MESA_FORMAT_SIGNED_RG_RGTC2:
17277d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   case MESA_FORMAT_L_LATC1:
17287d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   case MESA_FORMAT_SIGNED_L_LATC1:
17297d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   case MESA_FORMAT_LA_LATC2:
17307d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák   case MESA_FORMAT_SIGNED_LA_LATC2:
1731019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      /* XXX generate error instead? */
1732813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1733019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 0;
1734019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1735019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1736019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT32:
1737019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1738019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1739019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1740019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGBA_FLOAT16:
1741019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1742019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 4;
1743019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1744019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT32:
1745019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1746019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1747019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1748019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_RGB_FLOAT16:
1749019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1750019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 3;
1751019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1752019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
17530ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   case MESA_FORMAT_RG_FLOAT32:
1754019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1755019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1756019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1757019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
17580ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   case MESA_FORMAT_RG_FLOAT16:
1759019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1760019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 2;
1761019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1762019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT32:
1763019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT32:
1764019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT32:
17650ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   case MESA_FORMAT_R_FLOAT32:
1766019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_FLOAT;
1767019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1768019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1769019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_ALPHA_FLOAT16:
1770019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_LUMINANCE_FLOAT16:
1771019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   case MESA_FORMAT_INTENSITY_FLOAT16:
17720ecbb0ab7472fe5cb33be13a8307e16f875254e5Marek Olšák   case MESA_FORMAT_R_FLOAT16:
1773019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = GL_HALF_FLOAT_ARB;
1774019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1775019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      return;
1776019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul
1777abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT8:
1778abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_BYTE;
1779abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1780abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1781abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT16:
1782abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_SHORT;
1783abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1784abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1785abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_INT32:
1786abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_INT;
1787abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1788abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1789abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
1790abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   /**
1791abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    * \name Non-normalized unsigned integer formats.
1792abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul    */
1793abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT8:
1794abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_BYTE;
1795abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1796abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1797abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT16:
1798abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_SHORT;
1799abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1800abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1801abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul   case MESA_FORMAT_RGBA_UINT32:
1802abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *datatype = GL_UNSIGNED_INT;
1803abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      *comps = 4;
1804abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul      return;
1805abd5627a6a034885b0b01b995c73870da1361bb0Brian Paul
180679c65410c132c22b67b7635cee740dea9a736f80Brian Paul   case MESA_FORMAT_COUNT:
1807a57e2c436bac4ce22d35681b45b513334dcb2fd9Vinson Lee      assert(0);
1808a57e2c436bac4ce22d35681b45b513334dcb2fd9Vinson Lee      return;
1809a57e2c436bac4ce22d35681b45b513334dcb2fd9Vinson Lee
1810a57e2c436bac4ce22d35681b45b513334dcb2fd9Vinson Lee   case MESA_FORMAT_NONE:
181179c65410c132c22b67b7635cee740dea9a736f80Brian Paul   /* For debug builds, warn if any formats are not handled */
1812280750c5cabfc5f312c3abe0424f57b2edeb53dfVinson Lee#ifdef DEBUG
1813019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul   default:
181479c65410c132c22b67b7635cee740dea9a736f80Brian Paul#endif
1815c9126d66fa8e535a53d45adda44c3275fa2e229fBrian Paul      _mesa_problem(NULL, "bad format %s in _mesa_format_to_type_and_comps",
1816c9126d66fa8e535a53d45adda44c3275fa2e229fBrian Paul                    _mesa_get_format_name(format));
1817019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *datatype = 0;
1818019bc97bd900a84f5f999afdb42928e92d33814bBrian Paul      *comps = 1;
1819813870fd9588de101f68728507cff726d7513695Brian Paul   }
1820813870fd9588de101f68728507cff726d7513695Brian Paul}
1821