Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5563 serge 1
/*
2
 * Mesa 3-D graphics library
3
 *
4
 * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
5
 * Copyright (c) 2008-2009  VMware, Inc.
6
 *
7
 * Permission is hereby granted, free of charge, to any person obtaining a
8
 * copy of this software and associated documentation files (the "Software"),
9
 * to deal in the Software without restriction, including without limitation
10
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
 * and/or sell copies of the Software, and to permit persons to whom the
12
 * Software is furnished to do so, subject to the following conditions:
13
 *
14
 * The above copyright notice and this permission notice shall be included
15
 * in all copies or substantial portions of the Software.
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
 * OTHER DEALINGS IN THE SOFTWARE.
24
 */
25
 
26
 
27
#include "imports.h"
28
#include "formats.h"
29
#include "macros.h"
30
#include "glformats.h"
31
 
32
 
33
/**
34
 * Information about texture formats.
35
 */
36
struct gl_format_info
37
{
38
   gl_format Name;
39
 
40
   /** text name for debugging */
41
   const char *StrName;
42
 
43
   /**
44
    * Base format is one of GL_RED, GL_RG, GL_RGB, GL_RGBA, GL_ALPHA,
45
    * GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_INTENSITY, GL_YCBCR_MESA,
46
    * GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_DEPTH_STENCIL, GL_DUDV_ATI.
47
    */
48
   GLenum BaseFormat;
49
 
50
   /**
51
    * Logical data type: one of  GL_UNSIGNED_NORMALIZED, GL_SIGNED_NORMALIZED,
52
    * GL_UNSIGNED_INT, GL_INT, GL_FLOAT.
53
    */
54
   GLenum DataType;
55
 
56
   GLubyte RedBits;
57
   GLubyte GreenBits;
58
   GLubyte BlueBits;
59
   GLubyte AlphaBits;
60
   GLubyte LuminanceBits;
61
   GLubyte IntensityBits;
62
   GLubyte IndexBits;
63
   GLubyte DepthBits;
64
   GLubyte StencilBits;
65
 
66
   /**
67
    * To describe compressed formats.  If not compressed, Width=Height=1.
68
    */
69
   GLubyte BlockWidth, BlockHeight;
70
   GLubyte BytesPerBlock;
71
};
72
 
73
 
74
/**
75
 * Info about each format.
76
 * These must be in the same order as the MESA_FORMAT_* enums so that
77
 * we can do lookups without searching.
78
 */
79
static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
80
{
81
   {
82
      MESA_FORMAT_NONE,            /* Name */
83
      "MESA_FORMAT_NONE",          /* StrName */
84
      GL_NONE,                     /* BaseFormat */
85
      GL_NONE,                     /* DataType */
86
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
87
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
88
      0, 0, 0                      /* BlockWidth/Height,Bytes */
89
   },
90
   {
91
      MESA_FORMAT_RGBA8888,        /* Name */
92
      "MESA_FORMAT_RGBA8888",      /* StrName */
93
      GL_RGBA,                     /* BaseFormat */
94
      GL_UNSIGNED_NORMALIZED,      /* DataType */
95
      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
96
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
97
      1, 1, 4                      /* BlockWidth/Height,Bytes */
98
   },
99
   {
100
      MESA_FORMAT_RGBA8888_REV,    /* Name */
101
      "MESA_FORMAT_RGBA8888_REV",  /* StrName */
102
      GL_RGBA,                     /* BaseFormat */
103
      GL_UNSIGNED_NORMALIZED,      /* DataType */
104
      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
105
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
106
      1, 1, 4                      /* BlockWidth/Height,Bytes */
107
   },
108
   {
109
      MESA_FORMAT_ARGB8888,        /* Name */
110
      "MESA_FORMAT_ARGB8888",      /* StrName */
111
      GL_RGBA,                     /* BaseFormat */
112
      GL_UNSIGNED_NORMALIZED,      /* DataType */
113
      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
114
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
115
      1, 1, 4                      /* BlockWidth/Height,Bytes */
116
   },
117
   {
118
      MESA_FORMAT_ARGB8888_REV,    /* Name */
119
      "MESA_FORMAT_ARGB8888_REV",  /* StrName */
120
      GL_RGBA,                     /* BaseFormat */
121
      GL_UNSIGNED_NORMALIZED,      /* DataType */
122
      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
123
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
124
      1, 1, 4                      /* BlockWidth/Height,Bytes */
125
   },
126
   {
127
      MESA_FORMAT_RGBX8888,        /* Name */
128
      "MESA_FORMAT_RGBX8888",      /* StrName */
129
      GL_RGB,                      /* BaseFormat */
130
      GL_UNSIGNED_NORMALIZED,      /* DataType */
131
      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
132
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
133
      1, 1, 4                      /* BlockWidth/Height,Bytes */
134
   },
135
   {
136
      MESA_FORMAT_RGBX8888_REV,    /* Name */
137
      "MESA_FORMAT_RGBX8888_REV",  /* StrName */
138
      GL_RGB,                      /* BaseFormat */
139
      GL_UNSIGNED_NORMALIZED,      /* DataType */
140
      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
141
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
142
      1, 1, 4                      /* BlockWidth/Height,Bytes */
143
   },
144
   {
145
      MESA_FORMAT_XRGB8888,        /* Name */
146
      "MESA_FORMAT_XRGB8888",      /* StrName */
147
      GL_RGB,                      /* BaseFormat */
148
      GL_UNSIGNED_NORMALIZED,      /* DataType */
149
      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
150
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
151
      1, 1, 4                      /* BlockWidth/Height,Bytes */
152
   },
153
   {
154
      MESA_FORMAT_XRGB8888_REV,    /* Name */
155
      "MESA_FORMAT_XRGB8888_REV",  /* StrName */
156
      GL_RGB,                      /* BaseFormat */
157
      GL_UNSIGNED_NORMALIZED,      /* DataType */
158
      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
159
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
160
      1, 1, 4                      /* BlockWidth/Height,Bytes */
161
   },
162
   {
163
      MESA_FORMAT_RGB888,          /* Name */
164
      "MESA_FORMAT_RGB888",        /* StrName */
165
      GL_RGB,                      /* BaseFormat */
166
      GL_UNSIGNED_NORMALIZED,      /* DataType */
167
      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
168
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
169
      1, 1, 3                      /* BlockWidth/Height,Bytes */
170
   },
171
   {
172
      MESA_FORMAT_BGR888,          /* Name */
173
      "MESA_FORMAT_BGR888",        /* StrName */
174
      GL_RGB,                      /* BaseFormat */
175
      GL_UNSIGNED_NORMALIZED,      /* DataType */
176
      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
177
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
178
      1, 1, 3                      /* BlockWidth/Height,Bytes */
179
   },
180
   {
181
      MESA_FORMAT_RGB565,          /* Name */
182
      "MESA_FORMAT_RGB565",        /* StrName */
183
      GL_RGB,                      /* BaseFormat */
184
      GL_UNSIGNED_NORMALIZED,      /* DataType */
185
      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
186
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
187
      1, 1, 2                      /* BlockWidth/Height,Bytes */
188
   },
189
   {
190
      MESA_FORMAT_RGB565_REV,      /* Name */
191
      "MESA_FORMAT_RGB565_REV",    /* StrName */
192
      GL_RGB,                      /* BaseFormat */
193
      GL_UNSIGNED_NORMALIZED,      /* DataType */
194
      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
195
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
196
      1, 1, 2                      /* BlockWidth/Height,Bytes */
197
   },
198
   {
199
      MESA_FORMAT_ARGB4444,        /* Name */
200
      "MESA_FORMAT_ARGB4444",      /* StrName */
201
      GL_RGBA,                     /* BaseFormat */
202
      GL_UNSIGNED_NORMALIZED,      /* DataType */
203
      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
204
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
205
      1, 1, 2                      /* BlockWidth/Height,Bytes */
206
   },
207
   {
208
      MESA_FORMAT_ARGB4444_REV,    /* Name */
209
      "MESA_FORMAT_ARGB4444_REV",  /* StrName */
210
      GL_RGBA,                     /* BaseFormat */
211
      GL_UNSIGNED_NORMALIZED,      /* DataType */
212
      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
213
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
214
      1, 1, 2                      /* BlockWidth/Height,Bytes */
215
   },
216
   {
217
      MESA_FORMAT_RGBA5551,        /* Name */
218
      "MESA_FORMAT_RGBA5551",      /* StrName */
219
      GL_RGBA,                     /* BaseFormat */
220
      GL_UNSIGNED_NORMALIZED,      /* DataType */
221
      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
222
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
223
      1, 1, 2                      /* BlockWidth/Height,Bytes */
224
   },
225
   {
226
      MESA_FORMAT_ARGB1555,        /* Name */
227
      "MESA_FORMAT_ARGB1555",      /* StrName */
228
      GL_RGBA,                     /* BaseFormat */
229
      GL_UNSIGNED_NORMALIZED,      /* DataType */
230
      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
231
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
232
      1, 1, 2                      /* BlockWidth/Height,Bytes */
233
   },
234
   {
235
      MESA_FORMAT_ARGB1555_REV,    /* Name */
236
      "MESA_FORMAT_ARGB1555_REV",  /* StrName */
237
      GL_RGBA,                     /* BaseFormat */
238
      GL_UNSIGNED_NORMALIZED,      /* DataType */
239
      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
240
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
241
      1, 1, 2                      /* BlockWidth/Height,Bytes */
242
   },
243
   {
244
      MESA_FORMAT_AL44,            /* Name */
245
      "MESA_FORMAT_AL44",          /* StrName */
246
      GL_LUMINANCE_ALPHA,          /* BaseFormat */
247
      GL_UNSIGNED_NORMALIZED,      /* DataType */
248
      0, 0, 0, 4,                  /* Red/Green/Blue/AlphaBits */
249
      4, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
250
      1, 1, 1                      /* BlockWidth/Height,Bytes */
251
   },
252
   {
253
      MESA_FORMAT_AL88,            /* Name */
254
      "MESA_FORMAT_AL88",          /* StrName */
255
      GL_LUMINANCE_ALPHA,          /* BaseFormat */
256
      GL_UNSIGNED_NORMALIZED,      /* DataType */
257
      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
258
      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
259
      1, 1, 2                      /* BlockWidth/Height,Bytes */
260
   },
261
   {
262
      MESA_FORMAT_AL88_REV,        /* Name */
263
      "MESA_FORMAT_AL88_REV",      /* StrName */
264
      GL_LUMINANCE_ALPHA,          /* BaseFormat */
265
      GL_UNSIGNED_NORMALIZED,      /* DataType */
266
      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
267
      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
268
      1, 1, 2                      /* BlockWidth/Height,Bytes */
269
   },
270
   {
271
      MESA_FORMAT_AL1616,          /* Name */
272
      "MESA_FORMAT_AL1616",        /* StrName */
273
      GL_LUMINANCE_ALPHA,          /* BaseFormat */
274
      GL_UNSIGNED_NORMALIZED,      /* DataType */
275
      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
276
      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
277
      1, 1, 4                      /* BlockWidth/Height,Bytes */
278
   },
279
   {
280
      MESA_FORMAT_AL1616_REV,      /* Name */
281
      "MESA_FORMAT_AL1616_REV",    /* StrName */
282
      GL_LUMINANCE_ALPHA,          /* BaseFormat */
283
      GL_UNSIGNED_NORMALIZED,      /* DataType */
284
      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
285
      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
286
      1, 1, 4                      /* BlockWidth/Height,Bytes */
287
   },
288
   {
289
      MESA_FORMAT_RGB332,          /* Name */
290
      "MESA_FORMAT_RGB332",        /* StrName */
291
      GL_RGB,                      /* BaseFormat */
292
      GL_UNSIGNED_NORMALIZED,      /* DataType */
293
      3, 3, 2, 0,                  /* Red/Green/Blue/AlphaBits */
294
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
295
      1, 1, 1                      /* BlockWidth/Height,Bytes */
296
   },
297
   {
298
      MESA_FORMAT_A8,              /* Name */
299
      "MESA_FORMAT_A8",            /* StrName */
300
      GL_ALPHA,                    /* BaseFormat */
301
      GL_UNSIGNED_NORMALIZED,      /* DataType */
302
      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
303
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
304
      1, 1, 1                      /* BlockWidth/Height,Bytes */
305
   },
306
   {
307
      MESA_FORMAT_A16,             /* Name */
308
      "MESA_FORMAT_A16",           /* StrName */
309
      GL_ALPHA,                    /* BaseFormat */
310
      GL_UNSIGNED_NORMALIZED,      /* DataType */
311
      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
312
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
313
      1, 1, 2                      /* BlockWidth/Height,Bytes */
314
   },
315
   {
316
      MESA_FORMAT_L8,              /* Name */
317
      "MESA_FORMAT_L8",            /* StrName */
318
      GL_LUMINANCE,                /* BaseFormat */
319
      GL_UNSIGNED_NORMALIZED,      /* DataType */
320
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
321
      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
322
      1, 1, 1                      /* BlockWidth/Height,Bytes */
323
   },
324
   {
325
      MESA_FORMAT_L16,             /* Name */
326
      "MESA_FORMAT_L16",           /* StrName */
327
      GL_LUMINANCE,                /* BaseFormat */
328
      GL_UNSIGNED_NORMALIZED,      /* DataType */
329
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
330
      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
331
      1, 1, 2                      /* BlockWidth/Height,Bytes */
332
   },
333
   {
334
      MESA_FORMAT_I8,              /* Name */
335
      "MESA_FORMAT_I8",            /* StrName */
336
      GL_INTENSITY,                /* BaseFormat */
337
      GL_UNSIGNED_NORMALIZED,      /* DataType */
338
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
339
      0, 8, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
340
      1, 1, 1                      /* BlockWidth/Height,Bytes */
341
   },
342
   {
343
      MESA_FORMAT_I16,             /* Name */
344
      "MESA_FORMAT_I16",           /* StrName */
345
      GL_INTENSITY,                /* BaseFormat */
346
      GL_UNSIGNED_NORMALIZED,      /* DataType */
347
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
348
      0, 16, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
349
      1, 1, 2                      /* BlockWidth/Height,Bytes */
350
   },
351
   {
352
      MESA_FORMAT_YCBCR,           /* Name */
353
      "MESA_FORMAT_YCBCR",         /* StrName */
354
      GL_YCBCR_MESA,               /* BaseFormat */
355
      GL_UNSIGNED_NORMALIZED,      /* DataType */
356
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
357
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
358
      1, 1, 2                      /* BlockWidth/Height,Bytes */
359
   },
360
   {
361
      MESA_FORMAT_YCBCR_REV,       /* Name */
362
      "MESA_FORMAT_YCBCR_REV",     /* StrName */
363
      GL_YCBCR_MESA,               /* BaseFormat */
364
      GL_UNSIGNED_NORMALIZED,      /* DataType */
365
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
366
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
367
      1, 1, 2                      /* BlockWidth/Height,Bytes */
368
   },
369
   {
370
      MESA_FORMAT_R8,
371
      "MESA_FORMAT_R8",
372
      GL_RED,
373
      GL_UNSIGNED_NORMALIZED,
374
      8, 0, 0, 0,
375
      0, 0, 0, 0, 0,
376
      1, 1, 1
377
   },
378
   {
379
      MESA_FORMAT_GR88,
380
      "MESA_FORMAT_GR88",
381
      GL_RG,
382
      GL_UNSIGNED_NORMALIZED,
383
      8, 8, 0, 0,
384
      0, 0, 0, 0, 0,
385
      1, 1, 2
386
   },
387
   {
388
      MESA_FORMAT_RG88,
389
      "MESA_FORMAT_RG88",
390
      GL_RG,
391
      GL_UNSIGNED_NORMALIZED,
392
      8, 8, 0, 0,
393
      0, 0, 0, 0, 0,
394
      1, 1, 2
395
   },
396
   {
397
      MESA_FORMAT_R16,
398
      "MESA_FORMAT_R16",
399
      GL_RED,
400
      GL_UNSIGNED_NORMALIZED,
401
      16, 0, 0, 0,
402
      0, 0, 0, 0, 0,
403
      1, 1, 2
404
   },
405
   {
406
      MESA_FORMAT_GR1616,
407
      "MESA_FORMAT_GR1616",
408
      GL_RG,
409
      GL_UNSIGNED_NORMALIZED,
410
      16, 16, 0, 0,
411
      0, 0, 0, 0, 0,
412
      1, 1, 4
413
   },
414
   {
415
      MESA_FORMAT_RG1616,
416
      "MESA_FORMAT_RG1616",
417
      GL_RG,
418
      GL_UNSIGNED_NORMALIZED,
419
      16, 16, 0, 0,
420
      0, 0, 0, 0, 0,
421
      1, 1, 4
422
   },
423
   {
424
      MESA_FORMAT_ARGB2101010,
425
      "MESA_FORMAT_ARGB2101010",
426
      GL_RGBA,
427
      GL_UNSIGNED_NORMALIZED,
428
      10, 10, 10, 2,
429
      0, 0, 0, 0, 0,
430
      1, 1, 4
431
   },
432
   {
433
      MESA_FORMAT_Z24_S8,          /* Name */
434
      "MESA_FORMAT_Z24_S8",        /* StrName */
435
      GL_DEPTH_STENCIL,            /* BaseFormat */
436
      GL_UNSIGNED_NORMALIZED,      /* DataType */
437
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
438
      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
439
      1, 1, 4                      /* BlockWidth/Height,Bytes */
440
   },
441
   {
442
      MESA_FORMAT_S8_Z24,          /* Name */
443
      "MESA_FORMAT_S8_Z24",        /* StrName */
444
      GL_DEPTH_STENCIL,            /* BaseFormat */
445
      GL_UNSIGNED_NORMALIZED,      /* DataType */
446
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
447
      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
448
      1, 1, 4                      /* BlockWidth/Height,Bytes */
449
   },
450
   {
451
      MESA_FORMAT_Z16,             /* Name */
452
      "MESA_FORMAT_Z16",           /* StrName */
453
      GL_DEPTH_COMPONENT,          /* BaseFormat */
454
      GL_UNSIGNED_NORMALIZED,      /* DataType */
455
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
456
      0, 0, 0, 16, 0,              /* Lum/Int/Index/Depth/StencilBits */
457
      1, 1, 2                      /* BlockWidth/Height,Bytes */
458
   },
459
   {
460
      MESA_FORMAT_X8_Z24,          /* Name */
461
      "MESA_FORMAT_X8_Z24",        /* StrName */
462
      GL_DEPTH_COMPONENT,          /* BaseFormat */
463
      GL_UNSIGNED_NORMALIZED,      /* DataType */
464
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
465
      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
466
      1, 1, 4                      /* BlockWidth/Height,Bytes */
467
   },
468
   {
469
      MESA_FORMAT_Z24_X8,          /* Name */
470
      "MESA_FORMAT_Z24_X8",        /* StrName */
471
      GL_DEPTH_COMPONENT,          /* BaseFormat */
472
      GL_UNSIGNED_NORMALIZED,      /* DataType */
473
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
474
      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
475
      1, 1, 4                      /* BlockWidth/Height,Bytes */
476
   },
477
   {
478
      MESA_FORMAT_Z32,             /* Name */
479
      "MESA_FORMAT_Z32",           /* StrName */
480
      GL_DEPTH_COMPONENT,          /* BaseFormat */
481
      GL_UNSIGNED_NORMALIZED,      /* DataType */
482
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
483
      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
484
      1, 1, 4                      /* BlockWidth/Height,Bytes */
485
   },
486
   {
487
      MESA_FORMAT_S8,              /* Name */
488
      "MESA_FORMAT_S8",            /* StrName */
489
      GL_STENCIL_INDEX,            /* BaseFormat */
490
      GL_UNSIGNED_INT,             /* DataType */
491
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
492
      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
493
      1, 1, 1                      /* BlockWidth/Height,Bytes */
494
   },
495
   {
496
      MESA_FORMAT_SRGB8,
497
      "MESA_FORMAT_SRGB8",
498
      GL_RGB,
499
      GL_UNSIGNED_NORMALIZED,
500
      8, 8, 8, 0,
501
      0, 0, 0, 0, 0,
502
      1, 1, 3
503
   },
504
   {
505
      MESA_FORMAT_SRGBA8,
506
      "MESA_FORMAT_SRGBA8",
507
      GL_RGBA,
508
      GL_UNSIGNED_NORMALIZED,
509
      8, 8, 8, 8,
510
      0, 0, 0, 0, 0,
511
      1, 1, 4
512
   },
513
   {
514
      MESA_FORMAT_SARGB8,
515
      "MESA_FORMAT_SARGB8",
516
      GL_RGBA,
517
      GL_UNSIGNED_NORMALIZED,
518
      8, 8, 8, 8,
519
      0, 0, 0, 0, 0,
520
      1, 1, 4
521
   },
522
   {
523
      MESA_FORMAT_SL8,
524
      "MESA_FORMAT_SL8",
525
      GL_LUMINANCE,
526
      GL_UNSIGNED_NORMALIZED,
527
      0, 0, 0, 0,
528
      8, 0, 0, 0, 0,
529
      1, 1, 1
530
   },
531
   {
532
      MESA_FORMAT_SLA8,
533
      "MESA_FORMAT_SLA8",
534
      GL_LUMINANCE_ALPHA,
535
      GL_UNSIGNED_NORMALIZED,
536
      0, 0, 0, 8,
537
      8, 0, 0, 0, 0,
538
      1, 1, 2
539
   },
540
   {
541
      MESA_FORMAT_SRGB_DXT1,       /* Name */
542
      "MESA_FORMAT_SRGB_DXT1",     /* StrName */
543
      GL_RGB,                      /* BaseFormat */
544
      GL_UNSIGNED_NORMALIZED,      /* DataType */
545
      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
546
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
547
      4, 4, 8                      /* 8 bytes per 4x4 block */
548
   },
549
   {
550
      MESA_FORMAT_SRGBA_DXT1,
551
      "MESA_FORMAT_SRGBA_DXT1",
552
      GL_RGBA,
553
      GL_UNSIGNED_NORMALIZED,
554
      4, 4, 4, 4,
555
      0, 0, 0, 0, 0,
556
      4, 4, 8                      /* 8 bytes per 4x4 block */
557
   },
558
   {
559
      MESA_FORMAT_SRGBA_DXT3,
560
      "MESA_FORMAT_SRGBA_DXT3",
561
      GL_RGBA,
562
      GL_UNSIGNED_NORMALIZED,
563
      4, 4, 4, 4,
564
      0, 0, 0, 0, 0,
565
      4, 4, 16                     /* 16 bytes per 4x4 block */
566
   },
567
   {
568
      MESA_FORMAT_SRGBA_DXT5,
569
      "MESA_FORMAT_SRGBA_DXT5",
570
      GL_RGBA,
571
      GL_UNSIGNED_NORMALIZED,
572
      4, 4, 4, 4,
573
      0, 0, 0, 0, 0,
574
      4, 4, 16                     /* 16 bytes per 4x4 block */
575
   },
576
 
577
   {
578
      MESA_FORMAT_RGB_FXT1,
579
      "MESA_FORMAT_RGB_FXT1",
580
      GL_RGB,
581
      GL_UNSIGNED_NORMALIZED,
582
      4, 4, 4, 0,                  /* approx Red/Green/BlueBits */
583
      0, 0, 0, 0, 0,
584
      8, 4, 16                     /* 16 bytes per 8x4 block */
585
   },
586
   {
587
      MESA_FORMAT_RGBA_FXT1,
588
      "MESA_FORMAT_RGBA_FXT1",
589
      GL_RGBA,
590
      GL_UNSIGNED_NORMALIZED,
591
      4, 4, 4, 1,                  /* approx Red/Green/Blue/AlphaBits */
592
      0, 0, 0, 0, 0,
593
      8, 4, 16                     /* 16 bytes per 8x4 block */
594
   },
595
 
596
   {
597
      MESA_FORMAT_RGB_DXT1,        /* Name */
598
      "MESA_FORMAT_RGB_DXT1",      /* StrName */
599
      GL_RGB,                      /* BaseFormat */
600
      GL_UNSIGNED_NORMALIZED,      /* DataType */
601
      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
602
      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
603
      4, 4, 8                      /* 8 bytes per 4x4 block */
604
   },
605
   {
606
      MESA_FORMAT_RGBA_DXT1,
607
      "MESA_FORMAT_RGBA_DXT1",
608
      GL_RGBA,
609
      GL_UNSIGNED_NORMALIZED,
610
      4, 4, 4, 4,
611
      0, 0, 0, 0, 0,
612
      4, 4, 8                      /* 8 bytes per 4x4 block */
613
   },
614
   {
615
      MESA_FORMAT_RGBA_DXT3,
616
      "MESA_FORMAT_RGBA_DXT3",
617
      GL_RGBA,
618
      GL_UNSIGNED_NORMALIZED,
619
      4, 4, 4, 4,
620
      0, 0, 0, 0, 0,
621
      4, 4, 16                     /* 16 bytes per 4x4 block */
622
   },
623
   {
624
      MESA_FORMAT_RGBA_DXT5,
625
      "MESA_FORMAT_RGBA_DXT5",
626
      GL_RGBA,
627
      GL_UNSIGNED_NORMALIZED,
628
      4, 4, 4, 4,
629
      0, 0, 0, 0, 0,
630
      4, 4, 16                     /* 16 bytes per 4x4 block */
631
   },
632
   {
633
      MESA_FORMAT_RGBA_FLOAT32,
634
      "MESA_FORMAT_RGBA_FLOAT32",
635
      GL_RGBA,
636
      GL_FLOAT,
637
      32, 32, 32, 32,
638
      0, 0, 0, 0, 0,
639
      1, 1, 16
640
   },
641
   {
642
      MESA_FORMAT_RGBA_FLOAT16,
643
      "MESA_FORMAT_RGBA_FLOAT16",
644
      GL_RGBA,
645
      GL_FLOAT,
646
      16, 16, 16, 16,
647
      0, 0, 0, 0, 0,
648
      1, 1, 8
649
   },
650
   {
651
      MESA_FORMAT_RGB_FLOAT32,
652
      "MESA_FORMAT_RGB_FLOAT32",
653
      GL_RGB,
654
      GL_FLOAT,
655
      32, 32, 32, 0,
656
      0, 0, 0, 0, 0,
657
      1, 1, 12
658
   },
659
   {
660
      MESA_FORMAT_RGB_FLOAT16,
661
      "MESA_FORMAT_RGB_FLOAT16",
662
      GL_RGB,
663
      GL_FLOAT,
664
      16, 16, 16, 0,
665
      0, 0, 0, 0, 0,
666
      1, 1, 6
667
   },
668
   {
669
      MESA_FORMAT_ALPHA_FLOAT32,
670
      "MESA_FORMAT_ALPHA_FLOAT32",
671
      GL_ALPHA,
672
      GL_FLOAT,
673
      0, 0, 0, 32,
674
      0, 0, 0, 0, 0,
675
      1, 1, 4
676
   },
677
   {
678
      MESA_FORMAT_ALPHA_FLOAT16,
679
      "MESA_FORMAT_ALPHA_FLOAT16",
680
      GL_ALPHA,
681
      GL_FLOAT,
682
      0, 0, 0, 16,
683
      0, 0, 0, 0, 0,
684
      1, 1, 2
685
   },
686
   {
687
      MESA_FORMAT_LUMINANCE_FLOAT32,
688
      "MESA_FORMAT_LUMINANCE_FLOAT32",
689
      GL_LUMINANCE,
690
      GL_FLOAT,
691
      0, 0, 0, 0,
692
      32, 0, 0, 0, 0,
693
      1, 1, 4
694
   },
695
   {
696
      MESA_FORMAT_LUMINANCE_FLOAT16,
697
      "MESA_FORMAT_LUMINANCE_FLOAT16",
698
      GL_LUMINANCE,
699
      GL_FLOAT,
700
      0, 0, 0, 0,
701
      16, 0, 0, 0, 0,
702
      1, 1, 2
703
   },
704
   {
705
      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
706
      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32",
707
      GL_LUMINANCE_ALPHA,
708
      GL_FLOAT,
709
      0, 0, 0, 32,
710
      32, 0, 0, 0, 0,
711
      1, 1, 8
712
   },
713
   {
714
      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
715
      "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16",
716
      GL_LUMINANCE_ALPHA,
717
      GL_FLOAT,
718
      0, 0, 0, 16,
719
      16, 0, 0, 0, 0,
720
      1, 1, 4
721
   },
722
   {
723
      MESA_FORMAT_INTENSITY_FLOAT32,
724
      "MESA_FORMAT_INTENSITY_FLOAT32",
725
      GL_INTENSITY,
726
      GL_FLOAT,
727
      0, 0, 0, 0,
728
      0, 32, 0, 0, 0,
729
      1, 1, 4
730
   },
731
   {
732
      MESA_FORMAT_INTENSITY_FLOAT16,
733
      "MESA_FORMAT_INTENSITY_FLOAT16",
734
      GL_INTENSITY,
735
      GL_FLOAT,
736
      0, 0, 0, 0,
737
      0, 16, 0, 0, 0,
738
      1, 1, 2
739
   },
740
   {
741
      MESA_FORMAT_R_FLOAT32,
742
      "MESA_FORMAT_R_FLOAT32",
743
      GL_RED,
744
      GL_FLOAT,
745
      32, 0, 0, 0,
746
      0, 0, 0, 0, 0,
747
      1, 1, 4
748
   },
749
   {
750
      MESA_FORMAT_R_FLOAT16,
751
      "MESA_FORMAT_R_FLOAT16",
752
      GL_RED,
753
      GL_FLOAT,
754
      16, 0, 0, 0,
755
      0, 0, 0, 0, 0,
756
      1, 1, 2
757
   },
758
   {
759
      MESA_FORMAT_RG_FLOAT32,
760
      "MESA_FORMAT_RG_FLOAT32",
761
      GL_RG,
762
      GL_FLOAT,
763
      32, 32, 0, 0,
764
      0, 0, 0, 0, 0,
765
      1, 1, 8
766
   },
767
   {
768
      MESA_FORMAT_RG_FLOAT16,
769
      "MESA_FORMAT_RG_FLOAT16",
770
      GL_RG,
771
      GL_FLOAT,
772
      16, 16, 0, 0,
773
      0, 0, 0, 0, 0,
774
      1, 1, 4
775
   },
776
 
777
   /* unnormalized signed int formats */
778
   /* unnormalized unsigned int formats */
779
   {
780
      MESA_FORMAT_ALPHA_UINT8,
781
      "MESA_FORMAT_ALPHA_UINT8",
782
      GL_ALPHA,
783
      GL_UNSIGNED_INT,
784
      0, 0, 0, 8,
785
      0, 0, 0, 0, 0,
786
      1, 1, 1
787
   },
788
   {
789
      MESA_FORMAT_ALPHA_UINT16,
790
      "MESA_FORMAT_ALPHA_UINT16",
791
      GL_ALPHA,
792
      GL_UNSIGNED_INT,
793
      0, 0, 0, 16,
794
      0, 0, 0, 0, 0,
795
      1, 1, 2
796
   },
797
   {
798
      MESA_FORMAT_ALPHA_UINT32,
799
      "MESA_FORMAT_ALPHA_UINT32",
800
      GL_ALPHA,
801
      GL_UNSIGNED_INT,
802
      0, 0, 0, 32,
803
      0, 0, 0, 0, 0,
804
      1, 1, 4
805
   },
806
   {
807
      MESA_FORMAT_ALPHA_INT8,
808
      "MESA_FORMAT_ALPHA_INT8",
809
      GL_ALPHA,
810
      GL_INT,
811
      0, 0, 0, 8,
812
      0, 0, 0, 0, 0,
813
      1, 1, 1
814
   },
815
   {
816
      MESA_FORMAT_ALPHA_INT16,
817
      "MESA_FORMAT_ALPHA_INT16",
818
      GL_ALPHA,
819
      GL_INT,
820
      0, 0, 0, 16,
821
      0, 0, 0, 0, 0,
822
      1, 1, 2
823
   },
824
   {
825
      MESA_FORMAT_ALPHA_INT32,
826
      "MESA_FORMAT_ALPHA_INT32",
827
      GL_ALPHA,
828
      GL_INT,
829
      0, 0, 0, 32,
830
      0, 0, 0, 0, 0,
831
      1, 1, 4
832
   },
833
   {
834
      MESA_FORMAT_INTENSITY_UINT8,
835
      "MESA_FORMAT_INTENSITY_UINT8",
836
      GL_INTENSITY,
837
      GL_UNSIGNED_INT,
838
      0, 0, 0, 0,
839
      0, 8, 0, 0, 0,
840
      1, 1, 1
841
   },
842
   {
843
      MESA_FORMAT_INTENSITY_UINT16,
844
      "MESA_FORMAT_INTENSITY_UINT16",
845
      GL_INTENSITY,
846
      GL_UNSIGNED_INT,
847
      0, 0, 0, 0,
848
      0, 16, 0, 0, 0,
849
      1, 1, 2
850
   },
851
   {
852
      MESA_FORMAT_INTENSITY_UINT32,
853
      "MESA_FORMAT_INTENSITY_UINT32",
854
      GL_INTENSITY,
855
      GL_UNSIGNED_INT,
856
      0, 0, 0, 0,
857
      0, 32, 0, 0, 0,
858
      1, 1, 4
859
   },
860
   {
861
      MESA_FORMAT_INTENSITY_INT8,
862
      "MESA_FORMAT_INTENSITY_INT8",
863
      GL_INTENSITY,
864
      GL_INT,
865
      0, 0, 0, 0,
866
      0, 8, 0, 0, 0,
867
      1, 1, 1
868
   },
869
   {
870
      MESA_FORMAT_INTENSITY_INT16,
871
      "MESA_FORMAT_INTENSITY_INT16",
872
      GL_INTENSITY,
873
      GL_INT,
874
      0, 0, 0, 0,
875
      0, 16, 0, 0, 0,
876
      1, 1, 2
877
   },
878
   {
879
      MESA_FORMAT_INTENSITY_INT32,
880
      "MESA_FORMAT_INTENSITY_INT32",
881
      GL_INTENSITY,
882
      GL_INT,
883
      0, 0, 0, 0,
884
      0, 32, 0, 0, 0,
885
      1, 1, 4
886
   },
887
   {
888
      MESA_FORMAT_LUMINANCE_UINT8,
889
      "MESA_FORMAT_LUMINANCE_UINT8",
890
      GL_LUMINANCE,
891
      GL_UNSIGNED_INT,
892
      0, 0, 0, 0,
893
      8, 0, 0, 0, 0,
894
      1, 1, 1
895
   },
896
   {
897
      MESA_FORMAT_LUMINANCE_UINT16,
898
      "MESA_FORMAT_LUMINANCE_UINT16",
899
      GL_LUMINANCE,
900
      GL_UNSIGNED_INT,
901
      0, 0, 0, 0,
902
      16, 0, 0, 0, 0,
903
      1, 1, 2
904
   },
905
   {
906
      MESA_FORMAT_LUMINANCE_UINT32,
907
      "MESA_FORMAT_LUMINANCE_UINT32",
908
      GL_LUMINANCE,
909
      GL_UNSIGNED_INT,
910
      0, 0, 0, 0,
911
      32, 0, 0, 0, 0,
912
      1, 1, 4
913
   },
914
   {
915
      MESA_FORMAT_LUMINANCE_INT8,
916
      "MESA_FORMAT_LUMINANCE_INT8",
917
      GL_LUMINANCE,
918
      GL_INT,
919
      0, 0, 0, 0,
920
      8, 0, 0, 0, 0,
921
      1, 1, 1
922
   },
923
   {
924
      MESA_FORMAT_LUMINANCE_INT16,
925
      "MESA_FORMAT_LUMINANCE_INT16",
926
      GL_LUMINANCE,
927
      GL_INT,
928
      0, 0, 0, 0,
929
      16, 0, 0, 0, 0,
930
      1, 1, 2
931
   },
932
   {
933
      MESA_FORMAT_LUMINANCE_INT32,
934
      "MESA_FORMAT_LUMINANCE_INT32",
935
      GL_LUMINANCE,
936
      GL_INT,
937
      0, 0, 0, 0,
938
      32, 0, 0, 0, 0,
939
      1, 1, 4
940
   },
941
   {
942
      MESA_FORMAT_LUMINANCE_ALPHA_UINT8,
943
      "MESA_FORMAT_LUMINANCE_ALPHA_UINT8",
944
      GL_LUMINANCE_ALPHA,
945
      GL_UNSIGNED_INT,
946
      0, 0, 0, 8,
947
      8, 0, 0, 0, 0,
948
      1, 1, 2
949
   },
950
   {
951
      MESA_FORMAT_LUMINANCE_ALPHA_UINT16,
952
      "MESA_FORMAT_LUMINANCE_ALPHA_UINT16",
953
      GL_LUMINANCE_ALPHA,
954
      GL_UNSIGNED_INT,
955
      0, 0, 0, 16,
956
      16, 0, 0, 0, 0,
957
      1, 1, 4
958
   },
959
   {
960
      MESA_FORMAT_LUMINANCE_ALPHA_UINT32,
961
      "MESA_FORMAT_LUMINANCE_ALPHA_UINT32",
962
      GL_LUMINANCE_ALPHA,
963
      GL_UNSIGNED_INT,
964
      0, 0, 0, 32,
965
      32, 0, 0, 0, 0,
966
      1, 1, 8
967
   },
968
   {
969
      MESA_FORMAT_LUMINANCE_ALPHA_INT8,
970
      "MESA_FORMAT_LUMINANCE_ALPHA_INT8",
971
      GL_LUMINANCE_ALPHA,
972
      GL_INT,
973
      0, 0, 0, 8,
974
      8, 0, 0, 0, 0,
975
      1, 1, 2
976
   },
977
   {
978
      MESA_FORMAT_LUMINANCE_ALPHA_INT16,
979
      "MESA_FORMAT_LUMINANCE_ALPHA_INT16",
980
      GL_LUMINANCE_ALPHA,
981
      GL_INT,
982
      0, 0, 0, 16,
983
      16, 0, 0, 0, 0,
984
      1, 1, 4
985
   },
986
   {
987
      MESA_FORMAT_LUMINANCE_ALPHA_INT32,
988
      "MESA_FORMAT_LUMINANCE_ALPHA_INT32",
989
      GL_LUMINANCE_ALPHA,
990
      GL_INT,
991
      0, 0, 0, 32,
992
      32, 0, 0, 0, 0,
993
      1, 1, 8
994
   },
995
 
996
   {
997
      MESA_FORMAT_R_INT8,
998
      "MESA_FORMAT_R_INT8",
999
      GL_RED,
1000
      GL_INT,
1001
      8, 0, 0, 0,
1002
      0, 0, 0, 0, 0,
1003
      1, 1, 1
1004
   },
1005
   {
1006
      MESA_FORMAT_RG_INT8,
1007
      "MESA_FORMAT_RG_INT8",
1008
      GL_RG,
1009
      GL_INT,
1010
      8, 8, 0, 0,
1011
      0, 0, 0, 0, 0,
1012
      1, 1, 2
1013
   },
1014
   {
1015
      MESA_FORMAT_RGB_INT8,
1016
      "MESA_FORMAT_RGB_INT8",
1017
      GL_RGB,
1018
      GL_INT,
1019
      8, 8, 8, 0,
1020
      0, 0, 0, 0, 0,
1021
      1, 1, 3
1022
   },
1023
   {
1024
      MESA_FORMAT_RGBA_INT8,
1025
      "MESA_FORMAT_RGBA_INT8",
1026
      GL_RGBA,
1027
      GL_INT,
1028
      8, 8, 8, 8,
1029
      0, 0, 0, 0, 0,
1030
      1, 1, 4
1031
   },
1032
   {
1033
      MESA_FORMAT_R_INT16,
1034
      "MESA_FORMAT_R_INT16",
1035
      GL_RED,
1036
      GL_INT,
1037
      16, 0, 0, 0,
1038
      0, 0, 0, 0, 0,
1039
      1, 1, 2
1040
   },
1041
   {
1042
      MESA_FORMAT_RG_INT16,
1043
      "MESA_FORMAT_RG_INT16",
1044
      GL_RG,
1045
      GL_INT,
1046
      16, 16, 0, 0,
1047
      0, 0, 0, 0, 0,
1048
      1, 1, 4
1049
   },
1050
   {
1051
      MESA_FORMAT_RGB_INT16,
1052
      "MESA_FORMAT_RGB_INT16",
1053
      GL_RGB,
1054
      GL_INT,
1055
      16, 16, 16, 0,
1056
      0, 0, 0, 0, 0,
1057
      1, 1, 6
1058
   },
1059
   {
1060
      MESA_FORMAT_RGBA_INT16,
1061
      "MESA_FORMAT_RGBA_INT16",
1062
      GL_RGBA,
1063
      GL_INT,
1064
      16, 16, 16, 16,
1065
      0, 0, 0, 0, 0,
1066
      1, 1, 8
1067
   },
1068
   {
1069
      MESA_FORMAT_R_INT32,
1070
      "MESA_FORMAT_R_INT32",
1071
      GL_RED,
1072
      GL_INT,
1073
      32, 0, 0, 0,
1074
      0, 0, 0, 0, 0,
1075
      1, 1, 4
1076
   },
1077
   {
1078
      MESA_FORMAT_RG_INT32,
1079
      "MESA_FORMAT_RG_INT32",
1080
      GL_RG,
1081
      GL_INT,
1082
      32, 32, 0, 0,
1083
      0, 0, 0, 0, 0,
1084
      1, 1, 8
1085
   },
1086
   {
1087
      MESA_FORMAT_RGB_INT32,
1088
      "MESA_FORMAT_RGB_INT32",
1089
      GL_RGB,
1090
      GL_INT,
1091
      32, 32, 32, 0,
1092
      0, 0, 0, 0, 0,
1093
      1, 1, 12
1094
   },
1095
   {
1096
      MESA_FORMAT_RGBA_INT32,
1097
      "MESA_FORMAT_RGBA_INT32",
1098
      GL_RGBA,
1099
      GL_INT,
1100
      32, 32, 32, 32,
1101
      0, 0, 0, 0, 0,
1102
      1, 1, 16
1103
   },
1104
   {
1105
      MESA_FORMAT_R_UINT8,
1106
      "MESA_FORMAT_R_UINT8",
1107
      GL_RED,
1108
      GL_UNSIGNED_INT,
1109
      8, 0, 0, 0,
1110
      0, 0, 0, 0, 0,
1111
      1, 1, 1
1112
   },
1113
   {
1114
      MESA_FORMAT_RG_UINT8,
1115
      "MESA_FORMAT_RG_UINT8",
1116
      GL_RG,
1117
      GL_UNSIGNED_INT,
1118
      8, 8, 0, 0,
1119
      0, 0, 0, 0, 0,
1120
      1, 1, 2
1121
   },
1122
   {
1123
      MESA_FORMAT_RGB_UINT8,
1124
      "MESA_FORMAT_RGB_UINT8",
1125
      GL_RGB,
1126
      GL_UNSIGNED_INT,
1127
      8, 8, 8, 0,
1128
      0, 0, 0, 0, 0,
1129
      1, 1, 3
1130
   },
1131
   {
1132
      MESA_FORMAT_RGBA_UINT8,
1133
      "MESA_FORMAT_RGBA_UINT8",
1134
      GL_RGBA,
1135
      GL_UNSIGNED_INT,
1136
      8, 8, 8, 8,
1137
      0, 0, 0, 0, 0,
1138
      1, 1, 4
1139
   },
1140
   {
1141
      MESA_FORMAT_R_UINT16,
1142
      "MESA_FORMAT_R_UINT16",
1143
      GL_RED,
1144
      GL_UNSIGNED_INT,
1145
      16, 0, 0, 0,
1146
      0, 0, 0, 0, 0,
1147
      1, 1, 2
1148
   },
1149
   {
1150
      MESA_FORMAT_RG_UINT16,
1151
      "MESA_FORMAT_RG_UINT16",
1152
      GL_RG,
1153
      GL_UNSIGNED_INT,
1154
      16, 16, 0, 0,
1155
      0, 0, 0, 0, 0,
1156
      1, 1, 4
1157
   },
1158
   {
1159
      MESA_FORMAT_RGB_UINT16,
1160
      "MESA_FORMAT_RGB_UINT16",
1161
      GL_RGB,
1162
      GL_UNSIGNED_INT,
1163
      16, 16, 16, 0,
1164
      0, 0, 0, 0, 0,
1165
      1, 1, 6
1166
   },
1167
   {
1168
      MESA_FORMAT_RGBA_UINT16,
1169
      "MESA_FORMAT_RGBA_UINT16",
1170
      GL_RGBA,
1171
      GL_UNSIGNED_INT,
1172
      16, 16, 16, 16,
1173
      0, 0, 0, 0, 0,
1174
      1, 1, 8
1175
   },
1176
   {
1177
      MESA_FORMAT_R_UINT32,
1178
      "MESA_FORMAT_R_UINT32",
1179
      GL_RED,
1180
      GL_UNSIGNED_INT,
1181
      32, 0, 0, 0,
1182
      0, 0, 0, 0, 0,
1183
      1, 1, 4
1184
   },
1185
   {
1186
      MESA_FORMAT_RG_UINT32,
1187
      "MESA_FORMAT_RG_UINT32",
1188
      GL_RG,
1189
      GL_UNSIGNED_INT,
1190
      32, 32, 0, 0,
1191
      0, 0, 0, 0, 0,
1192
      1, 1, 8
1193
   },
1194
   {
1195
      MESA_FORMAT_RGB_UINT32,
1196
      "MESA_FORMAT_RGB_UINT32",
1197
      GL_RGB,
1198
      GL_UNSIGNED_INT,
1199
      32, 32, 32, 0,
1200
      0, 0, 0, 0, 0,
1201
      1, 1, 12
1202
   },
1203
   {
1204
      MESA_FORMAT_RGBA_UINT32,
1205
      "MESA_FORMAT_RGBA_UINT32",
1206
      GL_RGBA,
1207
      GL_UNSIGNED_INT,
1208
      32, 32, 32, 32,
1209
      0, 0, 0, 0, 0,
1210
      1, 1, 16
1211
   },
1212
 
1213
 
1214
   {
1215
      MESA_FORMAT_DUDV8,
1216
      "MESA_FORMAT_DUDV8",
1217
      GL_DUDV_ATI,
1218
      GL_SIGNED_NORMALIZED,
1219
      0, 0, 0, 0,
1220
      0, 0, 0, 0, 0,
1221
      1, 1, 2
1222
   },
1223
 
1224
   /* Signed 8 bits / channel */
1225
   {
1226
      MESA_FORMAT_SIGNED_R8,        /* Name */
1227
      "MESA_FORMAT_SIGNED_R8",      /* StrName */
1228
      GL_RED,                       /* BaseFormat */
1229
      GL_SIGNED_NORMALIZED,         /* DataType */
1230
      8, 0, 0, 0,                   /* Red/Green/Blue/AlphaBits */
1231
      0, 0, 0, 0, 0,                /* Lum/Int/Index/Depth/StencilBits */
1232
      1, 1, 1                       /* BlockWidth/Height,Bytes */
1233
   },
1234
   {
1235
      MESA_FORMAT_SIGNED_RG88_REV,
1236
      "MESA_FORMAT_SIGNED_RG88_REV",
1237
      GL_RG,
1238
      GL_SIGNED_NORMALIZED,
1239
      8, 8, 0, 0,
1240
      0, 0, 0, 0, 0,
1241
      1, 1, 2
1242
   },
1243
   {
1244
      MESA_FORMAT_SIGNED_RGBX8888,
1245
      "MESA_FORMAT_SIGNED_RGBX8888",
1246
      GL_RGB,
1247
      GL_SIGNED_NORMALIZED,
1248
      8, 8, 8, 0,
1249
      0, 0, 0, 0, 0,
1250
      1, 1, 4                       /* 4 bpp, but no alpha */
1251
   },
1252
   {
1253
      MESA_FORMAT_SIGNED_RGBA8888,
1254
      "MESA_FORMAT_SIGNED_RGBA8888",
1255
      GL_RGBA,
1256
      GL_SIGNED_NORMALIZED,
1257
      8, 8, 8, 8,
1258
      0, 0, 0, 0, 0,
1259
      1, 1, 4
1260
   },
1261
   {
1262
      MESA_FORMAT_SIGNED_RGBA8888_REV,
1263
      "MESA_FORMAT_SIGNED_RGBA8888_REV",
1264
      GL_RGBA,
1265
      GL_SIGNED_NORMALIZED,
1266
      8, 8, 8, 8,
1267
      0, 0, 0, 0, 0,
1268
      1, 1, 4
1269
   },
1270
 
1271
   /* Signed 16 bits / channel */
1272
   {
1273
      MESA_FORMAT_SIGNED_R16,
1274
      "MESA_FORMAT_SIGNED_R16",
1275
      GL_RED,
1276
      GL_SIGNED_NORMALIZED,
1277
      16, 0, 0, 0,
1278
      0, 0, 0, 0, 0,
1279
      1, 1, 2
1280
   },
1281
   {
1282
      MESA_FORMAT_SIGNED_GR1616,
1283
      "MESA_FORMAT_SIGNED_GR1616",
1284
      GL_RG,
1285
      GL_SIGNED_NORMALIZED,
1286
      16, 16, 0, 0,
1287
      0, 0, 0, 0, 0,
1288
      1, 1, 4
1289
   },
1290
   {
1291
      MESA_FORMAT_SIGNED_RGB_16,
1292
      "MESA_FORMAT_SIGNED_RGB_16",
1293
      GL_RGB,
1294
      GL_SIGNED_NORMALIZED,
1295
      16, 16, 16, 0,
1296
      0, 0, 0, 0, 0,
1297
      1, 1, 6
1298
   },
1299
   {
1300
      MESA_FORMAT_SIGNED_RGBA_16,
1301
      "MESA_FORMAT_SIGNED_RGBA_16",
1302
      GL_RGBA,
1303
      GL_SIGNED_NORMALIZED,
1304
      16, 16, 16, 16,
1305
      0, 0, 0, 0, 0,
1306
      1, 1, 8
1307
   },
1308
   {
1309
      MESA_FORMAT_RGBA_16,
1310
      "MESA_FORMAT_RGBA_16",
1311
      GL_RGBA,
1312
      GL_UNSIGNED_NORMALIZED,
1313
      16, 16, 16, 16,
1314
      0, 0, 0, 0, 0,
1315
      1, 1, 8
1316
   },
1317
   {
1318
     MESA_FORMAT_RED_RGTC1,
1319
     "MESA_FORMAT_RED_RGTC1",
1320
     GL_RED,
1321
     GL_UNSIGNED_NORMALIZED,
1322
     8, 0, 0, 0,
1323
     0, 0, 0, 0, 0,
1324
     4, 4, 8                     /* 8 bytes per 4x4 block */
1325
   },
1326
   {
1327
     MESA_FORMAT_SIGNED_RED_RGTC1,
1328
     "MESA_FORMAT_SIGNED_RED_RGTC1",
1329
     GL_RED,
1330
     GL_SIGNED_NORMALIZED,
1331
     8, 0, 0, 0,
1332
     0, 0, 0, 0, 0,
1333
     4, 4, 8                     /* 8 bytes per 4x4 block */
1334
   },
1335
   {
1336
     MESA_FORMAT_RG_RGTC2,
1337
     "MESA_FORMAT_RG_RGTC2",
1338
     GL_RG,
1339
     GL_UNSIGNED_NORMALIZED,
1340
     8, 8, 0, 0,
1341
     0, 0, 0, 0, 0,
1342
     4, 4, 16                     /* 16 bytes per 4x4 block */
1343
   },
1344
   {
1345
     MESA_FORMAT_SIGNED_RG_RGTC2,
1346
     "MESA_FORMAT_SIGNED_RG_RGTC2",
1347
     GL_RG,
1348
     GL_SIGNED_NORMALIZED,
1349
     8, 8, 0, 0,
1350
     0, 0, 0, 0, 0,
1351
     4, 4, 16                     /* 16 bytes per 4x4 block */
1352
   },
1353
   {
1354
     MESA_FORMAT_L_LATC1,
1355
     "MESA_FORMAT_L_LATC1",
1356
     GL_LUMINANCE,
1357
     GL_UNSIGNED_NORMALIZED,
1358
     0, 0, 0, 0,
1359
     4, 0, 0, 0, 0,
1360
     4, 4, 8                     /* 8 bytes per 4x4 block */
1361
   },
1362
   {
1363
     MESA_FORMAT_SIGNED_L_LATC1,
1364
     "MESA_FORMAT_SIGNED_L_LATC1",
1365
     GL_LUMINANCE,
1366
     GL_SIGNED_NORMALIZED,
1367
     0, 0, 0, 0,
1368
     4, 0, 0, 0, 0,
1369
     4, 4, 8                     /* 8 bytes per 4x4 block */
1370
   },
1371
   {
1372
     MESA_FORMAT_LA_LATC2,
1373
     "MESA_FORMAT_LA_LATC2",
1374
     GL_LUMINANCE_ALPHA,
1375
     GL_UNSIGNED_NORMALIZED,
1376
     0, 0, 0, 4,
1377
     4, 0, 0, 0, 0,
1378
     4, 4, 16                     /* 16 bytes per 4x4 block */
1379
   },
1380
   {
1381
     MESA_FORMAT_SIGNED_LA_LATC2,
1382
     "MESA_FORMAT_SIGNED_LA_LATC2",
1383
     GL_LUMINANCE_ALPHA,
1384
     GL_SIGNED_NORMALIZED,
1385
     0, 0, 0, 4,
1386
     4, 0, 0, 0, 0,
1387
     4, 4, 16                     /* 16 bytes per 4x4 block */
1388
   },
1389
 
1390
   {
1391
      MESA_FORMAT_ETC1_RGB8,
1392
      "MESA_FORMAT_ETC1_RGB8",
1393
      GL_RGB,
1394
      GL_UNSIGNED_NORMALIZED,
1395
      8, 8, 8, 0,
1396
      0, 0, 0, 0, 0,
1397
      4, 4, 8                     /* 8 bytes per 4x4 block */
1398
   },
1399
 
1400
   {
1401
      MESA_FORMAT_ETC2_RGB8,
1402
      "MESA_FORMAT_ETC2_RGB8",
1403
      GL_RGB,
1404
      GL_UNSIGNED_NORMALIZED,
1405
      8, 8, 8, 0,
1406
      0, 0, 0, 0, 0,
1407
      4, 4, 8                     /* 8 bytes per 4x4 block */
1408
   },
1409
 
1410
   {
1411
      MESA_FORMAT_ETC2_SRGB8,
1412
      "MESA_FORMAT_ETC2_SRGB8",
1413
      GL_RGB,
1414
      GL_UNSIGNED_NORMALIZED,
1415
      8, 8, 8, 0,
1416
      0, 0, 0, 0, 0,
1417
      4, 4, 8                     /* 8 bytes per 4x4 block */
1418
   },
1419
 
1420
   {
1421
      MESA_FORMAT_ETC2_RGBA8_EAC,
1422
      "MESA_FORMAT_ETC2_RGBA8_EAC",
1423
      GL_RGBA,
1424
      GL_UNSIGNED_NORMALIZED,
1425
      8, 8, 8, 8,
1426
      0, 0, 0, 0, 0,
1427
      4, 4, 16                    /* 16 bytes per 4x4 block */
1428
   },
1429
 
1430
   {
1431
      MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC,
1432
      "MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC",
1433
      GL_RGBA,
1434
      GL_UNSIGNED_NORMALIZED,
1435
      8, 8, 8, 8,
1436
      0, 0, 0, 0, 0,
1437
      4, 4, 16                    /* 16 bytes per 4x4 block */
1438
   },
1439
 
1440
   {
1441
      MESA_FORMAT_ETC2_R11_EAC,
1442
      "MESA_FORMAT_ETC2_R11_EAC",
1443
      GL_RED,
1444
      GL_UNSIGNED_NORMALIZED,
1445
      11, 0, 0, 0,
1446
      0, 0, 0, 0, 0,
1447
      4, 4, 8                    /* 8 bytes per 4x4 block */
1448
   },
1449
 
1450
   {
1451
      MESA_FORMAT_ETC2_RG11_EAC,
1452
      "MESA_FORMAT_ETC2_RG11_EAC",
1453
      GL_RG,
1454
      GL_UNSIGNED_NORMALIZED,
1455
      11, 11, 0, 0,
1456
      0, 0, 0, 0, 0,
1457
      4, 4, 16                    /* 16 bytes per 4x4 block */
1458
   },
1459
 
1460
   {
1461
      MESA_FORMAT_ETC2_SIGNED_R11_EAC,
1462
      "MESA_FORMAT_ETC2_SIGNED_R11_EAC",
1463
      GL_RED,
1464
      GL_SIGNED_NORMALIZED,
1465
      11, 0, 0, 0,
1466
      0, 0, 0, 0, 0,
1467
      4, 4, 8                    /* 8 bytes per 4x4 block */
1468
   },
1469
 
1470
   {
1471
      MESA_FORMAT_ETC2_SIGNED_RG11_EAC,
1472
      "MESA_FORMAT_ETC2_SIGNED_RG11_EAC",
1473
      GL_RG,
1474
      GL_SIGNED_NORMALIZED,
1475
      11, 11, 0, 0,
1476
      0, 0, 0, 0, 0,
1477
      4, 4, 16                    /* 16 bytes per 4x4 block */
1478
   },
1479
 
1480
   {
1481
      MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1,
1482
      "MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1",
1483
      GL_RGBA,
1484
      GL_UNSIGNED_NORMALIZED,
1485
      8, 8, 8, 1,
1486
      0, 0, 0, 0, 0,
1487
      4, 4, 8                     /* 8 bytes per 4x4 block */
1488
   },
1489
 
1490
   {
1491
      MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1,
1492
      "MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1",
1493
      GL_RGBA,
1494
      GL_UNSIGNED_NORMALIZED,
1495
      8, 8, 8, 1,
1496
      0, 0, 0, 0, 0,
1497
      4, 4, 8                     /* 8 bytes per 4x4 block */
1498
   },
1499
 
1500
   /* Signed formats from EXT_texture_snorm that are not in GL3.1 */
1501
   {
1502
      MESA_FORMAT_SIGNED_A8,
1503
      "MESA_FORMAT_SIGNED_A8",
1504
      GL_ALPHA,
1505
      GL_SIGNED_NORMALIZED,
1506
      0, 0, 0, 8,
1507
      0, 0, 0, 0, 0,
1508
      1, 1, 1
1509
   },
1510
   {
1511
      MESA_FORMAT_SIGNED_L8,
1512
      "MESA_FORMAT_SIGNED_L8",
1513
      GL_LUMINANCE,
1514
      GL_SIGNED_NORMALIZED,
1515
      0, 0, 0, 0,
1516
      8, 0, 0, 0, 0,
1517
      1, 1, 1
1518
   },
1519
   {
1520
      MESA_FORMAT_SIGNED_AL88,
1521
      "MESA_FORMAT_SIGNED_AL88",
1522
      GL_LUMINANCE_ALPHA,
1523
      GL_SIGNED_NORMALIZED,
1524
      0, 0, 0, 8,
1525
      8, 0, 0, 0, 0,
1526
      1, 1, 2
1527
   },
1528
   {
1529
      MESA_FORMAT_SIGNED_I8,
1530
      "MESA_FORMAT_SIGNED_I8",
1531
      GL_INTENSITY,
1532
      GL_SIGNED_NORMALIZED,
1533
      0, 0, 0, 0,
1534
      0, 8, 0, 0, 0,
1535
      1, 1, 1
1536
   },
1537
   {
1538
      MESA_FORMAT_SIGNED_A16,
1539
      "MESA_FORMAT_SIGNED_A16",
1540
      GL_ALPHA,
1541
      GL_SIGNED_NORMALIZED,
1542
      0, 0, 0, 16,
1543
      0, 0, 0, 0, 0,
1544
      1, 1, 2
1545
   },
1546
   {
1547
      MESA_FORMAT_SIGNED_L16,
1548
      "MESA_FORMAT_SIGNED_L16",
1549
      GL_LUMINANCE,
1550
      GL_SIGNED_NORMALIZED,
1551
      0, 0, 0, 0,
1552
      16, 0, 0, 0, 0,
1553
      1, 1, 2
1554
   },
1555
   {
1556
      MESA_FORMAT_SIGNED_AL1616,
1557
      "MESA_FORMAT_SIGNED_AL1616",
1558
      GL_LUMINANCE_ALPHA,
1559
      GL_SIGNED_NORMALIZED,
1560
      0, 0, 0, 16,
1561
      16, 0, 0, 0, 0,
1562
      1, 1, 4
1563
   },
1564
   {
1565
      MESA_FORMAT_SIGNED_I16,
1566
      "MESA_FORMAT_SIGNED_I16",
1567
      GL_INTENSITY,
1568
      GL_SIGNED_NORMALIZED,
1569
      0, 0, 0, 0,
1570
      0, 16, 0, 0, 0,
1571
      1, 1, 2
1572
   },
1573
   {
1574
      MESA_FORMAT_RGB9_E5_FLOAT,
1575
      "MESA_FORMAT_RGB9_E5",
1576
      GL_RGB,
1577
      GL_FLOAT,
1578
      9, 9, 9, 0,
1579
      0, 0, 0, 0, 0,
1580
      1, 1, 4
1581
   },
1582
   {
1583
      MESA_FORMAT_R11_G11_B10_FLOAT,
1584
      "MESA_FORMAT_R11_G11_B10_FLOAT",
1585
      GL_RGB,
1586
      GL_FLOAT,
1587
      11, 11, 10, 0,
1588
      0, 0, 0, 0, 0,
1589
      1, 1, 4
1590
   },
1591
   /* ARB_depth_buffer_float */
1592
   {
1593
      MESA_FORMAT_Z32_FLOAT,       /* Name */
1594
      "MESA_FORMAT_Z32_FLOAT",     /* StrName */
1595
      GL_DEPTH_COMPONENT,          /* BaseFormat */
1596
      GL_FLOAT,                    /* DataType */
1597
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
1598
      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
1599
      1, 1, 4                      /* BlockWidth/Height,Bytes */
1600
   },
1601
   {
1602
      MESA_FORMAT_Z32_FLOAT_X24S8, /* Name */
1603
      "MESA_FORMAT_Z32_FLOAT_X24S8", /* StrName */
1604
      GL_DEPTH_STENCIL,            /* BaseFormat */
1605
      /* DataType here is used to answer GL_TEXTURE_DEPTH_TYPE queries, and is
1606
       * never used for stencil because stencil is always GL_UNSIGNED_INT.
1607
       */
1608
      GL_FLOAT,                    /* DataType */
1609
      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
1610
      0, 0, 0, 32, 8,              /* Lum/Int/Index/Depth/StencilBits */
1611
      1, 1, 8                      /* BlockWidth/Height,Bytes */
1612
   },
1613
   {
1614
      MESA_FORMAT_ARGB2101010_UINT,
1615
      "MESA_FORMAT_ARGB2101010_UINT",
1616
      GL_RGBA,
1617
      GL_UNSIGNED_INT,
1618
      10, 10, 10, 2,
1619
      0, 0, 0, 0, 0,
1620
      1, 1, 4
1621
   },
1622
   {
1623
      MESA_FORMAT_ABGR2101010_UINT,
1624
      "MESA_FORMAT_ABGR2101010_UINT",
1625
      GL_RGBA,
1626
      GL_UNSIGNED_INT,
1627
      10, 10, 10, 2,
1628
      0, 0, 0, 0, 0,
1629
      1, 1, 4
1630
   },
1631
   {
1632
      MESA_FORMAT_XRGB4444_UNORM,
1633
      "MESA_FORMAT_XRGB4444_UNORM",
1634
      GL_RGB,
1635
      GL_UNSIGNED_NORMALIZED,
1636
      4, 4, 4, 0,
1637
      0, 0, 0, 0, 0,
1638
      1, 1, 2
1639
   },
1640
   {
1641
      MESA_FORMAT_XRGB1555_UNORM,
1642
      "MESA_FORMAT_XRGB1555_UNORM",
1643
      GL_RGB,
1644
      GL_UNSIGNED_NORMALIZED,
1645
      5, 5, 5, 0,
1646
      0, 0, 0, 0, 0,
1647
      1, 1, 2
1648
   },
1649
   {
1650
      MESA_FORMAT_XBGR8888_SNORM,
1651
      "MESA_FORMAT_XBGR8888_SNORM",
1652
      GL_RGB,
1653
      GL_SIGNED_NORMALIZED,
1654
      8, 8, 8, 0,
1655
      0, 0, 0, 0, 0,
1656
      1, 1, 4
1657
   },
1658
   {
1659
      MESA_FORMAT_XBGR8888_SRGB,
1660
      "MESA_FORMAT_XBGR8888_SRGB",
1661
      GL_RGB,
1662
      GL_UNSIGNED_NORMALIZED,
1663
      8, 8, 8, 0,
1664
      0, 0, 0, 0, 0,
1665
      1, 1, 4
1666
   },
1667
   {
1668
      MESA_FORMAT_XBGR8888_UINT,
1669
      "MESA_FORMAT_XBGR8888_UINT",
1670
      GL_RGB,
1671
      GL_UNSIGNED_INT,
1672
      8, 8, 8, 0,
1673
      0, 0, 0, 0, 0,
1674
      1, 1, 4
1675
   },
1676
   {
1677
      MESA_FORMAT_XBGR8888_SINT,
1678
      "MESA_FORMAT_XBGR8888_SINT",
1679
      GL_RGB,
1680
      GL_INT,
1681
      8, 8, 8, 0,
1682
      0, 0, 0, 0, 0,
1683
      1, 1, 4
1684
   },
1685
   {
1686
      MESA_FORMAT_XRGB2101010_UNORM,
1687
      "MESA_FORMAT_XRGB2101010_UNORM",
1688
      GL_RGB,
1689
      GL_UNSIGNED_NORMALIZED,
1690
      10, 10, 10, 0,
1691
      0, 0, 0, 0, 0,
1692
      1, 1, 4
1693
   },
1694
   {
1695
      MESA_FORMAT_XBGR16161616_UNORM,
1696
      "MESA_FORMAT_XBGR16161616_UNORM",
1697
      GL_RGB,
1698
      GL_UNSIGNED_NORMALIZED,
1699
      16, 16, 16, 0,
1700
      0, 0, 0, 0, 0,
1701
      1, 1, 8
1702
   },
1703
   {
1704
      MESA_FORMAT_XBGR16161616_SNORM,
1705
      "MESA_FORMAT_XBGR16161616_SNORM",
1706
      GL_RGB,
1707
      GL_SIGNED_NORMALIZED,
1708
      16, 16, 16, 0,
1709
      0, 0, 0, 0, 0,
1710
      1, 1, 8
1711
   },
1712
   {
1713
      MESA_FORMAT_XBGR16161616_FLOAT,
1714
      "MESA_FORMAT_XBGR16161616_FLOAT",
1715
      GL_RGB,
1716
      GL_FLOAT,
1717
      16, 16, 16, 0,
1718
      0, 0, 0, 0, 0,
1719
      1, 1, 8
1720
   },
1721
   {
1722
      MESA_FORMAT_XBGR16161616_UINT,
1723
      "MESA_FORMAT_XBGR16161616_UINT",
1724
      GL_RGB,
1725
      GL_UNSIGNED_INT,
1726
      16, 16, 16, 0,
1727
      0, 0, 0, 0, 0,
1728
      1, 1, 8
1729
   },
1730
   {
1731
      MESA_FORMAT_XBGR16161616_SINT,
1732
      "MESA_FORMAT_XBGR16161616_SINT",
1733
      GL_RGB,
1734
      GL_INT,
1735
      16, 16, 16, 0,
1736
      0, 0, 0, 0, 0,
1737
      1, 1, 8
1738
   },
1739
   {
1740
      MESA_FORMAT_XBGR32323232_FLOAT,
1741
      "MESA_FORMAT_XBGR32323232_FLOAT",
1742
      GL_RGB,
1743
      GL_FLOAT,
1744
      32, 32, 32, 0,
1745
      0, 0, 0, 0, 0,
1746
      1, 1, 16
1747
   },
1748
   {
1749
      MESA_FORMAT_XBGR32323232_UINT,
1750
      "MESA_FORMAT_XBGR32323232_UINT",
1751
      GL_RGB,
1752
      GL_UNSIGNED_INT,
1753
      32, 32, 32, 0,
1754
      0, 0, 0, 0, 0,
1755
      1, 1, 16
1756
   },
1757
   {
1758
      MESA_FORMAT_XBGR32323232_SINT,
1759
      "MESA_FORMAT_XBGR32323232_SINT",
1760
      GL_RGB,
1761
      GL_INT,
1762
      32, 32, 32, 0,
1763
      0, 0, 0, 0, 0,
1764
      1, 1, 16
1765
   },
1766
};
1767
 
1768
 
1769
 
1770
static const struct gl_format_info *
1771
_mesa_get_format_info(gl_format format)
1772
{
1773
   const struct gl_format_info *info = &format_info[format];
1774
   assert(info->Name == format);
1775
   return info;
1776
}
1777
 
1778
 
1779
/** Return string name of format (for debugging) */
1780
const char *
1781
_mesa_get_format_name(gl_format format)
1782
{
1783
   const struct gl_format_info *info = _mesa_get_format_info(format);
1784
   return info->StrName;
1785
}
1786
 
1787
 
1788
 
1789
/**
1790
 * Return bytes needed to store a block of pixels in the given format.
1791
 * Normally, a block is 1x1 (a single pixel).  But for compressed formats
1792
 * a block may be 4x4 or 8x4, etc.
1793
 *
1794
 * Note: not GLuint, so as not to coerce math to unsigned. cf. fdo #37351
1795
 */
1796
GLint
1797
_mesa_get_format_bytes(gl_format format)
1798
{
1799
   const struct gl_format_info *info = _mesa_get_format_info(format);
1800
   ASSERT(info->BytesPerBlock);
1801
   ASSERT(info->BytesPerBlock <= MAX_PIXEL_BYTES ||
1802
          _mesa_is_format_compressed(format));
1803
   return info->BytesPerBlock;
1804
}
1805
 
1806
 
1807
/**
1808
 * Return bits per component for the given format.
1809
 * \param format  one of MESA_FORMAT_x
1810
 * \param pname  the component, such as GL_RED_BITS, GL_TEXTURE_BLUE_BITS, etc.
1811
 */
1812
GLint
1813
_mesa_get_format_bits(gl_format format, GLenum pname)
1814
{
1815
   const struct gl_format_info *info = _mesa_get_format_info(format);
1816
 
1817
   switch (pname) {
1818
   case GL_RED_BITS:
1819
   case GL_TEXTURE_RED_SIZE:
1820
   case GL_RENDERBUFFER_RED_SIZE_EXT:
1821
   case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
1822
      return info->RedBits;
1823
   case GL_GREEN_BITS:
1824
   case GL_TEXTURE_GREEN_SIZE:
1825
   case GL_RENDERBUFFER_GREEN_SIZE_EXT:
1826
   case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
1827
      return info->GreenBits;
1828
   case GL_BLUE_BITS:
1829
   case GL_TEXTURE_BLUE_SIZE:
1830
   case GL_RENDERBUFFER_BLUE_SIZE_EXT:
1831
   case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
1832
      return info->BlueBits;
1833
   case GL_ALPHA_BITS:
1834
   case GL_TEXTURE_ALPHA_SIZE:
1835
   case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
1836
   case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
1837
      return info->AlphaBits;
1838
   case GL_TEXTURE_INTENSITY_SIZE:
1839
      return info->IntensityBits;
1840
   case GL_TEXTURE_LUMINANCE_SIZE:
1841
      return info->LuminanceBits;
1842
   case GL_INDEX_BITS:
1843
      return info->IndexBits;
1844
   case GL_DEPTH_BITS:
1845
   case GL_TEXTURE_DEPTH_SIZE_ARB:
1846
   case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
1847
   case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
1848
      return info->DepthBits;
1849
   case GL_STENCIL_BITS:
1850
   case GL_TEXTURE_STENCIL_SIZE_EXT:
1851
   case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
1852
   case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
1853
      return info->StencilBits;
1854
   default:
1855
      _mesa_problem(NULL, "bad pname in _mesa_get_format_bits()");
1856
      return 0;
1857
   }
1858
}
1859
 
1860
 
1861
GLuint
1862
_mesa_get_format_max_bits(gl_format format)
1863
{
1864
   const struct gl_format_info *info = _mesa_get_format_info(format);
1865
   GLuint max = MAX2(info->RedBits, info->GreenBits);
1866
   max = MAX2(max, info->BlueBits);
1867
   max = MAX2(max, info->AlphaBits);
1868
   max = MAX2(max, info->LuminanceBits);
1869
   max = MAX2(max, info->IntensityBits);
1870
   max = MAX2(max, info->DepthBits);
1871
   max = MAX2(max, info->StencilBits);
1872
   return max;
1873
}
1874
 
1875
 
1876
/**
1877
 * Return the data type (or more specifically, the data representation)
1878
 * for the given format.
1879
 * The return value will be one of:
1880
 *    GL_UNSIGNED_NORMALIZED = unsigned int representing [0,1]
1881
 *    GL_SIGNED_NORMALIZED = signed int representing [-1, 1]
1882
 *    GL_UNSIGNED_INT = an ordinary unsigned integer
1883
 *    GL_INT = an ordinary signed integer
1884
 *    GL_FLOAT = an ordinary float
1885
 */
1886
GLenum
1887
_mesa_get_format_datatype(gl_format format)
1888
{
1889
   const struct gl_format_info *info = _mesa_get_format_info(format);
1890
   return info->DataType;
1891
}
1892
 
1893
 
1894
/**
1895
 * Return the basic format for the given type.  The result will be one of
1896
 * GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_INTENSITY,
1897
 * GL_YCBCR_MESA, GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
1898
 */
1899
GLenum
1900
_mesa_get_format_base_format(gl_format format)
1901
{
1902
   const struct gl_format_info *info = _mesa_get_format_info(format);
1903
   return info->BaseFormat;
1904
}
1905
 
1906
 
1907
/**
1908
 * Return the block size (in pixels) for the given format.  Normally
1909
 * the block size is 1x1.  But compressed formats will have block sizes
1910
 * of 4x4 or 8x4 pixels, etc.
1911
 * \param bw  returns block width in pixels
1912
 * \param bh  returns block height in pixels
1913
 */
1914
void
1915
_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh)
1916
{
1917
   const struct gl_format_info *info = _mesa_get_format_info(format);
1918
   *bw = info->BlockWidth;
1919
   *bh = info->BlockHeight;
1920
}
1921
 
1922
 
1923
/** Is the given format a compressed format? */
1924
GLboolean
1925
_mesa_is_format_compressed(gl_format format)
1926
{
1927
   const struct gl_format_info *info = _mesa_get_format_info(format);
1928
   return info->BlockWidth > 1 || info->BlockHeight > 1;
1929
}
1930
 
1931
 
1932
/**
1933
 * Determine if the given format represents a packed depth/stencil buffer.
1934
 */
1935
GLboolean
1936
_mesa_is_format_packed_depth_stencil(gl_format format)
1937
{
1938
   const struct gl_format_info *info = _mesa_get_format_info(format);
1939
 
1940
   return info->BaseFormat == GL_DEPTH_STENCIL;
1941
}
1942
 
1943
 
1944
/**
1945
 * Is the given format a signed/unsigned integer color format?
1946
 */
1947
GLboolean
1948
_mesa_is_format_integer_color(gl_format format)
1949
{
1950
   const struct gl_format_info *info = _mesa_get_format_info(format);
1951
   return (info->DataType == GL_INT || info->DataType == GL_UNSIGNED_INT) &&
1952
      info->BaseFormat != GL_DEPTH_COMPONENT &&
1953
      info->BaseFormat != GL_DEPTH_STENCIL &&
1954
      info->BaseFormat != GL_STENCIL_INDEX;
1955
}
1956
 
1957
 
1958
/**
1959
 * Is the given format an unsigned integer format?
1960
 */
1961
GLboolean
1962
_mesa_is_format_unsigned(gl_format format)
1963
{
1964
   const struct gl_format_info *info = _mesa_get_format_info(format);
1965
   return _mesa_is_type_unsigned(info->DataType);
1966
}
1967
 
1968
 
1969
/**
1970
 * Return color encoding for given format.
1971
 * \return GL_LINEAR or GL_SRGB
1972
 */
1973
GLenum
1974
_mesa_get_format_color_encoding(gl_format format)
1975
{
1976
   /* XXX this info should be encoded in gl_format_info */
1977
   switch (format) {
1978
   case MESA_FORMAT_SRGB8:
1979
   case MESA_FORMAT_SRGBA8:
1980
   case MESA_FORMAT_SARGB8:
1981
   case MESA_FORMAT_SL8:
1982
   case MESA_FORMAT_SLA8:
1983
   case MESA_FORMAT_SRGB_DXT1:
1984
   case MESA_FORMAT_SRGBA_DXT1:
1985
   case MESA_FORMAT_SRGBA_DXT3:
1986
   case MESA_FORMAT_SRGBA_DXT5:
1987
   case MESA_FORMAT_XBGR8888_SRGB:
1988
      return GL_SRGB;
1989
   default:
1990
      return GL_LINEAR;
1991
   }
1992
}
1993
 
1994
 
1995
/**
1996
 * For an sRGB format, return the corresponding linear color space format.
1997
 * For non-sRGB formats, return the format as-is.
1998
 */
1999
gl_format
2000
_mesa_get_srgb_format_linear(gl_format format)
2001
{
2002
   switch (format) {
2003
   case MESA_FORMAT_SRGB8:
2004
      format = MESA_FORMAT_RGB888;
2005
      break;
2006
   case MESA_FORMAT_SRGBA8:
2007
      format = MESA_FORMAT_RGBA8888;
2008
      break;
2009
   case MESA_FORMAT_SARGB8:
2010
      format = MESA_FORMAT_ARGB8888;
2011
      break;
2012
   case MESA_FORMAT_SL8:
2013
      format = MESA_FORMAT_L8;
2014
      break;
2015
   case MESA_FORMAT_SLA8:
2016
      format = MESA_FORMAT_AL88;
2017
      break;
2018
   case MESA_FORMAT_SRGB_DXT1:
2019
      format = MESA_FORMAT_RGB_DXT1;
2020
      break;
2021
   case MESA_FORMAT_SRGBA_DXT1:
2022
      format = MESA_FORMAT_RGBA_DXT1;
2023
      break;
2024
   case MESA_FORMAT_SRGBA_DXT3:
2025
      format = MESA_FORMAT_RGBA_DXT3;
2026
      break;
2027
   case MESA_FORMAT_SRGBA_DXT5:
2028
      format = MESA_FORMAT_RGBA_DXT5;
2029
      break;
2030
   case MESA_FORMAT_XBGR8888_SRGB:
2031
      format = MESA_FORMAT_RGBX8888_REV;
2032
      break;
2033
   default:
2034
      break;
2035
   }
2036
   return format;
2037
}
2038
 
2039
 
2040
/**
2041
 * If the given format is a compressed format, return a corresponding
2042
 * uncompressed format.
2043
 */
2044
gl_format
2045
_mesa_get_uncompressed_format(gl_format format)
2046
{
2047
   switch (format) {
2048
   case MESA_FORMAT_RGB_FXT1:
2049
      return MESA_FORMAT_RGB888;
2050
   case MESA_FORMAT_RGBA_FXT1:
2051
      return MESA_FORMAT_RGBA8888;
2052
   case MESA_FORMAT_RGB_DXT1:
2053
   case MESA_FORMAT_SRGB_DXT1:
2054
      return MESA_FORMAT_RGB888;
2055
   case MESA_FORMAT_RGBA_DXT1:
2056
   case MESA_FORMAT_SRGBA_DXT1:
2057
      return MESA_FORMAT_RGBA8888;
2058
   case MESA_FORMAT_RGBA_DXT3:
2059
   case MESA_FORMAT_SRGBA_DXT3:
2060
      return MESA_FORMAT_RGBA8888;
2061
   case MESA_FORMAT_RGBA_DXT5:
2062
   case MESA_FORMAT_SRGBA_DXT5:
2063
      return MESA_FORMAT_RGBA8888;
2064
   case MESA_FORMAT_RED_RGTC1:
2065
      return MESA_FORMAT_R8;
2066
   case MESA_FORMAT_SIGNED_RED_RGTC1:
2067
      return MESA_FORMAT_SIGNED_R8;
2068
   case MESA_FORMAT_RG_RGTC2:
2069
      return MESA_FORMAT_GR88;
2070
   case MESA_FORMAT_SIGNED_RG_RGTC2:
2071
      return MESA_FORMAT_SIGNED_RG88_REV;
2072
   case MESA_FORMAT_L_LATC1:
2073
      return MESA_FORMAT_L8;
2074
   case MESA_FORMAT_SIGNED_L_LATC1:
2075
      return MESA_FORMAT_SIGNED_L8;
2076
   case MESA_FORMAT_LA_LATC2:
2077
      return MESA_FORMAT_AL88;
2078
   case MESA_FORMAT_SIGNED_LA_LATC2:
2079
      return MESA_FORMAT_SIGNED_AL88;
2080
   case MESA_FORMAT_ETC1_RGB8:
2081
   case MESA_FORMAT_ETC2_RGB8:
2082
   case MESA_FORMAT_ETC2_SRGB8:
2083
      return MESA_FORMAT_RGB888;
2084
   case MESA_FORMAT_ETC2_RGBA8_EAC:
2085
   case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC:
2086
   case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1:
2087
   case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1:
2088
      return MESA_FORMAT_RGBA8888;
2089
   case MESA_FORMAT_ETC2_R11_EAC:
2090
   case MESA_FORMAT_ETC2_SIGNED_R11_EAC:
2091
      return MESA_FORMAT_R16;
2092
   case MESA_FORMAT_ETC2_RG11_EAC:
2093
   case MESA_FORMAT_ETC2_SIGNED_RG11_EAC:
2094
      return MESA_FORMAT_GR1616;
2095
   default:
2096
#ifdef DEBUG
2097
      assert(!_mesa_is_format_compressed(format));
2098
#endif
2099
      return format;
2100
   }
2101
}
2102
 
2103
 
2104
GLuint
2105
_mesa_format_num_components(gl_format format)
2106
{
2107
   const struct gl_format_info *info = _mesa_get_format_info(format);
2108
   return ((info->RedBits > 0) +
2109
           (info->GreenBits > 0) +
2110
           (info->BlueBits > 0) +
2111
           (info->AlphaBits > 0) +
2112
           (info->LuminanceBits > 0) +
2113
           (info->IntensityBits > 0) +
2114
           (info->DepthBits > 0) +
2115
           (info->StencilBits > 0));
2116
}
2117
 
2118
 
2119
/**
2120
 * Return number of bytes needed to store an image of the given size
2121
 * in the given format.
2122
 */
2123
GLuint
2124
_mesa_format_image_size(gl_format format, GLsizei width,
2125
                        GLsizei height, GLsizei depth)
2126
{
2127
   const struct gl_format_info *info = _mesa_get_format_info(format);
2128
   /* Strictly speaking, a conditional isn't needed here */
2129
   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
2130
      /* compressed format (2D only for now) */
2131
      const GLuint bw = info->BlockWidth, bh = info->BlockHeight;
2132
      const GLuint wblocks = (width + bw - 1) / bw;
2133
      const GLuint hblocks = (height + bh - 1) / bh;
2134
      const GLuint sz = wblocks * hblocks * info->BytesPerBlock;
2135
      return sz * depth;
2136
   }
2137
   else {
2138
      /* non-compressed */
2139
      const GLuint sz = width * height * depth * info->BytesPerBlock;
2140
      return sz;
2141
   }
2142
}
2143
 
2144
 
2145
/**
2146
 * Same as _mesa_format_image_size() but returns a 64-bit value to
2147
 * accomodate very large textures.
2148
 */
2149
uint64_t
2150
_mesa_format_image_size64(gl_format format, GLsizei width,
2151
                          GLsizei height, GLsizei depth)
2152
{
2153
   const struct gl_format_info *info = _mesa_get_format_info(format);
2154
   /* Strictly speaking, a conditional isn't needed here */
2155
   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
2156
      /* compressed format (2D only for now) */
2157
      const uint64_t bw = info->BlockWidth, bh = info->BlockHeight;
2158
      const uint64_t wblocks = (width + bw - 1) / bw;
2159
      const uint64_t hblocks = (height + bh - 1) / bh;
2160
      const uint64_t sz = wblocks * hblocks * info->BytesPerBlock;
2161
      return sz * depth;
2162
   }
2163
   else {
2164
      /* non-compressed */
2165
      const uint64_t sz = ((uint64_t) width *
2166
                           (uint64_t) height *
2167
                           (uint64_t) depth *
2168
                           info->BytesPerBlock);
2169
      return sz;
2170
   }
2171
}
2172
 
2173
 
2174
 
2175
GLint
2176
_mesa_format_row_stride(gl_format format, GLsizei width)
2177
{
2178
   const struct gl_format_info *info = _mesa_get_format_info(format);
2179
   /* Strictly speaking, a conditional isn't needed here */
2180
   if (info->BlockWidth > 1 || info->BlockHeight > 1) {
2181
      /* compressed format */
2182
      const GLuint bw = info->BlockWidth;
2183
      const GLuint wblocks = (width + bw - 1) / bw;
2184
      const GLint stride = wblocks * info->BytesPerBlock;
2185
      return stride;
2186
   }
2187
   else {
2188
      const GLint stride = width * info->BytesPerBlock;
2189
      return stride;
2190
   }
2191
}
2192
 
2193
 
2194
/**
2195
 * Debug/test: check that all formats are handled in the
2196
 * _mesa_format_to_type_and_comps() function.  When new pixel formats
2197
 * are added to Mesa, that function needs to be updated.
2198
 * This is a no-op after the first call.
2199
 */
2200
static void
2201
check_format_to_type_and_comps(void)
2202
{
2203
   gl_format f;
2204
 
2205
   for (f = MESA_FORMAT_NONE + 1; f < MESA_FORMAT_COUNT; f++) {
2206
      GLenum datatype = 0;
2207
      GLuint comps = 0;
2208
      /* This function will emit a problem/warning if the format is
2209
       * not handled.
2210
       */
2211
      _mesa_format_to_type_and_comps(f, &datatype, &comps);
2212
   }
2213
}
2214
 
2215
 
2216
/**
2217
 * Do sanity checking of the format info table.
2218
 */
2219
void
2220
_mesa_test_formats(void)
2221
{
2222
   GLuint i;
2223
 
2224
   STATIC_ASSERT(Elements(format_info) == MESA_FORMAT_COUNT);
2225
 
2226
   for (i = 0; i < MESA_FORMAT_COUNT; i++) {
2227
      const struct gl_format_info *info = _mesa_get_format_info(i);
2228
      assert(info);
2229
 
2230
      assert(info->Name == i);
2231
 
2232
      if (info->Name == MESA_FORMAT_NONE)
2233
         continue;
2234
 
2235
      if (info->BlockWidth == 1 && info->BlockHeight == 1) {
2236
         if (info->RedBits > 0) {
2237
            GLuint t = info->RedBits + info->GreenBits
2238
               + info->BlueBits + info->AlphaBits;
2239
            assert(t / 8 <= info->BytesPerBlock);
2240
            (void) t;
2241
         }
2242
      }
2243
 
2244
      assert(info->DataType == GL_UNSIGNED_NORMALIZED ||
2245
             info->DataType == GL_SIGNED_NORMALIZED ||
2246
             info->DataType == GL_UNSIGNED_INT ||
2247
             info->DataType == GL_INT ||
2248
             info->DataType == GL_FLOAT ||
2249
             /* Z32_FLOAT_X24S8 has DataType of GL_NONE */
2250
             info->DataType == GL_NONE);
2251
 
2252
      if (info->BaseFormat == GL_RGB) {
2253
         assert(info->RedBits > 0);
2254
         assert(info->GreenBits > 0);
2255
         assert(info->BlueBits > 0);
2256
         assert(info->AlphaBits == 0);
2257
         assert(info->LuminanceBits == 0);
2258
         assert(info->IntensityBits == 0);
2259
      }
2260
      else if (info->BaseFormat == GL_RGBA) {
2261
         assert(info->RedBits > 0);
2262
         assert(info->GreenBits > 0);
2263
         assert(info->BlueBits > 0);
2264
         assert(info->AlphaBits > 0);
2265
         assert(info->LuminanceBits == 0);
2266
         assert(info->IntensityBits == 0);
2267
      }
2268
      else if (info->BaseFormat == GL_RG) {
2269
         assert(info->RedBits > 0);
2270
         assert(info->GreenBits > 0);
2271
         assert(info->BlueBits == 0);
2272
         assert(info->AlphaBits == 0);
2273
         assert(info->LuminanceBits == 0);
2274
         assert(info->IntensityBits == 0);
2275
      }
2276
      else if (info->BaseFormat == GL_RED) {
2277
         assert(info->RedBits > 0);
2278
         assert(info->GreenBits == 0);
2279
         assert(info->BlueBits == 0);
2280
         assert(info->AlphaBits == 0);
2281
         assert(info->LuminanceBits == 0);
2282
         assert(info->IntensityBits == 0);
2283
      }
2284
      else if (info->BaseFormat == GL_LUMINANCE) {
2285
         assert(info->RedBits == 0);
2286
         assert(info->GreenBits == 0);
2287
         assert(info->BlueBits == 0);
2288
         assert(info->AlphaBits == 0);
2289
         assert(info->LuminanceBits > 0);
2290
         assert(info->IntensityBits == 0);
2291
      }
2292
      else if (info->BaseFormat == GL_INTENSITY) {
2293
         assert(info->RedBits == 0);
2294
         assert(info->GreenBits == 0);
2295
         assert(info->BlueBits == 0);
2296
         assert(info->AlphaBits == 0);
2297
         assert(info->LuminanceBits == 0);
2298
         assert(info->IntensityBits > 0);
2299
      }
2300
   }
2301
 
2302
   check_format_to_type_and_comps();
2303
}
2304
 
2305
 
2306
 
2307
/**
2308
 * Return datatype and number of components per texel for the given gl_format.
2309
 * Only used for mipmap generation code.
2310
 */
2311
void
2312
_mesa_format_to_type_and_comps(gl_format format,
2313
                               GLenum *datatype, GLuint *comps)
2314
{
2315
   switch (format) {
2316
   case MESA_FORMAT_RGBA8888:
2317
   case MESA_FORMAT_RGBA8888_REV:
2318
   case MESA_FORMAT_ARGB8888:
2319
   case MESA_FORMAT_ARGB8888_REV:
2320
   case MESA_FORMAT_RGBX8888:
2321
   case MESA_FORMAT_RGBX8888_REV:
2322
   case MESA_FORMAT_XRGB8888:
2323
   case MESA_FORMAT_XRGB8888_REV:
2324
      *datatype = GL_UNSIGNED_BYTE;
2325
      *comps = 4;
2326
      return;
2327
   case MESA_FORMAT_RGB888:
2328
   case MESA_FORMAT_BGR888:
2329
      *datatype = GL_UNSIGNED_BYTE;
2330
      *comps = 3;
2331
      return;
2332
   case MESA_FORMAT_RGB565:
2333
   case MESA_FORMAT_RGB565_REV:
2334
      *datatype = GL_UNSIGNED_SHORT_5_6_5;
2335
      *comps = 3;
2336
      return;
2337
 
2338
   case MESA_FORMAT_ARGB4444:
2339
   case MESA_FORMAT_ARGB4444_REV:
2340
   case MESA_FORMAT_XRGB4444_UNORM:
2341
      *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
2342
      *comps = 4;
2343
      return;
2344
 
2345
   case MESA_FORMAT_ARGB1555:
2346
   case MESA_FORMAT_ARGB1555_REV:
2347
   case MESA_FORMAT_XRGB1555_UNORM:
2348
      *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
2349
      *comps = 4;
2350
      return;
2351
 
2352
   case MESA_FORMAT_ARGB2101010:
2353
      *datatype = GL_UNSIGNED_INT_2_10_10_10_REV;
2354
      *comps = 4;
2355
      return;
2356
 
2357
   case MESA_FORMAT_RGBA5551:
2358
      *datatype = GL_UNSIGNED_SHORT_5_5_5_1;
2359
      *comps = 4;
2360
      return;
2361
 
2362
   case MESA_FORMAT_AL44:
2363
      *datatype = MESA_UNSIGNED_BYTE_4_4;
2364
      *comps = 2;
2365
      return;
2366
 
2367
   case MESA_FORMAT_AL88:
2368
   case MESA_FORMAT_AL88_REV:
2369
   case MESA_FORMAT_GR88:
2370
   case MESA_FORMAT_RG88:
2371
      *datatype = GL_UNSIGNED_BYTE;
2372
      *comps = 2;
2373
      return;
2374
 
2375
   case MESA_FORMAT_AL1616:
2376
   case MESA_FORMAT_AL1616_REV:
2377
   case MESA_FORMAT_GR1616:
2378
   case MESA_FORMAT_RG1616:
2379
      *datatype = GL_UNSIGNED_SHORT;
2380
      *comps = 2;
2381
      return;
2382
 
2383
   case MESA_FORMAT_R16:
2384
   case MESA_FORMAT_A16:
2385
   case MESA_FORMAT_L16:
2386
   case MESA_FORMAT_I16:
2387
      *datatype = GL_UNSIGNED_SHORT;
2388
      *comps = 1;
2389
      return;
2390
 
2391
   case MESA_FORMAT_RGB332:
2392
      *datatype = GL_UNSIGNED_BYTE_3_3_2;
2393
      *comps = 3;
2394
      return;
2395
 
2396
   case MESA_FORMAT_A8:
2397
   case MESA_FORMAT_L8:
2398
   case MESA_FORMAT_I8:
2399
   case MESA_FORMAT_R8:
2400
   case MESA_FORMAT_S8:
2401
      *datatype = GL_UNSIGNED_BYTE;
2402
      *comps = 1;
2403
      return;
2404
 
2405
   case MESA_FORMAT_YCBCR:
2406
   case MESA_FORMAT_YCBCR_REV:
2407
      *datatype = GL_UNSIGNED_SHORT;
2408
      *comps = 2;
2409
      return;
2410
 
2411
   case MESA_FORMAT_Z24_S8:
2412
      *datatype = GL_UNSIGNED_INT_24_8_MESA;
2413
      *comps = 2;
2414
      return;
2415
 
2416
   case MESA_FORMAT_S8_Z24:
2417
      *datatype = GL_UNSIGNED_INT_8_24_REV_MESA;
2418
      *comps = 2;
2419
      return;
2420
 
2421
   case MESA_FORMAT_Z16:
2422
      *datatype = GL_UNSIGNED_SHORT;
2423
      *comps = 1;
2424
      return;
2425
 
2426
   case MESA_FORMAT_X8_Z24:
2427
      *datatype = GL_UNSIGNED_INT;
2428
      *comps = 1;
2429
      return;
2430
 
2431
   case MESA_FORMAT_Z24_X8:
2432
      *datatype = GL_UNSIGNED_INT;
2433
      *comps = 1;
2434
      return;
2435
 
2436
   case MESA_FORMAT_Z32:
2437
      *datatype = GL_UNSIGNED_INT;
2438
      *comps = 1;
2439
      return;
2440
 
2441
   case MESA_FORMAT_Z32_FLOAT:
2442
      *datatype = GL_FLOAT;
2443
      *comps = 1;
2444
      return;
2445
 
2446
   case MESA_FORMAT_Z32_FLOAT_X24S8:
2447
      *datatype = GL_FLOAT_32_UNSIGNED_INT_24_8_REV;
2448
      *comps = 1;
2449
      return;
2450
 
2451
   case MESA_FORMAT_DUDV8:
2452
      *datatype = GL_BYTE;
2453
      *comps = 2;
2454
      return;
2455
 
2456
   case MESA_FORMAT_SIGNED_R8:
2457
   case MESA_FORMAT_SIGNED_A8:
2458
   case MESA_FORMAT_SIGNED_L8:
2459
   case MESA_FORMAT_SIGNED_I8:
2460
      *datatype = GL_BYTE;
2461
      *comps = 1;
2462
      return;
2463
   case MESA_FORMAT_SIGNED_RG88_REV:
2464
   case MESA_FORMAT_SIGNED_AL88:
2465
      *datatype = GL_BYTE;
2466
      *comps = 2;
2467
      return;
2468
   case MESA_FORMAT_SIGNED_RGBA8888:
2469
   case MESA_FORMAT_SIGNED_RGBA8888_REV:
2470
   case MESA_FORMAT_SIGNED_RGBX8888:
2471
      *datatype = GL_BYTE;
2472
      *comps = 4;
2473
      return;
2474
 
2475
   case MESA_FORMAT_RGBA_16:
2476
      *datatype = GL_UNSIGNED_SHORT;
2477
      *comps = 4;
2478
      return;
2479
 
2480
   case MESA_FORMAT_SIGNED_R16:
2481
   case MESA_FORMAT_SIGNED_A16:
2482
   case MESA_FORMAT_SIGNED_L16:
2483
   case MESA_FORMAT_SIGNED_I16:
2484
      *datatype = GL_SHORT;
2485
      *comps = 1;
2486
      return;
2487
   case MESA_FORMAT_SIGNED_GR1616:
2488
   case MESA_FORMAT_SIGNED_AL1616:
2489
      *datatype = GL_SHORT;
2490
      *comps = 2;
2491
      return;
2492
   case MESA_FORMAT_SIGNED_RGB_16:
2493
      *datatype = GL_SHORT;
2494
      *comps = 3;
2495
      return;
2496
   case MESA_FORMAT_SIGNED_RGBA_16:
2497
      *datatype = GL_SHORT;
2498
      *comps = 4;
2499
      return;
2500
 
2501
   case MESA_FORMAT_SRGB8:
2502
      *datatype = GL_UNSIGNED_BYTE;
2503
      *comps = 3;
2504
      return;
2505
   case MESA_FORMAT_SRGBA8:
2506
   case MESA_FORMAT_SARGB8:
2507
      *datatype = GL_UNSIGNED_BYTE;
2508
      *comps = 4;
2509
      return;
2510
   case MESA_FORMAT_SL8:
2511
      *datatype = GL_UNSIGNED_BYTE;
2512
      *comps = 1;
2513
      return;
2514
   case MESA_FORMAT_SLA8:
2515
      *datatype = GL_UNSIGNED_BYTE;
2516
      *comps = 2;
2517
      return;
2518
 
2519
   case MESA_FORMAT_RGB_FXT1:
2520
   case MESA_FORMAT_RGBA_FXT1:
2521
   case MESA_FORMAT_RGB_DXT1:
2522
   case MESA_FORMAT_RGBA_DXT1:
2523
   case MESA_FORMAT_RGBA_DXT3:
2524
   case MESA_FORMAT_RGBA_DXT5:
2525
   case MESA_FORMAT_SRGB_DXT1:
2526
   case MESA_FORMAT_SRGBA_DXT1:
2527
   case MESA_FORMAT_SRGBA_DXT3:
2528
   case MESA_FORMAT_SRGBA_DXT5:
2529
   case MESA_FORMAT_RED_RGTC1:
2530
   case MESA_FORMAT_SIGNED_RED_RGTC1:
2531
   case MESA_FORMAT_RG_RGTC2:
2532
   case MESA_FORMAT_SIGNED_RG_RGTC2:
2533
   case MESA_FORMAT_L_LATC1:
2534
   case MESA_FORMAT_SIGNED_L_LATC1:
2535
   case MESA_FORMAT_LA_LATC2:
2536
   case MESA_FORMAT_SIGNED_LA_LATC2:
2537
   case MESA_FORMAT_ETC1_RGB8:
2538
   case MESA_FORMAT_ETC2_RGB8:
2539
   case MESA_FORMAT_ETC2_SRGB8:
2540
   case MESA_FORMAT_ETC2_RGBA8_EAC:
2541
   case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC:
2542
   case MESA_FORMAT_ETC2_R11_EAC:
2543
   case MESA_FORMAT_ETC2_RG11_EAC:
2544
   case MESA_FORMAT_ETC2_SIGNED_R11_EAC:
2545
   case MESA_FORMAT_ETC2_SIGNED_RG11_EAC:
2546
   case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1:
2547
   case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1:
2548
      /* XXX generate error instead? */
2549
      *datatype = GL_UNSIGNED_BYTE;
2550
      *comps = 0;
2551
      return;
2552
 
2553
   case MESA_FORMAT_RGBA_FLOAT32:
2554
      *datatype = GL_FLOAT;
2555
      *comps = 4;
2556
      return;
2557
   case MESA_FORMAT_RGBA_FLOAT16:
2558
      *datatype = GL_HALF_FLOAT_ARB;
2559
      *comps = 4;
2560
      return;
2561
   case MESA_FORMAT_RGB_FLOAT32:
2562
      *datatype = GL_FLOAT;
2563
      *comps = 3;
2564
      return;
2565
   case MESA_FORMAT_RGB_FLOAT16:
2566
      *datatype = GL_HALF_FLOAT_ARB;
2567
      *comps = 3;
2568
      return;
2569
   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
2570
   case MESA_FORMAT_RG_FLOAT32:
2571
      *datatype = GL_FLOAT;
2572
      *comps = 2;
2573
      return;
2574
   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
2575
   case MESA_FORMAT_RG_FLOAT16:
2576
      *datatype = GL_HALF_FLOAT_ARB;
2577
      *comps = 2;
2578
      return;
2579
   case MESA_FORMAT_ALPHA_FLOAT32:
2580
   case MESA_FORMAT_LUMINANCE_FLOAT32:
2581
   case MESA_FORMAT_INTENSITY_FLOAT32:
2582
   case MESA_FORMAT_R_FLOAT32:
2583
      *datatype = GL_FLOAT;
2584
      *comps = 1;
2585
      return;
2586
   case MESA_FORMAT_ALPHA_FLOAT16:
2587
   case MESA_FORMAT_LUMINANCE_FLOAT16:
2588
   case MESA_FORMAT_INTENSITY_FLOAT16:
2589
   case MESA_FORMAT_R_FLOAT16:
2590
      *datatype = GL_HALF_FLOAT_ARB;
2591
      *comps = 1;
2592
      return;
2593
 
2594
   case MESA_FORMAT_ALPHA_UINT8:
2595
   case MESA_FORMAT_LUMINANCE_UINT8:
2596
   case MESA_FORMAT_INTENSITY_UINT8:
2597
      *datatype = GL_UNSIGNED_BYTE;
2598
      *comps = 1;
2599
      return;
2600
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT8:
2601
      *datatype = GL_UNSIGNED_BYTE;
2602
      *comps = 2;
2603
      return;
2604
 
2605
   case MESA_FORMAT_ALPHA_UINT16:
2606
   case MESA_FORMAT_LUMINANCE_UINT16:
2607
   case MESA_FORMAT_INTENSITY_UINT16:
2608
      *datatype = GL_UNSIGNED_SHORT;
2609
      *comps = 1;
2610
      return;
2611
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT16:
2612
      *datatype = GL_UNSIGNED_SHORT;
2613
      *comps = 2;
2614
      return;
2615
   case MESA_FORMAT_ALPHA_UINT32:
2616
   case MESA_FORMAT_LUMINANCE_UINT32:
2617
   case MESA_FORMAT_INTENSITY_UINT32:
2618
      *datatype = GL_UNSIGNED_INT;
2619
      *comps = 1;
2620
      return;
2621
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT32:
2622
      *datatype = GL_UNSIGNED_INT;
2623
      *comps = 2;
2624
      return;
2625
   case MESA_FORMAT_ALPHA_INT8:
2626
   case MESA_FORMAT_LUMINANCE_INT8:
2627
   case MESA_FORMAT_INTENSITY_INT8:
2628
      *datatype = GL_BYTE;
2629
      *comps = 1;
2630
      return;
2631
   case MESA_FORMAT_LUMINANCE_ALPHA_INT8:
2632
      *datatype = GL_BYTE;
2633
      *comps = 2;
2634
      return;
2635
 
2636
   case MESA_FORMAT_ALPHA_INT16:
2637
   case MESA_FORMAT_LUMINANCE_INT16:
2638
   case MESA_FORMAT_INTENSITY_INT16:
2639
      *datatype = GL_SHORT;
2640
      *comps = 1;
2641
      return;
2642
   case MESA_FORMAT_LUMINANCE_ALPHA_INT16:
2643
      *datatype = GL_SHORT;
2644
      *comps = 2;
2645
      return;
2646
 
2647
   case MESA_FORMAT_ALPHA_INT32:
2648
   case MESA_FORMAT_LUMINANCE_INT32:
2649
   case MESA_FORMAT_INTENSITY_INT32:
2650
      *datatype = GL_INT;
2651
      *comps = 1;
2652
      return;
2653
   case MESA_FORMAT_LUMINANCE_ALPHA_INT32:
2654
      *datatype = GL_INT;
2655
      *comps = 2;
2656
      return;
2657
 
2658
   case MESA_FORMAT_R_INT8:
2659
      *datatype = GL_BYTE;
2660
      *comps = 1;
2661
      return;
2662
   case MESA_FORMAT_RG_INT8:
2663
      *datatype = GL_BYTE;
2664
      *comps = 2;
2665
      return;
2666
   case MESA_FORMAT_RGB_INT8:
2667
      *datatype = GL_BYTE;
2668
      *comps = 3;
2669
      return;
2670
   case MESA_FORMAT_RGBA_INT8:
2671
      *datatype = GL_BYTE;
2672
      *comps = 4;
2673
      return;
2674
   case MESA_FORMAT_R_INT16:
2675
      *datatype = GL_SHORT;
2676
      *comps = 1;
2677
      return;
2678
   case MESA_FORMAT_RG_INT16:
2679
      *datatype = GL_SHORT;
2680
      *comps = 2;
2681
      return;
2682
   case MESA_FORMAT_RGB_INT16:
2683
      *datatype = GL_SHORT;
2684
      *comps = 3;
2685
      return;
2686
   case MESA_FORMAT_RGBA_INT16:
2687
      *datatype = GL_SHORT;
2688
      *comps = 4;
2689
      return;
2690
   case MESA_FORMAT_R_INT32:
2691
      *datatype = GL_INT;
2692
      *comps = 1;
2693
      return;
2694
   case MESA_FORMAT_RG_INT32:
2695
      *datatype = GL_INT;
2696
      *comps = 2;
2697
      return;
2698
   case MESA_FORMAT_RGB_INT32:
2699
      *datatype = GL_INT;
2700
      *comps = 3;
2701
      return;
2702
   case MESA_FORMAT_RGBA_INT32:
2703
      *datatype = GL_INT;
2704
      *comps = 4;
2705
      return;
2706
 
2707
   /**
2708
    * \name Non-normalized unsigned integer formats.
2709
    */
2710
   case MESA_FORMAT_R_UINT8:
2711
      *datatype = GL_UNSIGNED_BYTE;
2712
      *comps = 1;
2713
      return;
2714
   case MESA_FORMAT_RG_UINT8:
2715
      *datatype = GL_UNSIGNED_BYTE;
2716
      *comps = 2;
2717
      return;
2718
   case MESA_FORMAT_RGB_UINT8:
2719
      *datatype = GL_UNSIGNED_BYTE;
2720
      *comps = 3;
2721
      return;
2722
   case MESA_FORMAT_RGBA_UINT8:
2723
      *datatype = GL_UNSIGNED_BYTE;
2724
      *comps = 4;
2725
      return;
2726
   case MESA_FORMAT_R_UINT16:
2727
      *datatype = GL_UNSIGNED_SHORT;
2728
      *comps = 1;
2729
      return;
2730
   case MESA_FORMAT_RG_UINT16:
2731
      *datatype = GL_UNSIGNED_SHORT;
2732
      *comps = 2;
2733
      return;
2734
   case MESA_FORMAT_RGB_UINT16:
2735
      *datatype = GL_UNSIGNED_SHORT;
2736
      *comps = 3;
2737
      return;
2738
   case MESA_FORMAT_RGBA_UINT16:
2739
      *datatype = GL_UNSIGNED_SHORT;
2740
      *comps = 4;
2741
      return;
2742
   case MESA_FORMAT_R_UINT32:
2743
      *datatype = GL_UNSIGNED_INT;
2744
      *comps = 1;
2745
      return;
2746
   case MESA_FORMAT_RG_UINT32:
2747
      *datatype = GL_UNSIGNED_INT;
2748
      *comps = 2;
2749
      return;
2750
   case MESA_FORMAT_RGB_UINT32:
2751
      *datatype = GL_UNSIGNED_INT;
2752
      *comps = 3;
2753
      return;
2754
   case MESA_FORMAT_RGBA_UINT32:
2755
      *datatype = GL_UNSIGNED_INT;
2756
      *comps = 4;
2757
      return;
2758
 
2759
   case MESA_FORMAT_RGB9_E5_FLOAT:
2760
      *datatype = GL_UNSIGNED_INT_5_9_9_9_REV;
2761
      *comps = 3;
2762
      return;
2763
 
2764
   case MESA_FORMAT_R11_G11_B10_FLOAT:
2765
      *datatype = GL_UNSIGNED_INT_10F_11F_11F_REV;
2766
      *comps = 3;
2767
      return;
2768
 
2769
   case MESA_FORMAT_ARGB2101010_UINT:
2770
   case MESA_FORMAT_ABGR2101010_UINT:
2771
      *datatype = GL_UNSIGNED_INT_2_10_10_10_REV;
2772
      *comps = 4;
2773
      return;
2774
 
2775
   case MESA_FORMAT_XBGR8888_SRGB:
2776
   case MESA_FORMAT_XBGR8888_UINT:
2777
      *datatype = GL_UNSIGNED_BYTE;
2778
      *comps = 4;
2779
      return;
2780
 
2781
   case MESA_FORMAT_XBGR8888_SNORM:
2782
   case MESA_FORMAT_XBGR8888_SINT:
2783
      *datatype = GL_BYTE;
2784
      *comps = 4;
2785
      return;
2786
 
2787
   case MESA_FORMAT_XRGB2101010_UNORM:
2788
      *datatype = GL_UNSIGNED_INT_2_10_10_10_REV;
2789
      *comps = 4;
2790
      return;
2791
 
2792
   case MESA_FORMAT_XBGR16161616_UNORM:
2793
   case MESA_FORMAT_XBGR16161616_UINT:
2794
      *datatype = GL_UNSIGNED_SHORT;
2795
      *comps = 4;
2796
      return;
2797
 
2798
   case MESA_FORMAT_XBGR16161616_SNORM:
2799
   case MESA_FORMAT_XBGR16161616_SINT:
2800
      *datatype = GL_SHORT;
2801
      *comps = 4;
2802
      return;
2803
 
2804
   case MESA_FORMAT_XBGR16161616_FLOAT:
2805
      *datatype = GL_HALF_FLOAT;
2806
      *comps = 4;
2807
      return;
2808
 
2809
   case MESA_FORMAT_XBGR32323232_FLOAT:
2810
      *datatype = GL_FLOAT;
2811
      *comps = 4;
2812
      return;
2813
 
2814
   case MESA_FORMAT_XBGR32323232_UINT:
2815
      *datatype = GL_UNSIGNED_INT;
2816
      *comps = 4;
2817
      return;
2818
 
2819
   case MESA_FORMAT_XBGR32323232_SINT:
2820
      *datatype = GL_INT;
2821
      *comps = 4;
2822
      return;
2823
 
2824
   case MESA_FORMAT_COUNT:
2825
      assert(0);
2826
      return;
2827
 
2828
   case MESA_FORMAT_NONE:
2829
   /* For debug builds, warn if any formats are not handled */
2830
#ifdef DEBUG
2831
   default:
2832
#endif
2833
      _mesa_problem(NULL, "bad format %s in _mesa_format_to_type_and_comps",
2834
                    _mesa_get_format_name(format));
2835
      *datatype = 0;
2836
      *comps = 1;
2837
   }
2838
}
2839
 
2840
/**
2841
 * Check if a gl_format exactly matches a GL format/type combination
2842
 * such that we can use memcpy() from one to the other.
2843
 * \param gl_format  a MESA_FORMAT_x value
2844
 * \param format  the user-specified image format
2845
 * \param type  the user-specified image datatype
2846
 * \param swapBytes  typically the current pixel pack/unpack byteswap state
2847
 * \return GL_TRUE if the formats match, GL_FALSE otherwise.
2848
 */
2849
GLboolean
2850
_mesa_format_matches_format_and_type(gl_format gl_format,
2851
				     GLenum format, GLenum type,
2852
                                     GLboolean swapBytes)
2853
{
2854
   const GLboolean littleEndian = _mesa_little_endian();
2855
 
2856
   /* Note: When reading a GL format/type combination, the format lists channel
2857
    * assignments from most significant channel in the type to least
2858
    * significant.  A type with _REV indicates that the assignments are
2859
    * swapped, so they are listed from least significant to most significant.
2860
    *
2861
    * For sanity, please keep this switch statement ordered the same as the
2862
    * enums in formats.h.
2863
    */
2864
 
2865
   switch (gl_format) {
2866
 
2867
   case MESA_FORMAT_NONE:
2868
   case MESA_FORMAT_COUNT:
2869
      return GL_FALSE;
2870
 
2871
   case MESA_FORMAT_RGBA8888:
2872
   case MESA_FORMAT_SRGBA8:
2873
      if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8 && !swapBytes)
2874
         return GL_TRUE;
2875
 
2876
      if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8_REV && swapBytes)
2877
         return GL_TRUE;
2878
 
2879
      if (format == GL_RGBA && type == GL_UNSIGNED_BYTE && !littleEndian)
2880
         return GL_TRUE;
2881
 
2882
      if (format == GL_ABGR_EXT && type == GL_UNSIGNED_INT_8_8_8_8_REV
2883
          && !swapBytes)
2884
         return GL_TRUE;
2885
 
2886
      if (format == GL_ABGR_EXT && type == GL_UNSIGNED_INT_8_8_8_8
2887
          && swapBytes)
2888
         return GL_TRUE;
2889
 
2890
      if (format == GL_ABGR_EXT && type == GL_UNSIGNED_BYTE && littleEndian)
2891
         return GL_TRUE;
2892
 
2893
      return GL_FALSE;
2894
 
2895
   case MESA_FORMAT_RGBA8888_REV:
2896
      if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8_REV &&
2897
          !swapBytes)
2898
         return GL_TRUE;
2899
 
2900
      if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8 && swapBytes)
2901
         return GL_TRUE;
2902
 
2903
      if (format == GL_RGBA && type == GL_UNSIGNED_BYTE && littleEndian)
2904
         return GL_TRUE;
2905
 
2906
      if (format == GL_ABGR_EXT && type == GL_UNSIGNED_INT_8_8_8_8 &&
2907
          !swapBytes)
2908
         return GL_TRUE;
2909
 
2910
      if (format == GL_ABGR_EXT && type == GL_UNSIGNED_INT_8_8_8_8_REV &&
2911
          swapBytes)
2912
         return GL_TRUE;
2913
 
2914
      if (format == GL_ABGR_EXT && type == GL_UNSIGNED_BYTE && !littleEndian)
2915
         return GL_TRUE;
2916
 
2917
      return GL_FALSE;
2918
 
2919
   case MESA_FORMAT_ARGB8888:
2920
   case MESA_FORMAT_SARGB8:
2921
      if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV &&
2922
          !swapBytes)
2923
         return GL_TRUE;
2924
 
2925
      if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8 && swapBytes)
2926
         return GL_TRUE;
2927
 
2928
      if (format == GL_BGRA && type == GL_UNSIGNED_BYTE && littleEndian)
2929
         return GL_TRUE;
2930
 
2931
      return GL_FALSE;
2932
 
2933
   case MESA_FORMAT_ARGB8888_REV:
2934
      if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8 && !swapBytes)
2935
         return GL_TRUE;
2936
 
2937
      if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV &&
2938
          swapBytes)
2939
         return GL_TRUE;
2940
 
2941
      if (format == GL_BGRA && type == GL_UNSIGNED_BYTE && !littleEndian)
2942
         return GL_TRUE;
2943
 
2944
      return GL_FALSE;
2945
 
2946
   case MESA_FORMAT_RGBX8888:
2947
   case MESA_FORMAT_RGBX8888_REV:
2948
      return GL_FALSE;
2949
 
2950
   case MESA_FORMAT_XRGB8888:
2951
   case MESA_FORMAT_XRGB8888_REV:
2952
      return GL_FALSE;
2953
 
2954
   case MESA_FORMAT_RGB888:
2955
   case MESA_FORMAT_SRGB8:
2956
      return format == GL_BGR && type == GL_UNSIGNED_BYTE && littleEndian;
2957
 
2958
   case MESA_FORMAT_BGR888:
2959
      return format == GL_RGB && type == GL_UNSIGNED_BYTE && littleEndian;
2960
 
2961
   case MESA_FORMAT_RGB565:
2962
      return format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5 && !swapBytes;
2963
 
2964
   case MESA_FORMAT_RGB565_REV:
2965
      /* Some of the 16-bit MESA_FORMATs that would seem to correspond to
2966
       * GL_UNSIGNED_SHORT_* are byte-swapped instead of channel-reversed,
2967
       * according to formats.h, so they can't be matched.
2968
       */
2969
      return GL_FALSE;
2970
 
2971
   case MESA_FORMAT_ARGB4444:
2972
      return format == GL_BGRA && type == GL_UNSIGNED_SHORT_4_4_4_4_REV &&
2973
         !swapBytes;
2974
 
2975
   case MESA_FORMAT_ARGB4444_REV:
2976
      return GL_FALSE;
2977
 
2978
   case MESA_FORMAT_RGBA5551:
2979
      return format == GL_RGBA && type == GL_UNSIGNED_SHORT_5_5_5_1 &&
2980
         !swapBytes;
2981
 
2982
   case MESA_FORMAT_ARGB1555:
2983
      return format == GL_BGRA && type == GL_UNSIGNED_SHORT_1_5_5_5_REV &&
2984
         !swapBytes;
2985
 
2986
   case MESA_FORMAT_ARGB1555_REV:
2987
      return GL_FALSE;
2988
 
2989
   case MESA_FORMAT_AL44:
2990
      return GL_FALSE;
2991
   case MESA_FORMAT_AL88:
2992
   case MESA_FORMAT_SLA8:
2993
      return format == GL_LUMINANCE_ALPHA && type == GL_UNSIGNED_BYTE && littleEndian;
2994
   case MESA_FORMAT_AL88_REV:
2995
      return GL_FALSE;
2996
 
2997
   case MESA_FORMAT_AL1616:
2998
      return format == GL_LUMINANCE_ALPHA && type == GL_UNSIGNED_SHORT && littleEndian && !swapBytes;
2999
   case MESA_FORMAT_AL1616_REV:
3000
      return GL_FALSE;
3001
 
3002
   case MESA_FORMAT_RGB332:
3003
      return format == GL_RGB && type == GL_UNSIGNED_BYTE_3_3_2;
3004
 
3005
   case MESA_FORMAT_A8:
3006
      return format == GL_ALPHA && type == GL_UNSIGNED_BYTE;
3007
   case MESA_FORMAT_A16:
3008
      return format == GL_ALPHA && type == GL_UNSIGNED_SHORT && !swapBytes;
3009
   case MESA_FORMAT_L8:
3010
   case MESA_FORMAT_SL8:
3011
      return format == GL_LUMINANCE && type == GL_UNSIGNED_BYTE;
3012
   case MESA_FORMAT_L16:
3013
      return format == GL_LUMINANCE && type == GL_UNSIGNED_SHORT && !swapBytes;
3014
   case MESA_FORMAT_I8:
3015
      return format == GL_INTENSITY && type == GL_UNSIGNED_BYTE;
3016
   case MESA_FORMAT_I16:
3017
      return format == GL_INTENSITY && type == GL_UNSIGNED_SHORT && !swapBytes;
3018
 
3019
   case MESA_FORMAT_YCBCR:
3020
      return format == GL_YCBCR_MESA &&
3021
             ((type == GL_UNSIGNED_SHORT_8_8_MESA && littleEndian != swapBytes) ||
3022
              (type == GL_UNSIGNED_SHORT_8_8_REV_MESA && littleEndian == swapBytes));
3023
   case MESA_FORMAT_YCBCR_REV:
3024
      return format == GL_YCBCR_MESA &&
3025
             ((type == GL_UNSIGNED_SHORT_8_8_MESA && littleEndian == swapBytes) ||
3026
              (type == GL_UNSIGNED_SHORT_8_8_REV_MESA && littleEndian != swapBytes));
3027
 
3028
   case MESA_FORMAT_R8:
3029
      return format == GL_RED && type == GL_UNSIGNED_BYTE;
3030
   case MESA_FORMAT_GR88:
3031
      return format == GL_RG && type == GL_UNSIGNED_BYTE && littleEndian;
3032
   case MESA_FORMAT_RG88:
3033
      return GL_FALSE;
3034
 
3035
   case MESA_FORMAT_R16:
3036
      return format == GL_RED && type == GL_UNSIGNED_SHORT &&
3037
         !swapBytes;
3038
   case MESA_FORMAT_GR1616:
3039
      return format == GL_RG && type == GL_UNSIGNED_SHORT && littleEndian &&
3040
         !swapBytes;
3041
   case MESA_FORMAT_RG1616:
3042
      return GL_FALSE;
3043
 
3044
   case MESA_FORMAT_ARGB2101010:
3045
      return format == GL_BGRA && type == GL_UNSIGNED_INT_2_10_10_10_REV &&
3046
         !swapBytes;
3047
 
3048
   case MESA_FORMAT_Z24_S8:
3049
      return format == GL_DEPTH_STENCIL && type == GL_UNSIGNED_INT_24_8 &&
3050
         !swapBytes;
3051
   case MESA_FORMAT_Z24_X8:
3052
   case MESA_FORMAT_S8_Z24:
3053
      return GL_FALSE;
3054
 
3055
   case MESA_FORMAT_Z16:
3056
      return format == GL_DEPTH_COMPONENT && type == GL_UNSIGNED_SHORT &&
3057
         !swapBytes;
3058
 
3059
   case MESA_FORMAT_X8_Z24:
3060
      return GL_FALSE;
3061
 
3062
   case MESA_FORMAT_Z32:
3063
      return format == GL_DEPTH_COMPONENT && type == GL_UNSIGNED_INT &&
3064
         !swapBytes;
3065
 
3066
   case MESA_FORMAT_S8:
3067
      return format == GL_STENCIL_INDEX && type == GL_UNSIGNED_BYTE;
3068
 
3069
   case MESA_FORMAT_SRGB_DXT1:
3070
   case MESA_FORMAT_SRGBA_DXT1:
3071
   case MESA_FORMAT_SRGBA_DXT3:
3072
   case MESA_FORMAT_SRGBA_DXT5:
3073
      return GL_FALSE;
3074
 
3075
   case MESA_FORMAT_RGB_FXT1:
3076
   case MESA_FORMAT_RGBA_FXT1:
3077
   case MESA_FORMAT_RGB_DXT1:
3078
   case MESA_FORMAT_RGBA_DXT1:
3079
   case MESA_FORMAT_RGBA_DXT3:
3080
   case MESA_FORMAT_RGBA_DXT5:
3081
      return GL_FALSE;
3082
 
3083
   case MESA_FORMAT_RGBA_FLOAT32:
3084
      return format == GL_RGBA && type == GL_FLOAT && !swapBytes;
3085
   case MESA_FORMAT_RGBA_FLOAT16:
3086
      return format == GL_RGBA && type == GL_HALF_FLOAT && !swapBytes;
3087
 
3088
   case MESA_FORMAT_RGB_FLOAT32:
3089
      return format == GL_RGB && type == GL_FLOAT && !swapBytes;
3090
   case MESA_FORMAT_RGB_FLOAT16:
3091
      return format == GL_RGB && type == GL_HALF_FLOAT && !swapBytes;
3092
 
3093
   case MESA_FORMAT_ALPHA_FLOAT32:
3094
      return format == GL_ALPHA && type == GL_FLOAT && !swapBytes;
3095
   case MESA_FORMAT_ALPHA_FLOAT16:
3096
      return format == GL_ALPHA && type == GL_HALF_FLOAT && !swapBytes;
3097
 
3098
   case MESA_FORMAT_LUMINANCE_FLOAT32:
3099
      return format == GL_LUMINANCE && type == GL_FLOAT && !swapBytes;
3100
   case MESA_FORMAT_LUMINANCE_FLOAT16:
3101
      return format == GL_LUMINANCE && type == GL_HALF_FLOAT && !swapBytes;
3102
 
3103
   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
3104
      return format == GL_LUMINANCE_ALPHA && type == GL_FLOAT && !swapBytes;
3105
   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
3106
      return format == GL_LUMINANCE_ALPHA && type == GL_HALF_FLOAT && !swapBytes;
3107
 
3108
   case MESA_FORMAT_INTENSITY_FLOAT32:
3109
      return format == GL_INTENSITY && type == GL_FLOAT && !swapBytes;
3110
   case MESA_FORMAT_INTENSITY_FLOAT16:
3111
      return format == GL_INTENSITY && type == GL_HALF_FLOAT && !swapBytes;
3112
 
3113
   case MESA_FORMAT_R_FLOAT32:
3114
      return format == GL_RED && type == GL_FLOAT && !swapBytes;
3115
   case MESA_FORMAT_R_FLOAT16:
3116
      return format == GL_RED && type == GL_HALF_FLOAT && !swapBytes;
3117
 
3118
   case MESA_FORMAT_RG_FLOAT32:
3119
      return format == GL_RG && type == GL_FLOAT && !swapBytes;
3120
   case MESA_FORMAT_RG_FLOAT16:
3121
      return format == GL_RG && type == GL_HALF_FLOAT && !swapBytes;
3122
 
3123
   case MESA_FORMAT_ALPHA_UINT8:
3124
      return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_BYTE;
3125
   case MESA_FORMAT_ALPHA_UINT16:
3126
      return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_SHORT &&
3127
             !swapBytes;
3128
   case MESA_FORMAT_ALPHA_UINT32:
3129
      return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_INT &&
3130
             !swapBytes;
3131
   case MESA_FORMAT_ALPHA_INT8:
3132
      return format == GL_ALPHA_INTEGER && type == GL_BYTE;
3133
   case MESA_FORMAT_ALPHA_INT16:
3134
      return format == GL_ALPHA_INTEGER && type == GL_SHORT && !swapBytes;
3135
   case MESA_FORMAT_ALPHA_INT32:
3136
      return format == GL_ALPHA_INTEGER && type == GL_INT && !swapBytes;
3137
 
3138
   case MESA_FORMAT_INTENSITY_UINT8:
3139
   case MESA_FORMAT_INTENSITY_UINT16:
3140
   case MESA_FORMAT_INTENSITY_UINT32:
3141
   case MESA_FORMAT_INTENSITY_INT8:
3142
   case MESA_FORMAT_INTENSITY_INT16:
3143
   case MESA_FORMAT_INTENSITY_INT32:
3144
      /* GL_INTENSITY_INTEGER_EXT doesn't exist. */
3145
      return GL_FALSE;
3146
 
3147
   case MESA_FORMAT_LUMINANCE_UINT8:
3148
      return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_BYTE;
3149
   case MESA_FORMAT_LUMINANCE_UINT16:
3150
      return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_SHORT &&
3151
             !swapBytes;
3152
   case MESA_FORMAT_LUMINANCE_UINT32:
3153
      return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_INT &&
3154
             !swapBytes;
3155
   case MESA_FORMAT_LUMINANCE_INT8:
3156
      return format == GL_LUMINANCE_INTEGER_EXT && type == GL_BYTE;
3157
   case MESA_FORMAT_LUMINANCE_INT16:
3158
      return format == GL_LUMINANCE_INTEGER_EXT && type == GL_SHORT &&
3159
             !swapBytes;
3160
   case MESA_FORMAT_LUMINANCE_INT32:
3161
      return format == GL_LUMINANCE_INTEGER_EXT && type == GL_INT && !swapBytes;
3162
 
3163
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT8:
3164
      return format == GL_LUMINANCE_ALPHA_INTEGER_EXT &&
3165
             type == GL_UNSIGNED_BYTE && !swapBytes;
3166
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT16:
3167
      return format == GL_LUMINANCE_ALPHA_INTEGER_EXT &&
3168
             type == GL_UNSIGNED_SHORT && !swapBytes;
3169
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT32:
3170
      return format == GL_LUMINANCE_ALPHA_INTEGER_EXT &&
3171
             type == GL_UNSIGNED_INT && !swapBytes;
3172
   case MESA_FORMAT_LUMINANCE_ALPHA_INT8:
3173
      return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_BYTE &&
3174
             !swapBytes;
3175
   case MESA_FORMAT_LUMINANCE_ALPHA_INT16:
3176
      return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_SHORT &&
3177
             !swapBytes;
3178
   case MESA_FORMAT_LUMINANCE_ALPHA_INT32:
3179
      return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_INT &&
3180
             !swapBytes;
3181
 
3182
   case MESA_FORMAT_R_INT8:
3183
      return format == GL_RED_INTEGER && type == GL_BYTE;
3184
   case MESA_FORMAT_RG_INT8:
3185
      return format == GL_RG_INTEGER && type == GL_BYTE && !swapBytes;
3186
   case MESA_FORMAT_RGB_INT8:
3187
      return format == GL_RGB_INTEGER && type == GL_BYTE && !swapBytes;
3188
   case MESA_FORMAT_RGBA_INT8:
3189
      return format == GL_RGBA_INTEGER && type == GL_BYTE && !swapBytes;
3190
   case MESA_FORMAT_R_INT16:
3191
      return format == GL_RED_INTEGER && type == GL_SHORT && !swapBytes;
3192
   case MESA_FORMAT_RG_INT16:
3193
      return format == GL_RG_INTEGER && type == GL_SHORT && !swapBytes;
3194
   case MESA_FORMAT_RGB_INT16:
3195
      return format == GL_RGB_INTEGER && type == GL_SHORT && !swapBytes;
3196
   case MESA_FORMAT_RGBA_INT16:
3197
      return format == GL_RGBA_INTEGER && type == GL_SHORT && !swapBytes;
3198
   case MESA_FORMAT_R_INT32:
3199
      return format == GL_RED_INTEGER && type == GL_INT && !swapBytes;
3200
   case MESA_FORMAT_RG_INT32:
3201
      return format == GL_RG_INTEGER && type == GL_INT && !swapBytes;
3202
   case MESA_FORMAT_RGB_INT32:
3203
      return format == GL_RGB_INTEGER && type == GL_INT && !swapBytes;
3204
   case MESA_FORMAT_RGBA_INT32:
3205
      return format == GL_RGBA_INTEGER && type == GL_INT && !swapBytes;
3206
 
3207
   case MESA_FORMAT_R_UINT8:
3208
      return format == GL_RED_INTEGER && type == GL_UNSIGNED_BYTE;
3209
   case MESA_FORMAT_RG_UINT8:
3210
      return format == GL_RG_INTEGER && type == GL_UNSIGNED_BYTE && !swapBytes;
3211
   case MESA_FORMAT_RGB_UINT8:
3212
      return format == GL_RGB_INTEGER && type == GL_UNSIGNED_BYTE && !swapBytes;
3213
   case MESA_FORMAT_RGBA_UINT8:
3214
      return format == GL_RGBA_INTEGER && type == GL_UNSIGNED_BYTE &&
3215
             !swapBytes;
3216
   case MESA_FORMAT_R_UINT16:
3217
      return format == GL_RED_INTEGER && type == GL_UNSIGNED_SHORT &&
3218
             !swapBytes;
3219
   case MESA_FORMAT_RG_UINT16:
3220
      return format == GL_RG_INTEGER && type == GL_UNSIGNED_SHORT && !swapBytes;
3221
   case MESA_FORMAT_RGB_UINT16:
3222
      return format == GL_RGB_INTEGER && type == GL_UNSIGNED_SHORT &&
3223
             !swapBytes;
3224
   case MESA_FORMAT_RGBA_UINT16:
3225
      return format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT &&
3226
             !swapBytes;
3227
   case MESA_FORMAT_R_UINT32:
3228
      return format == GL_RED_INTEGER && type == GL_UNSIGNED_INT && !swapBytes;
3229
   case MESA_FORMAT_RG_UINT32:
3230
      return format == GL_RG_INTEGER && type == GL_UNSIGNED_INT && !swapBytes;
3231
   case MESA_FORMAT_RGB_UINT32:
3232
      return format == GL_RGB_INTEGER && type == GL_UNSIGNED_INT && !swapBytes;
3233
   case MESA_FORMAT_RGBA_UINT32:
3234
      return format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT && !swapBytes;
3235
 
3236
   case MESA_FORMAT_DUDV8:
3237
      return (format == GL_DU8DV8_ATI || format == GL_DUDV_ATI) &&
3238
             type == GL_BYTE && littleEndian && !swapBytes;
3239
 
3240
   case MESA_FORMAT_SIGNED_R8:
3241
      return format == GL_RED && type == GL_BYTE;
3242
   case MESA_FORMAT_SIGNED_RG88_REV:
3243
      return format == GL_RG && type == GL_BYTE && littleEndian &&
3244
             !swapBytes;
3245
   case MESA_FORMAT_SIGNED_RGBX8888:
3246
      return GL_FALSE;
3247
 
3248
   case MESA_FORMAT_SIGNED_RGBA8888:
3249
      if (format == GL_RGBA && type == GL_BYTE && !littleEndian)
3250
         return GL_TRUE;
3251
 
3252
      if (format == GL_ABGR_EXT && type == GL_BYTE && littleEndian)
3253
         return GL_TRUE;
3254
 
3255
      return GL_FALSE;
3256
 
3257
   case MESA_FORMAT_SIGNED_RGBA8888_REV:
3258
      if (format == GL_RGBA && type == GL_BYTE && littleEndian)
3259
         return GL_TRUE;
3260
 
3261
      if (format == GL_ABGR_EXT && type == GL_BYTE && !littleEndian)
3262
         return GL_TRUE;
3263
 
3264
      return GL_FALSE;
3265
 
3266
   case MESA_FORMAT_SIGNED_R16:
3267
      return format == GL_RED && type == GL_SHORT &&
3268
             !swapBytes;
3269
   case MESA_FORMAT_SIGNED_GR1616:
3270
      return format == GL_RG && type == GL_SHORT && littleEndian && !swapBytes;
3271
   case MESA_FORMAT_SIGNED_RGB_16:
3272
      return format == GL_RGB && type == GL_SHORT && !swapBytes;
3273
   case MESA_FORMAT_SIGNED_RGBA_16:
3274
      return format == GL_RGBA && type == GL_SHORT && !swapBytes;
3275
   case MESA_FORMAT_RGBA_16:
3276
      return format == GL_RGBA && type == GL_UNSIGNED_SHORT &&
3277
             !swapBytes;
3278
 
3279
   case MESA_FORMAT_RED_RGTC1:
3280
   case MESA_FORMAT_SIGNED_RED_RGTC1:
3281
   case MESA_FORMAT_RG_RGTC2:
3282
   case MESA_FORMAT_SIGNED_RG_RGTC2:
3283
      return GL_FALSE;
3284
 
3285
   case MESA_FORMAT_L_LATC1:
3286
   case MESA_FORMAT_SIGNED_L_LATC1:
3287
   case MESA_FORMAT_LA_LATC2:
3288
   case MESA_FORMAT_SIGNED_LA_LATC2:
3289
      return GL_FALSE;
3290
 
3291
   case MESA_FORMAT_ETC1_RGB8:
3292
   case MESA_FORMAT_ETC2_RGB8:
3293
   case MESA_FORMAT_ETC2_SRGB8:
3294
   case MESA_FORMAT_ETC2_RGBA8_EAC:
3295
   case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC:
3296
   case MESA_FORMAT_ETC2_R11_EAC:
3297
   case MESA_FORMAT_ETC2_RG11_EAC:
3298
   case MESA_FORMAT_ETC2_SIGNED_R11_EAC:
3299
   case MESA_FORMAT_ETC2_SIGNED_RG11_EAC:
3300
   case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1:
3301
   case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1:
3302
      return GL_FALSE;
3303
 
3304
   case MESA_FORMAT_SIGNED_A8:
3305
      return format == GL_ALPHA && type == GL_BYTE;
3306
   case MESA_FORMAT_SIGNED_L8:
3307
      return format == GL_LUMINANCE && type == GL_BYTE;
3308
   case MESA_FORMAT_SIGNED_AL88:
3309
      return format == GL_LUMINANCE_ALPHA && type == GL_BYTE &&
3310
             littleEndian && !swapBytes;
3311
   case MESA_FORMAT_SIGNED_I8:
3312
      return format == GL_INTENSITY && type == GL_BYTE;
3313
   case MESA_FORMAT_SIGNED_A16:
3314
      return format == GL_ALPHA && type == GL_SHORT && !swapBytes;
3315
   case MESA_FORMAT_SIGNED_L16:
3316
      return format == GL_LUMINANCE && type == GL_SHORT && !swapBytes;
3317
   case MESA_FORMAT_SIGNED_AL1616:
3318
      return format == GL_LUMINANCE_ALPHA && type == GL_SHORT &&
3319
             littleEndian && !swapBytes;
3320
   case MESA_FORMAT_SIGNED_I16:
3321
      return format == GL_INTENSITY && type == GL_SHORT && littleEndian &&
3322
             !swapBytes;
3323
 
3324
   case MESA_FORMAT_ARGB2101010_UINT:
3325
      return (format == GL_BGRA_INTEGER_EXT &&
3326
              type == GL_UNSIGNED_INT_2_10_10_10_REV &&
3327
              !swapBytes);
3328
 
3329
   case MESA_FORMAT_ABGR2101010_UINT:
3330
      return (format == GL_RGBA_INTEGER_EXT &&
3331
              type == GL_UNSIGNED_INT_2_10_10_10_REV &&
3332
              !swapBytes);
3333
 
3334
   case MESA_FORMAT_RGB9_E5_FLOAT:
3335
      return format == GL_RGB && type == GL_UNSIGNED_INT_5_9_9_9_REV &&
3336
         !swapBytes;
3337
 
3338
   case MESA_FORMAT_R11_G11_B10_FLOAT:
3339
      return format == GL_RGB && type == GL_UNSIGNED_INT_10F_11F_11F_REV &&
3340
         !swapBytes;
3341
 
3342
   case MESA_FORMAT_Z32_FLOAT:
3343
      return format == GL_DEPTH_COMPONENT && type == GL_FLOAT && !swapBytes;
3344
 
3345
   case MESA_FORMAT_Z32_FLOAT_X24S8:
3346
      return format == GL_DEPTH_STENCIL &&
3347
             type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV && !swapBytes;
3348
 
3349
   case MESA_FORMAT_XRGB4444_UNORM:
3350
   case MESA_FORMAT_XRGB1555_UNORM:
3351
   case MESA_FORMAT_XBGR8888_SNORM:
3352
   case MESA_FORMAT_XBGR8888_SRGB:
3353
   case MESA_FORMAT_XBGR8888_UINT:
3354
   case MESA_FORMAT_XBGR8888_SINT:
3355
   case MESA_FORMAT_XRGB2101010_UNORM:
3356
   case MESA_FORMAT_XBGR16161616_UNORM:
3357
   case MESA_FORMAT_XBGR16161616_SNORM:
3358
   case MESA_FORMAT_XBGR16161616_FLOAT:
3359
   case MESA_FORMAT_XBGR16161616_UINT:
3360
   case MESA_FORMAT_XBGR16161616_SINT:
3361
   case MESA_FORMAT_XBGR32323232_FLOAT:
3362
   case MESA_FORMAT_XBGR32323232_UINT:
3363
   case MESA_FORMAT_XBGR32323232_SINT:
3364
      return GL_FALSE;
3365
   }
3366
 
3367
   return GL_FALSE;
3368
}
3369