~ubuntu-branches/ubuntu/precise/mesa/precise-updates

« back to all changes in this revision

Viewing changes to src/mesa/state_tracker/st_format.c

  • Committer: Package Import Robot
  • Author(s): Robert Hooker
  • Date: 2012-02-02 12:05:48 UTC
  • mfrom: (1.7.1) (3.3.27 sid)
  • Revision ID: package-import@ubuntu.com-20120202120548-nvkma85jq0h4coix
Tags: 8.0~rc2-0ubuntu4
Drop drisearchdir handling, it is no longer needed with multiarch
and dri-alternates being removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
#include "st_format.h"
48
48
 
49
49
 
50
 
static GLuint
51
 
format_max_bits(enum pipe_format format)
52
 
{
53
 
   GLuint size = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 0);
54
 
 
55
 
   size = MAX2(size, util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 1));
56
 
   size = MAX2(size, util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 2));
57
 
   size = MAX2(size, util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 3));
58
 
   size = MAX2(size, util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 0));
59
 
   size = MAX2(size, util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1));
60
 
   return size;
61
 
}
62
 
 
63
 
 
64
 
/**
65
 
 * Return basic GL datatype for the given gallium format.
66
 
 */
67
 
GLenum
68
 
st_format_datatype(enum pipe_format format)
69
 
{
70
 
   const struct util_format_description *desc;
71
 
   int i;
72
 
 
73
 
   desc = util_format_description(format);
74
 
   assert(desc);
75
 
 
76
 
   /* Find the first non-VOID channel. */
77
 
   for (i = 0; i < 4; i++) {
78
 
       if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
79
 
           break;
80
 
       }
81
 
   }
82
 
 
83
 
   if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
84
 
      if (format == PIPE_FORMAT_B5G5R5A1_UNORM ||
85
 
          format == PIPE_FORMAT_B5G6R5_UNORM) {
86
 
         return GL_UNSIGNED_SHORT;
87
 
      }
88
 
      else if (format == PIPE_FORMAT_R11G11B10_FLOAT ||
89
 
               format == PIPE_FORMAT_R9G9B9E5_FLOAT) {
90
 
         return GL_FLOAT;
91
 
      }
92
 
      else if (format == PIPE_FORMAT_Z24_UNORM_S8_USCALED ||
93
 
               format == PIPE_FORMAT_S8_USCALED_Z24_UNORM ||
94
 
               format == PIPE_FORMAT_Z24X8_UNORM ||
95
 
               format == PIPE_FORMAT_X8Z24_UNORM) {
96
 
         return GL_UNSIGNED_INT_24_8;
97
 
      }
98
 
      else {
99
 
         const GLuint size = format_max_bits(format);
100
 
 
101
 
         assert(i < 4);
102
 
         if (i == 4)
103
 
            return GL_NONE;
104
 
 
105
 
         if (size == 8) {
106
 
            if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
107
 
               return GL_UNSIGNED_BYTE;
108
 
            else
109
 
               return GL_BYTE;
110
 
         }
111
 
         else if (size == 16) {
112
 
            if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT)
113
 
               return GL_HALF_FLOAT;
114
 
            if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
115
 
               return GL_UNSIGNED_SHORT;
116
 
            else
117
 
               return GL_SHORT;
118
 
         }
119
 
         else if (size <= 32) {
120
 
            if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT)
121
 
               return GL_FLOAT;
122
 
            if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
123
 
               return GL_UNSIGNED_INT;
124
 
            else
125
 
               return GL_INT;
126
 
         }
127
 
         else {
128
 
            assert(size == 64);
129
 
            assert(desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT);
130
 
            return GL_DOUBLE;
131
 
         }
132
 
      }
133
 
   }
134
 
   else if (format == PIPE_FORMAT_UYVY) {
135
 
      return GL_UNSIGNED_SHORT;
136
 
   }
137
 
   else if (format == PIPE_FORMAT_YUYV) {
138
 
      return GL_UNSIGNED_SHORT;
139
 
   }
140
 
   else {
141
 
      /* probably a compressed format, unsupported anyway */
142
 
      return GL_NONE;
143
 
   }
144
 
}
145
 
 
146
 
 
147
50
/**
148
51
 * Translate Mesa format to Gallium format.
149
52
 */
159
62
      return PIPE_FORMAT_B8G8R8A8_UNORM;
160
63
   case MESA_FORMAT_ARGB8888_REV:
161
64
      return PIPE_FORMAT_A8R8G8B8_UNORM;
 
65
   case MESA_FORMAT_RGBX8888:
 
66
      return PIPE_FORMAT_X8B8G8R8_UNORM;
 
67
   case MESA_FORMAT_RGBX8888_REV:
 
68
      return PIPE_FORMAT_R8G8B8X8_UNORM;
162
69
   case MESA_FORMAT_XRGB8888:
163
70
      return PIPE_FORMAT_B8G8R8X8_UNORM;
164
71
   case MESA_FORMAT_XRGB8888_REV:
196
103
   case MESA_FORMAT_Z32:
197
104
      return PIPE_FORMAT_Z32_UNORM;
198
105
   case MESA_FORMAT_Z24_S8:
199
 
      return PIPE_FORMAT_S8_USCALED_Z24_UNORM;
 
106
      return PIPE_FORMAT_S8_UINT_Z24_UNORM;
200
107
   case MESA_FORMAT_S8_Z24:
201
 
      return PIPE_FORMAT_Z24_UNORM_S8_USCALED;
 
108
      return PIPE_FORMAT_Z24_UNORM_S8_UINT;
202
109
   case MESA_FORMAT_Z24_X8:
203
110
      return PIPE_FORMAT_X8Z24_UNORM;
204
111
   case MESA_FORMAT_X8_Z24:
205
112
      return PIPE_FORMAT_Z24X8_UNORM;
206
113
   case MESA_FORMAT_S8:
207
 
      return PIPE_FORMAT_S8_USCALED;
 
114
      return PIPE_FORMAT_S8_UINT;
 
115
   case MESA_FORMAT_Z32_FLOAT:
 
116
      return PIPE_FORMAT_Z32_FLOAT;
 
117
   case MESA_FORMAT_Z32_FLOAT_X24S8:
 
118
      return PIPE_FORMAT_Z32_FLOAT_S8X24_UINT;
208
119
   case MESA_FORMAT_YCBCR:
209
120
      return PIPE_FORMAT_UYVY;
210
121
#if FEATURE_texture_s3tc
276
187
      return PIPE_FORMAT_R8_UNORM;
277
188
   case MESA_FORMAT_R16:
278
189
      return PIPE_FORMAT_R16_UNORM;
279
 
   case MESA_FORMAT_RG88:
 
190
   case MESA_FORMAT_GR88:
280
191
      return PIPE_FORMAT_R8G8_UNORM;
281
192
   case MESA_FORMAT_RG1616:
282
193
      return PIPE_FORMAT_R16G16_UNORM;
284
195
      return PIPE_FORMAT_R16G16B16A16_UNORM;
285
196
 
286
197
   /* signed int formats */
 
198
   case MESA_FORMAT_ALPHA_UINT8:
 
199
      return PIPE_FORMAT_A8_UINT;
 
200
   case MESA_FORMAT_ALPHA_UINT16:
 
201
      return PIPE_FORMAT_A16_UINT;
 
202
   case MESA_FORMAT_ALPHA_UINT32:
 
203
      return PIPE_FORMAT_A32_UINT;
 
204
 
 
205
   case MESA_FORMAT_ALPHA_INT8:
 
206
      return PIPE_FORMAT_A8_SINT;
 
207
   case MESA_FORMAT_ALPHA_INT16:
 
208
      return PIPE_FORMAT_A16_SINT;
 
209
   case MESA_FORMAT_ALPHA_INT32:
 
210
      return PIPE_FORMAT_A32_SINT;
 
211
 
 
212
   case MESA_FORMAT_INTENSITY_UINT8:
 
213
      return PIPE_FORMAT_I8_UINT;
 
214
   case MESA_FORMAT_INTENSITY_UINT16:
 
215
      return PIPE_FORMAT_I16_UINT;
 
216
   case MESA_FORMAT_INTENSITY_UINT32:
 
217
      return PIPE_FORMAT_I32_UINT;
 
218
 
 
219
   case MESA_FORMAT_INTENSITY_INT8:
 
220
      return PIPE_FORMAT_I8_SINT;
 
221
   case MESA_FORMAT_INTENSITY_INT16:
 
222
      return PIPE_FORMAT_I16_SINT;
 
223
   case MESA_FORMAT_INTENSITY_INT32:
 
224
      return PIPE_FORMAT_I32_SINT;
 
225
 
 
226
   case MESA_FORMAT_LUMINANCE_UINT8:
 
227
      return PIPE_FORMAT_L8_UINT;
 
228
   case MESA_FORMAT_LUMINANCE_UINT16:
 
229
      return PIPE_FORMAT_L16_UINT;
 
230
   case MESA_FORMAT_LUMINANCE_UINT32:
 
231
      return PIPE_FORMAT_L32_UINT;
 
232
 
 
233
   case MESA_FORMAT_LUMINANCE_INT8:
 
234
      return PIPE_FORMAT_L8_SINT;
 
235
   case MESA_FORMAT_LUMINANCE_INT16:
 
236
      return PIPE_FORMAT_L16_SINT;
 
237
   case MESA_FORMAT_LUMINANCE_INT32:
 
238
      return PIPE_FORMAT_L32_SINT;
 
239
 
 
240
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT8:
 
241
      return PIPE_FORMAT_L8A8_UINT;
 
242
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT16:
 
243
      return PIPE_FORMAT_L16A16_UINT;
 
244
   case MESA_FORMAT_LUMINANCE_ALPHA_UINT32:
 
245
      return PIPE_FORMAT_L32A32_UINT;
 
246
 
 
247
   case MESA_FORMAT_LUMINANCE_ALPHA_INT8:
 
248
      return PIPE_FORMAT_L8A8_SINT;
 
249
   case MESA_FORMAT_LUMINANCE_ALPHA_INT16:
 
250
      return PIPE_FORMAT_L16A16_SINT;
 
251
   case MESA_FORMAT_LUMINANCE_ALPHA_INT32:
 
252
      return PIPE_FORMAT_L32A32_SINT;
 
253
 
 
254
   case MESA_FORMAT_R_INT8:
 
255
      return PIPE_FORMAT_R8_SINT;
 
256
   case MESA_FORMAT_RG_INT8:
 
257
      return PIPE_FORMAT_R8G8_SINT;
 
258
   case MESA_FORMAT_RGB_INT8:
 
259
      return PIPE_FORMAT_R8G8B8_SINT;
287
260
   case MESA_FORMAT_RGBA_INT8:
288
 
      return PIPE_FORMAT_R8G8B8A8_SSCALED;
 
261
      return PIPE_FORMAT_R8G8B8A8_SINT;
 
262
   case MESA_FORMAT_R_INT16:
 
263
      return PIPE_FORMAT_R16_SINT;
 
264
   case MESA_FORMAT_RG_INT16:
 
265
      return PIPE_FORMAT_R16G16_SINT;
 
266
   case MESA_FORMAT_RGB_INT16:
 
267
      return PIPE_FORMAT_R16G16B16_SINT;
289
268
   case MESA_FORMAT_RGBA_INT16:
290
 
      return PIPE_FORMAT_R16G16B16A16_SSCALED;
 
269
      return PIPE_FORMAT_R16G16B16A16_SINT;
 
270
   case MESA_FORMAT_R_INT32:
 
271
      return PIPE_FORMAT_R32_SINT;
 
272
   case MESA_FORMAT_RG_INT32:
 
273
      return PIPE_FORMAT_R32G32_SINT;
 
274
   case MESA_FORMAT_RGB_INT32:
 
275
      return PIPE_FORMAT_R32G32B32_SINT;
291
276
   case MESA_FORMAT_RGBA_INT32:
292
 
      return PIPE_FORMAT_R32G32B32A32_SSCALED;
 
277
      return PIPE_FORMAT_R32G32B32A32_SINT;
293
278
 
294
279
   /* unsigned int formats */
 
280
   case MESA_FORMAT_R_UINT8:
 
281
      return PIPE_FORMAT_R8_UINT;
 
282
   case MESA_FORMAT_RG_UINT8:
 
283
      return PIPE_FORMAT_R8G8_UINT;
 
284
   case MESA_FORMAT_RGB_UINT8:
 
285
      return PIPE_FORMAT_R8G8B8_UINT;
295
286
   case MESA_FORMAT_RGBA_UINT8:
296
 
      return PIPE_FORMAT_R8G8B8A8_USCALED;
 
287
      return PIPE_FORMAT_R8G8B8A8_UINT;
 
288
   case MESA_FORMAT_R_UINT16:
 
289
      return PIPE_FORMAT_R16_UINT;
 
290
   case MESA_FORMAT_RG_UINT16:
 
291
      return PIPE_FORMAT_R16G16_UINT;
 
292
   case MESA_FORMAT_RGB_UINT16:
 
293
      return PIPE_FORMAT_R16G16B16_UINT;
297
294
   case MESA_FORMAT_RGBA_UINT16:
298
 
      return PIPE_FORMAT_R16G16B16A16_USCALED;
 
295
      return PIPE_FORMAT_R16G16B16A16_UINT;
 
296
   case MESA_FORMAT_R_UINT32:
 
297
      return PIPE_FORMAT_R32_UINT;
 
298
   case MESA_FORMAT_RG_UINT32:
 
299
      return PIPE_FORMAT_R32G32_UINT;
 
300
   case MESA_FORMAT_RGB_UINT32:
 
301
      return PIPE_FORMAT_R32G32B32_UINT;
299
302
   case MESA_FORMAT_RGBA_UINT32:
300
 
      return PIPE_FORMAT_R32G32B32A32_USCALED;
 
303
      return PIPE_FORMAT_R32G32B32A32_UINT;
301
304
 
302
305
   case MESA_FORMAT_RED_RGTC1:
303
306
      return PIPE_FORMAT_RGTC1_UNORM;
317
320
   case MESA_FORMAT_SIGNED_LA_LATC2:
318
321
      return PIPE_FORMAT_LATC2_SNORM;
319
322
 
 
323
   case MESA_FORMAT_ETC1_RGB8:
 
324
      return PIPE_FORMAT_ETC1_RGB8;
 
325
 
320
326
   /* signed normalized formats */
321
327
   case MESA_FORMAT_SIGNED_R8:
322
328
      return PIPE_FORMAT_R8_SNORM;
354
360
      return PIPE_FORMAT_R9G9B9E5_FLOAT;
355
361
   case MESA_FORMAT_R11_G11_B10_FLOAT:
356
362
      return PIPE_FORMAT_R11G11B10_FLOAT;
357
 
 
 
363
   case MESA_FORMAT_ARGB2101010_UINT:
 
364
      return PIPE_FORMAT_B10G10R10A2_UINT;
358
365
   default:
359
366
      assert(0);
360
367
      return PIPE_FORMAT_NONE;
377
384
      return MESA_FORMAT_ARGB8888;
378
385
   case PIPE_FORMAT_A8R8G8B8_UNORM:
379
386
      return MESA_FORMAT_ARGB8888_REV;
 
387
   case PIPE_FORMAT_X8B8G8R8_UNORM:
 
388
      return MESA_FORMAT_RGBX8888;
 
389
   case PIPE_FORMAT_R8G8B8X8_UNORM:
 
390
      return MESA_FORMAT_RGBX8888_REV;
380
391
   case PIPE_FORMAT_B8G8R8X8_UNORM:
381
392
      return MESA_FORMAT_XRGB8888;
382
393
   case PIPE_FORMAT_X8R8G8B8_UNORM:
409
420
      return MESA_FORMAT_I8;
410
421
   case PIPE_FORMAT_I16_UNORM:
411
422
      return MESA_FORMAT_I16;
412
 
   case PIPE_FORMAT_S8_USCALED:
 
423
   case PIPE_FORMAT_S8_UINT:
413
424
      return MESA_FORMAT_S8;
414
425
 
415
426
   case PIPE_FORMAT_R16G16B16A16_UNORM:
419
430
      return MESA_FORMAT_Z16;
420
431
   case PIPE_FORMAT_Z32_UNORM:
421
432
      return MESA_FORMAT_Z32;
422
 
   case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
 
433
   case PIPE_FORMAT_S8_UINT_Z24_UNORM:
423
434
      return MESA_FORMAT_Z24_S8;
424
435
   case PIPE_FORMAT_X8Z24_UNORM:
425
436
      return MESA_FORMAT_Z24_X8;
426
437
   case PIPE_FORMAT_Z24X8_UNORM:
427
438
      return MESA_FORMAT_X8_Z24;
428
 
   case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
 
439
   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
429
440
      return MESA_FORMAT_S8_Z24;
 
441
   case PIPE_FORMAT_Z32_FLOAT:
 
442
      return MESA_FORMAT_Z32_FLOAT;
 
443
   case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
 
444
      return MESA_FORMAT_Z32_FLOAT_X24S8;
430
445
 
431
446
   case PIPE_FORMAT_UYVY:
432
447
      return MESA_FORMAT_YCBCR;
504
519
   case PIPE_FORMAT_R16_UNORM:
505
520
      return MESA_FORMAT_R16;
506
521
   case PIPE_FORMAT_R8G8_UNORM:
507
 
      return MESA_FORMAT_RG88;
 
522
      return MESA_FORMAT_GR88;
508
523
   case PIPE_FORMAT_R16G16_UNORM:
509
524
      return MESA_FORMAT_RG1616;
510
525
 
511
 
   /* signed int formats */
512
 
   case PIPE_FORMAT_R8G8B8A8_SSCALED:
 
526
   case PIPE_FORMAT_A8_UINT:
 
527
      return MESA_FORMAT_ALPHA_UINT8;
 
528
   case PIPE_FORMAT_A16_UINT:
 
529
      return MESA_FORMAT_ALPHA_UINT16;
 
530
   case PIPE_FORMAT_A32_UINT:
 
531
      return MESA_FORMAT_ALPHA_UINT32;
 
532
   case PIPE_FORMAT_A8_SINT:
 
533
      return MESA_FORMAT_ALPHA_INT8;
 
534
   case PIPE_FORMAT_A16_SINT:
 
535
      return MESA_FORMAT_ALPHA_INT16;
 
536
   case PIPE_FORMAT_A32_SINT:
 
537
      return MESA_FORMAT_ALPHA_INT32;
 
538
 
 
539
   case PIPE_FORMAT_I8_UINT:
 
540
      return MESA_FORMAT_INTENSITY_UINT8;
 
541
   case PIPE_FORMAT_I16_UINT:
 
542
      return MESA_FORMAT_INTENSITY_UINT16;
 
543
   case PIPE_FORMAT_I32_UINT:
 
544
      return MESA_FORMAT_INTENSITY_UINT32;
 
545
   case PIPE_FORMAT_I8_SINT:
 
546
      return MESA_FORMAT_INTENSITY_INT8;
 
547
   case PIPE_FORMAT_I16_SINT:
 
548
      return MESA_FORMAT_INTENSITY_INT16;
 
549
   case PIPE_FORMAT_I32_SINT:
 
550
      return MESA_FORMAT_INTENSITY_INT32;
 
551
 
 
552
  case PIPE_FORMAT_L8_UINT:
 
553
      return MESA_FORMAT_LUMINANCE_UINT8;
 
554
   case PIPE_FORMAT_L16_UINT:
 
555
      return MESA_FORMAT_LUMINANCE_UINT16;
 
556
   case PIPE_FORMAT_L32_UINT:
 
557
      return MESA_FORMAT_LUMINANCE_UINT32;
 
558
   case PIPE_FORMAT_L8_SINT:
 
559
      return MESA_FORMAT_LUMINANCE_INT8;
 
560
   case PIPE_FORMAT_L16_SINT:
 
561
      return MESA_FORMAT_LUMINANCE_INT16;
 
562
   case PIPE_FORMAT_L32_SINT:
 
563
      return MESA_FORMAT_LUMINANCE_INT32;
 
564
 
 
565
   case PIPE_FORMAT_L8A8_UINT:
 
566
      return MESA_FORMAT_LUMINANCE_ALPHA_UINT8;
 
567
   case PIPE_FORMAT_L16A16_UINT:
 
568
      return MESA_FORMAT_LUMINANCE_ALPHA_UINT16;
 
569
   case PIPE_FORMAT_L32A32_UINT:
 
570
      return MESA_FORMAT_LUMINANCE_ALPHA_UINT32;
 
571
   case PIPE_FORMAT_L8A8_SINT:
 
572
      return MESA_FORMAT_LUMINANCE_ALPHA_INT8;
 
573
   case PIPE_FORMAT_L16A16_SINT:
 
574
      return MESA_FORMAT_LUMINANCE_ALPHA_INT16;
 
575
   case PIPE_FORMAT_L32A32_SINT:
 
576
      return MESA_FORMAT_LUMINANCE_ALPHA_INT32;
 
577
 
 
578
   case PIPE_FORMAT_R8_SINT:
 
579
      return MESA_FORMAT_R_INT8;
 
580
   case PIPE_FORMAT_R8G8_SINT:
 
581
      return MESA_FORMAT_RG_INT8;
 
582
   case PIPE_FORMAT_R8G8B8_SINT:
 
583
      return MESA_FORMAT_RGB_INT8;
 
584
   case PIPE_FORMAT_R8G8B8A8_SINT:
513
585
      return MESA_FORMAT_RGBA_INT8;
514
 
   case PIPE_FORMAT_R16G16B16A16_SSCALED:
 
586
 
 
587
   case PIPE_FORMAT_R16_SINT:
 
588
      return MESA_FORMAT_R_INT16;
 
589
   case PIPE_FORMAT_R16G16_SINT:
 
590
      return MESA_FORMAT_RG_INT16;
 
591
   case PIPE_FORMAT_R16G16B16_SINT:
 
592
      return MESA_FORMAT_RGB_INT16;
 
593
   case PIPE_FORMAT_R16G16B16A16_SINT:
515
594
      return MESA_FORMAT_RGBA_INT16;
516
 
   case PIPE_FORMAT_R32G32B32A32_SSCALED:
 
595
 
 
596
   case PIPE_FORMAT_R32_SINT:
 
597
      return MESA_FORMAT_R_INT32;
 
598
   case PIPE_FORMAT_R32G32_SINT:
 
599
      return MESA_FORMAT_RG_INT32;
 
600
   case PIPE_FORMAT_R32G32B32_SINT:
 
601
      return MESA_FORMAT_RGB_INT32;
 
602
   case PIPE_FORMAT_R32G32B32A32_SINT:
517
603
      return MESA_FORMAT_RGBA_INT32;
518
604
 
519
605
   /* unsigned int formats */
520
 
   case PIPE_FORMAT_R8G8B8A8_USCALED:
 
606
   case PIPE_FORMAT_R8_UINT:
 
607
      return MESA_FORMAT_R_UINT8;
 
608
   case PIPE_FORMAT_R8G8_UINT:
 
609
      return MESA_FORMAT_RG_UINT8;
 
610
   case PIPE_FORMAT_R8G8B8_UINT:
 
611
      return MESA_FORMAT_RGB_UINT8;
 
612
   case PIPE_FORMAT_R8G8B8A8_UINT:
521
613
      return MESA_FORMAT_RGBA_UINT8;
522
 
   case PIPE_FORMAT_R16G16B16A16_USCALED:
 
614
 
 
615
   case PIPE_FORMAT_R16_UINT:
 
616
      return MESA_FORMAT_R_UINT16;
 
617
   case PIPE_FORMAT_R16G16_UINT:
 
618
      return MESA_FORMAT_RG_UINT16;
 
619
   case PIPE_FORMAT_R16G16B16_UINT:
 
620
      return MESA_FORMAT_RGB_UINT16;
 
621
   case PIPE_FORMAT_R16G16B16A16_UINT:
523
622
      return MESA_FORMAT_RGBA_UINT16;
524
 
   case PIPE_FORMAT_R32G32B32A32_USCALED:
 
623
 
 
624
   case PIPE_FORMAT_R32_UINT:
 
625
      return MESA_FORMAT_R_UINT32;
 
626
   case PIPE_FORMAT_R32G32_UINT:
 
627
      return MESA_FORMAT_RG_UINT32;
 
628
   case PIPE_FORMAT_R32G32B32_UINT:
 
629
      return MESA_FORMAT_RGB_UINT32;
 
630
   case PIPE_FORMAT_R32G32B32A32_UINT:
525
631
      return MESA_FORMAT_RGBA_UINT32;
526
632
 
527
633
   case PIPE_FORMAT_RGTC1_UNORM:
542
648
   case PIPE_FORMAT_LATC2_SNORM:
543
649
      return MESA_FORMAT_SIGNED_LA_LATC2;
544
650
 
 
651
   case PIPE_FORMAT_ETC1_RGB8:
 
652
      return MESA_FORMAT_ETC1_RGB8;
 
653
 
545
654
   /* signed normalized formats */
546
655
   case PIPE_FORMAT_R8_SNORM:
547
656
      return MESA_FORMAT_SIGNED_R8;
580
689
   case PIPE_FORMAT_R11G11B10_FLOAT:
581
690
      return MESA_FORMAT_R11_G11_B10_FLOAT;
582
691
 
 
692
   case PIPE_FORMAT_B10G10R10A2_UINT:
 
693
      return MESA_FORMAT_ARGB2101010_UINT;
583
694
   default:
584
695
      assert(0);
585
696
      return MESA_FORMAT_NONE;
624
735
      PIPE_FORMAT_Z24X8_UNORM, \
625
736
      PIPE_FORMAT_X8Z24_UNORM, \
626
737
      PIPE_FORMAT_Z16_UNORM, \
627
 
      PIPE_FORMAT_Z24_UNORM_S8_USCALED, \
628
 
      PIPE_FORMAT_S8_USCALED_Z24_UNORM, \
 
738
      PIPE_FORMAT_Z24_UNORM_S8_UINT, \
 
739
      PIPE_FORMAT_S8_UINT_Z24_UNORM, \
629
740
      0
630
741
 
631
742
/**
784
895
      { GL_DEPTH_COMPONENT, 0 },
785
896
      { DEFAULT_DEPTH_FORMATS }
786
897
   },
 
898
   {
 
899
      { GL_DEPTH_COMPONENT32F, 0 },
 
900
      { PIPE_FORMAT_Z32_FLOAT, 0 }
 
901
   },
787
902
 
788
903
   /* stencil formats */
789
904
   {
790
905
      { GL_STENCIL_INDEX, GL_STENCIL_INDEX1_EXT, GL_STENCIL_INDEX4_EXT,
791
906
        GL_STENCIL_INDEX8_EXT, GL_STENCIL_INDEX16_EXT, 0 },
792
907
      {
793
 
         PIPE_FORMAT_S8_USCALED, PIPE_FORMAT_Z24_UNORM_S8_USCALED,
794
 
         PIPE_FORMAT_S8_USCALED_Z24_UNORM, 0
 
908
         PIPE_FORMAT_S8_UINT, PIPE_FORMAT_Z24_UNORM_S8_UINT,
 
909
         PIPE_FORMAT_S8_UINT_Z24_UNORM, 0
795
910
      }
796
911
   },
797
912
 
798
913
   /* Depth / Stencil formats */
799
914
   {
800
915
      { GL_DEPTH_STENCIL_EXT, GL_DEPTH24_STENCIL8_EXT, 0 },
801
 
      { PIPE_FORMAT_Z24_UNORM_S8_USCALED, PIPE_FORMAT_S8_USCALED_Z24_UNORM, 0 }
 
916
      { PIPE_FORMAT_Z24_UNORM_S8_UINT, PIPE_FORMAT_S8_UINT_Z24_UNORM, 0 }
 
917
   },
 
918
   {
 
919
      { GL_DEPTH32F_STENCIL8, 0 },
 
920
      { PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, 0 }
802
921
   },
803
922
 
804
923
   /* sRGB formats */
976
1095
      { PIPE_FORMAT_LATC2_SNORM, 0 }
977
1096
   },
978
1097
 
 
1098
   /* ETC1 */
 
1099
   {
 
1100
      { GL_ETC1_RGB8_OES, 0 },
 
1101
      { PIPE_FORMAT_ETC1_RGB8, 0 }
 
1102
   },
 
1103
 
979
1104
   /* signed/unsigned integer formats.
980
 
    * XXX Mesa only has formats for RGBA signed/unsigned integer formats.
981
 
    * If/when new formats are added this code should be updated.
982
1105
    */
983
1106
   {
984
1107
      { GL_RED_INTEGER_EXT,
985
1108
        GL_GREEN_INTEGER_EXT,
986
1109
        GL_BLUE_INTEGER_EXT,
987
 
        GL_ALPHA_INTEGER_EXT,
988
 
        GL_RGB_INTEGER_EXT,
989
1110
        GL_RGBA_INTEGER_EXT,
 
1111
        GL_BGRA_INTEGER_EXT,
 
1112
        GL_RGBA8I_EXT, 0 },
 
1113
      { PIPE_FORMAT_R8G8B8A8_SINT, 0 }
 
1114
   },
 
1115
   {
 
1116
      { GL_RGB_INTEGER_EXT, 
990
1117
        GL_BGR_INTEGER_EXT,
991
 
        GL_BGRA_INTEGER_EXT,
992
 
        GL_LUMINANCE_INTEGER_EXT,
993
 
        GL_LUMINANCE_ALPHA_INTEGER_EXT,
994
 
        GL_RGBA8I_EXT,
995
 
        GL_RGB8I_EXT,
996
 
        GL_ALPHA8I_EXT,
997
 
        GL_INTENSITY8I_EXT,
998
 
        GL_LUMINANCE8I_EXT,
 
1118
        GL_RGB8I_EXT, 0 },
 
1119
      { PIPE_FORMAT_R8G8B8_SINT,
 
1120
        PIPE_FORMAT_R8G8B8A8_SINT, 0 }
 
1121
   },
 
1122
   {
 
1123
      { GL_ALPHA_INTEGER_EXT,
 
1124
        GL_ALPHA8I_EXT, 0 },
 
1125
      { PIPE_FORMAT_A8_SINT, 0 }
 
1126
   },
 
1127
   {
 
1128
      { GL_ALPHA16I_EXT, 0 },
 
1129
      { PIPE_FORMAT_A16_SINT, 0 }
 
1130
   },
 
1131
   {
 
1132
      { GL_ALPHA32I_EXT, 0 },
 
1133
      { PIPE_FORMAT_A32_SINT, 0 }
 
1134
   },
 
1135
   {
 
1136
      { GL_ALPHA8UI_EXT, 0 },
 
1137
      { PIPE_FORMAT_A8_UINT, 0 }
 
1138
   },
 
1139
   {
 
1140
      { GL_ALPHA16UI_EXT, 0 },
 
1141
      { PIPE_FORMAT_A16_UINT, 0 }
 
1142
   },
 
1143
   {
 
1144
      { GL_ALPHA32UI_EXT, 0 },
 
1145
      { PIPE_FORMAT_A32_UINT, 0 }
 
1146
   },
 
1147
   {
 
1148
      { GL_INTENSITY8I_EXT, 0 },
 
1149
      { PIPE_FORMAT_I8_SINT, 0 }
 
1150
   },
 
1151
   {
 
1152
      { GL_INTENSITY16I_EXT, 0 },
 
1153
      { PIPE_FORMAT_I16_SINT, 0 }
 
1154
   },
 
1155
   {
 
1156
      { GL_INTENSITY32I_EXT, 0 },
 
1157
      { PIPE_FORMAT_I32_SINT, 0 }
 
1158
   },
 
1159
   {
 
1160
      { GL_INTENSITY8UI_EXT, 0 },
 
1161
      { PIPE_FORMAT_I8_UINT, 0 }
 
1162
   },
 
1163
   {
 
1164
      { GL_INTENSITY16UI_EXT, 0 },
 
1165
      { PIPE_FORMAT_I16_UINT, 0 }
 
1166
   },
 
1167
   {
 
1168
      { GL_INTENSITY32UI_EXT, 0 },
 
1169
      { PIPE_FORMAT_I32_UINT, 0 }
 
1170
   },
 
1171
   {
 
1172
      { GL_LUMINANCE8I_EXT, 0 },
 
1173
      { PIPE_FORMAT_L8_SINT, 0 }
 
1174
   },
 
1175
   {
 
1176
      { GL_LUMINANCE16I_EXT, 0 },
 
1177
      { PIPE_FORMAT_L16_SINT, 0 }
 
1178
   },
 
1179
   {
 
1180
      { GL_LUMINANCE32I_EXT, 0 },
 
1181
      { PIPE_FORMAT_L32_SINT, 0 }
 
1182
   },
 
1183
   {
 
1184
      { GL_LUMINANCE_INTEGER_EXT,
 
1185
        GL_LUMINANCE8UI_EXT, 0 },
 
1186
      { PIPE_FORMAT_L8_UINT, 0 }
 
1187
   },
 
1188
   {
 
1189
      { GL_LUMINANCE16UI_EXT, 0 },
 
1190
      { PIPE_FORMAT_L16_UINT, 0 }
 
1191
   },
 
1192
   {
 
1193
      { GL_LUMINANCE32UI_EXT, 0 },
 
1194
      { PIPE_FORMAT_L32_UINT, 0 }
 
1195
   },
 
1196
   {
 
1197
      { GL_LUMINANCE_ALPHA_INTEGER_EXT,
999
1198
        GL_LUMINANCE_ALPHA8I_EXT, 0 },
1000
 
      { PIPE_FORMAT_R8G8B8A8_SSCALED, 0 }
1001
 
   },
1002
 
   {
1003
 
      {
1004
 
         GL_RGBA16I_EXT,
1005
 
         GL_RGB16I_EXT,
1006
 
         GL_ALPHA16I_EXT,
1007
 
         GL_INTENSITY16I_EXT,
1008
 
         GL_LUMINANCE16I_EXT,
1009
 
         GL_LUMINANCE_ALPHA16I_EXT, 0 },
1010
 
      { PIPE_FORMAT_R16G16B16A16_SSCALED, 0 },
1011
 
   },
1012
 
   {
1013
 
      {
1014
 
         GL_RGBA32I_EXT,
1015
 
         GL_RGB32I_EXT,
1016
 
         GL_ALPHA32I_EXT,
1017
 
         GL_INTENSITY32I_EXT,
1018
 
         GL_LUMINANCE32I_EXT,
1019
 
         GL_LUMINANCE_ALPHA32I_EXT, 0 },
1020
 
      { PIPE_FORMAT_R32G32B32A32_SSCALED, 0 }
1021
 
   },
1022
 
   {
1023
 
      {
1024
 
         GL_RGBA8UI_EXT,
1025
 
         GL_RGB8UI_EXT,
1026
 
         GL_ALPHA8UI_EXT,
1027
 
         GL_INTENSITY8UI_EXT,
1028
 
         GL_LUMINANCE8UI_EXT,
1029
 
         GL_LUMINANCE_ALPHA8UI_EXT, 0 },
1030
 
      { PIPE_FORMAT_R8G8B8A8_USCALED, 0 }
1031
 
   },
1032
 
   {
1033
 
      {
1034
 
         GL_RGBA16UI_EXT,
1035
 
         GL_RGB16UI_EXT,
1036
 
         GL_ALPHA16UI_EXT,
1037
 
         GL_INTENSITY16UI_EXT,
1038
 
         GL_LUMINANCE16UI_EXT,
1039
 
         GL_LUMINANCE_ALPHA16UI_EXT, 0 },
1040
 
      { PIPE_FORMAT_R16G16B16A16_USCALED, 0 }
1041
 
   },
1042
 
   {
1043
 
      {
1044
 
         GL_RGBA32UI_EXT,
1045
 
         GL_RGB32UI_EXT,
1046
 
         GL_ALPHA32UI_EXT,
1047
 
         GL_INTENSITY32UI_EXT,
1048
 
         GL_LUMINANCE32UI_EXT,
1049
 
         GL_LUMINANCE_ALPHA32UI_EXT, 0 },
1050
 
      { PIPE_FORMAT_R32G32B32A32_USCALED, 0 }
1051
 
   },
1052
 
 
 
1199
      { PIPE_FORMAT_L8A8_SINT, 0 }
 
1200
   },
 
1201
   {
 
1202
      { GL_LUMINANCE_ALPHA16I_EXT, 0 },
 
1203
      { PIPE_FORMAT_L16A16_SINT, 0 }
 
1204
   },
 
1205
   {
 
1206
      { GL_LUMINANCE_ALPHA32I_EXT, 0 },
 
1207
      { PIPE_FORMAT_L32A32_SINT, 0 }
 
1208
   },
 
1209
   {
 
1210
      { GL_LUMINANCE_ALPHA8UI_EXT, 0 },
 
1211
      { PIPE_FORMAT_L8A8_UINT, 0 }
 
1212
   },
 
1213
   {
 
1214
      { GL_LUMINANCE_ALPHA16UI_EXT, 0 },
 
1215
      { PIPE_FORMAT_L16A16_UINT, 0 }
 
1216
   },
 
1217
   {
 
1218
      { GL_LUMINANCE_ALPHA32UI_EXT, 0 },
 
1219
      { PIPE_FORMAT_L32A32_UINT, 0 }
 
1220
   },
 
1221
   {
 
1222
      { GL_RGB16I_EXT, 0 },
 
1223
      { PIPE_FORMAT_R16G16B16_SINT,
 
1224
        PIPE_FORMAT_R16G16B16A16_SINT, 0 },
 
1225
   },
 
1226
   {
 
1227
      { GL_RGBA16I_EXT, 0 },
 
1228
      { PIPE_FORMAT_R16G16B16A16_SINT, 0 },
 
1229
   },
 
1230
   {
 
1231
      { GL_RGB32I_EXT, 0 },
 
1232
      { PIPE_FORMAT_R32G32B32_SINT,
 
1233
        PIPE_FORMAT_R32G32B32A32_SINT, 0 },
 
1234
   },
 
1235
   {
 
1236
      { GL_RGBA32I_EXT, 0 },
 
1237
      { PIPE_FORMAT_R32G32B32A32_SINT, 0 }
 
1238
   },
 
1239
   {
 
1240
      { GL_RGBA8UI_EXT, 0 },
 
1241
      { PIPE_FORMAT_R8G8B8A8_UINT, 0 }
 
1242
   },
 
1243
   {
 
1244
      { GL_RGB8UI_EXT, 0 },
 
1245
      { PIPE_FORMAT_R8G8B8_UINT,
 
1246
        PIPE_FORMAT_R8G8B8A8_UINT, 0 }
 
1247
   },
 
1248
   {
 
1249
      { GL_RGB16UI_EXT, 0 },
 
1250
      { PIPE_FORMAT_R16G16B16_UINT,
 
1251
        PIPE_FORMAT_R16G16B16A16_UINT, 0 }
 
1252
   },
 
1253
   {
 
1254
      { GL_RGBA16UI_EXT, 0 },
 
1255
      { PIPE_FORMAT_R16G16B16A16_UINT, 0 }
 
1256
   },
 
1257
   {
 
1258
      { GL_RGB32UI_EXT, 0},
 
1259
      { PIPE_FORMAT_R32G32B32_UINT,
 
1260
        PIPE_FORMAT_R32G32B32A32_UINT, 0 }
 
1261
   },
 
1262
   {
 
1263
      { GL_RGBA32UI_EXT, 0},
 
1264
      { PIPE_FORMAT_R32G32B32A32_UINT, 0 }
 
1265
   },
 
1266
   {
 
1267
     { GL_R8I, 0},
 
1268
     { PIPE_FORMAT_R8_SINT, 0},
 
1269
   },
 
1270
   {
 
1271
     { GL_R16I, 0},
 
1272
     { PIPE_FORMAT_R16_SINT, 0},
 
1273
   },
 
1274
   {
 
1275
     { GL_R32I, 0},
 
1276
     { PIPE_FORMAT_R32_SINT, 0},
 
1277
   },
 
1278
  {
 
1279
     { GL_R8UI, 0},
 
1280
     { PIPE_FORMAT_R8_UINT, 0},
 
1281
   },
 
1282
   {
 
1283
     { GL_R16UI, 0},
 
1284
     { PIPE_FORMAT_R16_UINT, 0},
 
1285
   },
 
1286
   {
 
1287
     { GL_R32UI, 0},
 
1288
     { PIPE_FORMAT_R32_UINT, 0},
 
1289
   },
 
1290
   {
 
1291
     { GL_RG8I, 0},
 
1292
     { PIPE_FORMAT_R8G8_SINT, 0},
 
1293
   },
 
1294
   {
 
1295
     { GL_RG16I, 0},
 
1296
     { PIPE_FORMAT_R16G16_SINT, 0},
 
1297
   },
 
1298
   {
 
1299
     { GL_RG32I, 0},
 
1300
     { PIPE_FORMAT_R32G32_SINT, 0},
 
1301
   },
 
1302
  {
 
1303
     { GL_RG8UI, 0},
 
1304
     { PIPE_FORMAT_R8G8_UINT, 0},
 
1305
   },
 
1306
   {
 
1307
     { GL_RG16UI, 0},
 
1308
     { PIPE_FORMAT_R16G16_UINT, 0},
 
1309
   },
 
1310
   {
 
1311
     { GL_RG32UI, 0},
 
1312
     { PIPE_FORMAT_R32G32_UINT, 0},
 
1313
   },
1053
1314
   /* signed normalized formats */
1054
1315
   {
1055
1316
      { GL_RED_SNORM, GL_R8_SNORM, 0 },
1125
1386
   {
1126
1387
      { GL_R11F_G11F_B10F, 0 },
1127
1388
      { PIPE_FORMAT_R11G11B10_FLOAT, 0 }
1128
 
   }
 
1389
   },
 
1390
   {
 
1391
      { GL_RGB10_A2UI, 0 },
 
1392
      { PIPE_FORMAT_B10G10R10A2_UINT, 0 }
 
1393
   },
1129
1394
};
1130
1395
 
1131
1396
 
1422
1687
 * This is used for translating texture border color and the clear
1423
1688
 * color.  For example, the clear color is interpreted according to
1424
1689
 * the renderbuffer's base format.  For example, if clearing a
1425
 
 * GL_LUMINANCE buffer, ClearColor[0] = luminance and ClearColor[1] =
1426
 
 * alpha.  Similarly for texture border colors.
 
1690
 * GL_LUMINANCE buffer, we'll return colorOut[0] = colorOut[1] =
 
1691
 * colorOut[2] = colorIn[0].
 
1692
 * Similarly for texture border colors.
1427
1693
 */
1428
1694
void
1429
1695
st_translate_color(const GLfloat colorIn[4], GLenum baseFormat,