• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_format_map.py using data from format_map_data.json.
3 // ES3 format info from es3_format_type_combinations.json.
4 //
5 // Copyright 2016 The ANGLE Project Authors. All rights reserved.
6 // Use of this source code is governed by a BSD-style license that can be
7 // found in the LICENSE file.
8 //
9 // format_map:
10 //   Determining the sized internal format from a (format,type) pair.
11 //   Also check es3 format combinations for validity.
12 
13 #include "angle_gl.h"
14 #include "common/debug.h"
15 
16 namespace gl
17 {
18 
GetSizedFormatInternal(GLenum format,GLenum type)19 GLenum GetSizedFormatInternal(GLenum format, GLenum type)
20 {
21     switch (format)
22     {
23         case GL_ALPHA:
24             switch (type)
25             {
26                 case GL_FLOAT:
27                     return GL_ALPHA32F_EXT;
28                 case GL_HALF_FLOAT:
29                     return GL_ALPHA16F_EXT;
30                 case GL_HALF_FLOAT_OES:
31                     return GL_ALPHA16F_EXT;
32                 case GL_UNSIGNED_BYTE:
33                     return GL_ALPHA8_EXT;
34                 default:
35                     break;
36             }
37             break;
38 
39         case GL_BGRA_EXT:
40             switch (type)
41             {
42                 case GL_UNSIGNED_BYTE:
43                     return GL_BGRA8_EXT;
44                 case GL_UNSIGNED_INT_2_10_10_10_REV:
45                     return GL_BGR10_A2_ANGLEX;
46                 case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
47                     return GL_BGR5_A1_ANGLEX;
48                 case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
49                     return GL_BGRA4_ANGLEX;
50                 case GL_UNSIGNED_SHORT_5_6_5:
51                     return GL_BGR565_ANGLEX;
52                 default:
53                     break;
54             }
55             break;
56 
57         case GL_COMPRESSED_RED_GREEN_RGTC2_EXT:
58             switch (type)
59             {
60                 case GL_UNSIGNED_BYTE:
61                     return GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
62                 default:
63                     break;
64             }
65             break;
66 
67         case GL_COMPRESSED_RED_RGTC1_EXT:
68             switch (type)
69             {
70                 case GL_UNSIGNED_BYTE:
71                     return GL_COMPRESSED_RED_RGTC1_EXT;
72                 default:
73                     break;
74             }
75             break;
76 
77         case GL_COMPRESSED_RGBA_BPTC_UNORM_EXT:
78             switch (type)
79             {
80                 case GL_UNSIGNED_BYTE:
81                     return GL_COMPRESSED_RGBA_BPTC_UNORM_EXT;
82                 default:
83                     break;
84             }
85             break;
86 
87         case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
88             switch (type)
89             {
90                 case GL_UNSIGNED_BYTE:
91                     return GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
92                 default:
93                     break;
94             }
95             break;
96 
97         case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
98             switch (type)
99             {
100                 case GL_UNSIGNED_BYTE:
101                     return GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
102                 default:
103                     break;
104             }
105             break;
106 
107         case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
108             switch (type)
109             {
110                 case GL_UNSIGNED_BYTE:
111                     return GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
112                 default:
113                     break;
114             }
115             break;
116 
117         case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
118             switch (type)
119             {
120                 case GL_UNSIGNED_BYTE:
121                     return GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE;
122                 default:
123                     break;
124             }
125             break;
126 
127         case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
128             switch (type)
129             {
130                 case GL_UNSIGNED_BYTE:
131                     return GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE;
132                 default:
133                     break;
134             }
135             break;
136 
137         case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT:
138             switch (type)
139             {
140                 case GL_UNSIGNED_BYTE:
141                     return GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;
142                 default:
143                     break;
144             }
145             break;
146 
147         case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT:
148             switch (type)
149             {
150                 case GL_UNSIGNED_BYTE:
151                     return GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;
152                 default:
153                     break;
154             }
155             break;
156 
157         case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
158             switch (type)
159             {
160                 case GL_UNSIGNED_BYTE:
161                     return GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
162                 default:
163                     break;
164             }
165             break;
166 
167         case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
168             switch (type)
169             {
170                 case GL_UNSIGNED_BYTE:
171                     return GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
172                 default:
173                     break;
174             }
175             break;
176 
177         case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
178             switch (type)
179             {
180                 case GL_UNSIGNED_BYTE:
181                     return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
182                 default:
183                     break;
184             }
185             break;
186 
187         case GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:
188             switch (type)
189             {
190                 case GL_UNSIGNED_BYTE:
191                     return GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
192                 default:
193                     break;
194             }
195             break;
196 
197         case GL_COMPRESSED_SIGNED_RED_RGTC1_EXT:
198             switch (type)
199             {
200                 case GL_UNSIGNED_BYTE:
201                     return GL_COMPRESSED_SIGNED_RED_RGTC1_EXT;
202                 default:
203                     break;
204             }
205             break;
206 
207         case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:
208             switch (type)
209             {
210                 case GL_UNSIGNED_BYTE:
211                     return GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT;
212                 default:
213                     break;
214             }
215             break;
216 
217         case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
218             switch (type)
219             {
220                 case GL_UNSIGNED_BYTE:
221                     return GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT;
222                 default:
223                     break;
224             }
225             break;
226 
227         case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
228             switch (type)
229             {
230                 case GL_UNSIGNED_BYTE:
231                     return GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT;
232                 default:
233                     break;
234             }
235             break;
236 
237         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
238             switch (type)
239             {
240                 case GL_UNSIGNED_BYTE:
241                     return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
242                 default:
243                     break;
244             }
245             break;
246 
247         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
248             switch (type)
249             {
250                 case GL_UNSIGNED_BYTE:
251                     return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
252                 default:
253                     break;
254             }
255             break;
256 
257         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
258             switch (type)
259             {
260                 case GL_UNSIGNED_BYTE:
261                     return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
262                 default:
263                     break;
264             }
265             break;
266 
267         case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
268             switch (type)
269             {
270                 case GL_UNSIGNED_BYTE:
271                     return GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT;
272                 default:
273                     break;
274             }
275             break;
276 
277         case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
278             switch (type)
279             {
280                 case GL_UNSIGNED_BYTE:
281                     return GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT;
282                 default:
283                     break;
284             }
285             break;
286 
287         case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
288             switch (type)
289             {
290                 case GL_UNSIGNED_BYTE:
291                     return GL_COMPRESSED_SRGB_S3TC_DXT1_EXT;
292                 default:
293                     break;
294             }
295             break;
296 
297         case GL_DEPTH_COMPONENT:
298             switch (type)
299             {
300                 case GL_FLOAT:
301                     return GL_DEPTH_COMPONENT32F;
302                 case GL_UNSIGNED_INT:
303                     return GL_DEPTH_COMPONENT32_OES;
304                 case GL_UNSIGNED_INT_24_8:
305                     return GL_DEPTH24_STENCIL8;
306                 case GL_UNSIGNED_SHORT:
307                     return GL_DEPTH_COMPONENT16;
308                 default:
309                     break;
310             }
311             break;
312 
313         case GL_DEPTH_STENCIL:
314             switch (type)
315             {
316                 case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
317                     return GL_DEPTH32F_STENCIL8;
318                 case GL_UNSIGNED_INT_24_8:
319                     return GL_DEPTH24_STENCIL8;
320                 default:
321                     break;
322             }
323             break;
324 
325         case GL_LUMINANCE:
326             switch (type)
327             {
328                 case GL_FLOAT:
329                     return GL_LUMINANCE32F_EXT;
330                 case GL_HALF_FLOAT:
331                     return GL_LUMINANCE16F_EXT;
332                 case GL_HALF_FLOAT_OES:
333                     return GL_LUMINANCE16F_EXT;
334                 case GL_UNSIGNED_BYTE:
335                     return GL_LUMINANCE8_EXT;
336                 default:
337                     break;
338             }
339             break;
340 
341         case GL_LUMINANCE_ALPHA:
342             switch (type)
343             {
344                 case GL_FLOAT:
345                     return GL_LUMINANCE_ALPHA32F_EXT;
346                 case GL_HALF_FLOAT:
347                     return GL_LUMINANCE_ALPHA16F_EXT;
348                 case GL_HALF_FLOAT_OES:
349                     return GL_LUMINANCE_ALPHA16F_EXT;
350                 case GL_UNSIGNED_BYTE:
351                     return GL_LUMINANCE8_ALPHA8_EXT;
352                 default:
353                     break;
354             }
355             break;
356 
357         case GL_RED:
358             switch (type)
359             {
360                 case GL_BYTE:
361                     return GL_R8_SNORM;
362                 case GL_FLOAT:
363                     return GL_R32F;
364                 case GL_HALF_FLOAT:
365                     return GL_R16F;
366                 case GL_HALF_FLOAT_OES:
367                     return GL_R16F;
368                 case GL_SHORT:
369                     return GL_R16_SNORM_EXT;
370                 case GL_UNSIGNED_BYTE:
371                     return GL_R8;
372                 case GL_UNSIGNED_SHORT:
373                     return GL_R16_EXT;
374                 default:
375                     break;
376             }
377             break;
378 
379         case GL_RED_INTEGER:
380             switch (type)
381             {
382                 case GL_BYTE:
383                     return GL_R8I;
384                 case GL_INT:
385                     return GL_R32I;
386                 case GL_SHORT:
387                     return GL_R16I;
388                 case GL_UNSIGNED_BYTE:
389                     return GL_R8UI;
390                 case GL_UNSIGNED_INT:
391                     return GL_R32UI;
392                 case GL_UNSIGNED_SHORT:
393                     return GL_R16UI;
394                 default:
395                     break;
396             }
397             break;
398 
399         case GL_RG:
400             switch (type)
401             {
402                 case GL_BYTE:
403                     return GL_RG8_SNORM;
404                 case GL_FLOAT:
405                     return GL_RG32F;
406                 case GL_HALF_FLOAT:
407                     return GL_RG16F;
408                 case GL_HALF_FLOAT_OES:
409                     return GL_RG16F;
410                 case GL_SHORT:
411                     return GL_RG16_SNORM_EXT;
412                 case GL_UNSIGNED_BYTE:
413                     return GL_RG8;
414                 case GL_UNSIGNED_SHORT:
415                     return GL_RG16_EXT;
416                 default:
417                     break;
418             }
419             break;
420 
421         case GL_RGB:
422             switch (type)
423             {
424                 case GL_BYTE:
425                     return GL_RGB8_SNORM;
426                 case GL_FLOAT:
427                     return GL_RGB32F;
428                 case GL_HALF_FLOAT:
429                     return GL_RGB16F;
430                 case GL_HALF_FLOAT_OES:
431                     return GL_RGB16F;
432                 case GL_SHORT:
433                     return GL_RGB16_SNORM_EXT;
434                 case GL_UNSIGNED_BYTE:
435                     return GL_RGB8;
436                 case GL_UNSIGNED_INT_10F_11F_11F_REV:
437                     return GL_R11F_G11F_B10F;
438                 case GL_UNSIGNED_INT_2_10_10_10_REV:
439                     return GL_RGB10_UNORM_ANGLEX;
440                 case GL_UNSIGNED_INT_5_9_9_9_REV:
441                     return GL_RGB9_E5;
442                 case GL_UNSIGNED_SHORT:
443                     return GL_RGB16_EXT;
444                 case GL_UNSIGNED_SHORT_5_6_5:
445                     return GL_RGB565;
446                 default:
447                     break;
448             }
449             break;
450 
451         case GL_RGBA:
452             switch (type)
453             {
454                 case GL_BYTE:
455                     return GL_RGBA8_SNORM;
456                 case GL_FLOAT:
457                     return GL_RGBA32F;
458                 case GL_HALF_FLOAT:
459                     return GL_RGBA16F;
460                 case GL_HALF_FLOAT_OES:
461                     return GL_RGBA16F;
462                 case GL_SHORT:
463                     return GL_RGBA16_SNORM_EXT;
464                 case GL_UNSIGNED_BYTE:
465                     return GL_RGBA8;
466                 case GL_UNSIGNED_INT_2_10_10_10_REV:
467                     return GL_RGB10_A2;
468                 case GL_UNSIGNED_SHORT:
469                     return GL_RGBA16_EXT;
470                 case GL_UNSIGNED_SHORT_4_4_4_4:
471                     return GL_RGBA4;
472                 case GL_UNSIGNED_SHORT_5_5_5_1:
473                     return GL_RGB5_A1;
474                 default:
475                     break;
476             }
477             break;
478 
479         case GL_RGBA_INTEGER:
480             switch (type)
481             {
482                 case GL_BYTE:
483                     return GL_RGBA8I;
484                 case GL_INT:
485                     return GL_RGBA32I;
486                 case GL_SHORT:
487                     return GL_RGBA16I;
488                 case GL_UNSIGNED_BYTE:
489                     return GL_RGBA8UI;
490                 case GL_UNSIGNED_INT:
491                     return GL_RGBA32UI;
492                 case GL_UNSIGNED_INT_2_10_10_10_REV:
493                     return GL_RGB10_A2UI;
494                 case GL_UNSIGNED_SHORT:
495                     return GL_RGBA16UI;
496                 default:
497                     break;
498             }
499             break;
500 
501         case GL_RGB_INTEGER:
502             switch (type)
503             {
504                 case GL_BYTE:
505                     return GL_RGB8I;
506                 case GL_INT:
507                     return GL_RGB32I;
508                 case GL_SHORT:
509                     return GL_RGB16I;
510                 case GL_UNSIGNED_BYTE:
511                     return GL_RGB8UI;
512                 case GL_UNSIGNED_INT:
513                     return GL_RGB32UI;
514                 case GL_UNSIGNED_SHORT:
515                     return GL_RGB16UI;
516                 default:
517                     break;
518             }
519             break;
520 
521         case GL_RG_INTEGER:
522             switch (type)
523             {
524                 case GL_BYTE:
525                     return GL_RG8I;
526                 case GL_INT:
527                     return GL_RG32I;
528                 case GL_SHORT:
529                     return GL_RG16I;
530                 case GL_UNSIGNED_BYTE:
531                     return GL_RG8UI;
532                 case GL_UNSIGNED_INT:
533                     return GL_RG32UI;
534                 case GL_UNSIGNED_SHORT:
535                     return GL_RG16UI;
536                 default:
537                     break;
538             }
539             break;
540 
541         case GL_SRGB_ALPHA_EXT:
542             switch (type)
543             {
544                 case GL_UNSIGNED_BYTE:
545                     return GL_SRGB8_ALPHA8;
546                 default:
547                     break;
548             }
549             break;
550 
551         case GL_SRGB_EXT:
552             switch (type)
553             {
554                 case GL_UNSIGNED_BYTE:
555                     return GL_SRGB8;
556                 default:
557                     break;
558             }
559             break;
560 
561         case GL_STENCIL:
562             switch (type)
563             {
564                 case GL_UNSIGNED_BYTE:
565                     return GL_STENCIL_INDEX8;
566                 default:
567                     break;
568             }
569             break;
570 
571         case GL_STENCIL_INDEX_OES:
572             switch (type)
573             {
574                 case GL_UNSIGNED_BYTE:
575                     return GL_STENCIL_INDEX8;
576                 default:
577                     break;
578             }
579             break;
580 
581         case GL_NONE:
582             return GL_NONE;
583 
584         default:
585             break;
586     }
587 
588     return GL_NONE;
589 }
590 
ValidES3Format(GLenum format)591 bool ValidES3Format(GLenum format)
592 {
593     switch (format)
594     {
595         case GL_ALPHA:
596         case GL_BGRA_EXT:
597         case GL_DEPTH_COMPONENT:
598         case GL_DEPTH_STENCIL:
599         case GL_LUMINANCE:
600         case GL_LUMINANCE_ALPHA:
601         case GL_RED:
602         case GL_RED_INTEGER:
603         case GL_RG:
604         case GL_RGB:
605         case GL_RGBA:
606         case GL_RGBA_INTEGER:
607         case GL_RGB_INTEGER:
608         case GL_RG_INTEGER:
609         case GL_SRGB_ALPHA_EXT:
610         case GL_SRGB_EXT:
611         case GL_STENCIL_INDEX:
612             return true;
613 
614         default:
615             return false;
616     }
617 }
618 
ValidES3Type(GLenum type)619 bool ValidES3Type(GLenum type)
620 {
621     switch (type)
622     {
623         case GL_BYTE:
624         case GL_FLOAT:
625         case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
626         case GL_HALF_FLOAT:
627         case GL_HALF_FLOAT_OES:
628         case GL_INT:
629         case GL_SHORT:
630         case GL_UNSIGNED_BYTE:
631         case GL_UNSIGNED_INT:
632         case GL_UNSIGNED_INT_10F_11F_11F_REV:
633         case GL_UNSIGNED_INT_24_8:
634         case GL_UNSIGNED_INT_2_10_10_10_REV:
635         case GL_UNSIGNED_INT_5_9_9_9_REV:
636         case GL_UNSIGNED_SHORT:
637         case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
638         case GL_UNSIGNED_SHORT_4_4_4_4:
639         case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
640         case GL_UNSIGNED_SHORT_5_5_5_1:
641         case GL_UNSIGNED_SHORT_5_6_5:
642             return true;
643 
644         default:
645             return false;
646     }
647 }
648 
ValidES3FormatCombination(GLenum format,GLenum type,GLenum internalFormat)649 bool ValidES3FormatCombination(GLenum format, GLenum type, GLenum internalFormat)
650 {
651     ASSERT(ValidES3Format(format) && ValidES3Type(type));
652 
653     switch (format)
654     {
655         case GL_ALPHA:
656             switch (type)
657             {
658                 case GL_FLOAT:
659                 {
660                     switch (internalFormat)
661                     {
662                         case GL_ALPHA:
663                         case GL_ALPHA32F_EXT:
664                             return true;
665                         default:
666                             break;
667                     }
668                     break;
669                 }
670                 case GL_HALF_FLOAT:
671                 {
672                     switch (internalFormat)
673                     {
674                         case GL_ALPHA:
675                         case GL_ALPHA16F_EXT:
676                             return true;
677                         default:
678                             break;
679                     }
680                     break;
681                 }
682                 case GL_HALF_FLOAT_OES:
683                 {
684                     switch (internalFormat)
685                     {
686                         case GL_ALPHA:
687                         case GL_ALPHA16F_EXT:
688                             return true;
689                         default:
690                             break;
691                     }
692                     break;
693                 }
694                 case GL_UNSIGNED_BYTE:
695                 {
696                     switch (internalFormat)
697                     {
698                         case GL_ALPHA:
699                         case GL_ALPHA8_EXT:
700                             return true;
701                         default:
702                             break;
703                     }
704                     break;
705                 }
706                 default:
707                     break;
708             }
709             break;
710 
711         case GL_BGRA_EXT:
712             switch (type)
713             {
714                 case GL_UNSIGNED_BYTE:
715                 {
716                     switch (internalFormat)
717                     {
718                         case GL_BGRA_EXT:
719                         case GL_BGRA8_EXT:
720                         case GL_BGRA4_ANGLEX:
721                         case GL_BGR5_A1_ANGLEX:
722                             return true;
723                         default:
724                             break;
725                     }
726                     break;
727                 }
728                 case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
729                 {
730                     switch (internalFormat)
731                     {
732                         case GL_BGR5_A1_ANGLEX:
733                             return true;
734                         default:
735                             break;
736                     }
737                     break;
738                 }
739                 case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
740                 {
741                     switch (internalFormat)
742                     {
743                         case GL_BGRA4_ANGLEX:
744                             return true;
745                         default:
746                             break;
747                     }
748                     break;
749                 }
750                 default:
751                     break;
752             }
753             break;
754 
755         case GL_DEPTH_COMPONENT:
756             switch (type)
757             {
758                 case GL_FLOAT:
759                 {
760                     switch (internalFormat)
761                     {
762                         case GL_DEPTH_COMPONENT32F:
763                             return true;
764                         default:
765                             break;
766                     }
767                     break;
768                 }
769                 case GL_UNSIGNED_INT:
770                 {
771                     switch (internalFormat)
772                     {
773                         case GL_DEPTH_COMPONENT24:
774                         case GL_DEPTH_COMPONENT16:
775                         case GL_DEPTH_COMPONENT:
776                             return true;
777                         default:
778                             break;
779                     }
780                     break;
781                 }
782                 case GL_UNSIGNED_INT_24_8:
783                 {
784                     switch (internalFormat)
785                     {
786                         case GL_DEPTH_COMPONENT32_OES:
787                             return true;
788                         default:
789                             break;
790                     }
791                     break;
792                 }
793                 case GL_UNSIGNED_SHORT:
794                 {
795                     switch (internalFormat)
796                     {
797                         case GL_DEPTH_COMPONENT16:
798                         case GL_DEPTH_COMPONENT:
799                             return true;
800                         default:
801                             break;
802                     }
803                     break;
804                 }
805                 default:
806                     break;
807             }
808             break;
809 
810         case GL_DEPTH_STENCIL:
811             switch (type)
812             {
813                 case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
814                 {
815                     switch (internalFormat)
816                     {
817                         case GL_DEPTH32F_STENCIL8:
818                             return true;
819                         default:
820                             break;
821                     }
822                     break;
823                 }
824                 case GL_UNSIGNED_INT_24_8:
825                 {
826                     switch (internalFormat)
827                     {
828                         case GL_DEPTH_STENCIL:
829                         case GL_DEPTH24_STENCIL8:
830                             return true;
831                         default:
832                             break;
833                     }
834                     break;
835                 }
836                 default:
837                     break;
838             }
839             break;
840 
841         case GL_LUMINANCE:
842             switch (type)
843             {
844                 case GL_FLOAT:
845                 {
846                     switch (internalFormat)
847                     {
848                         case GL_LUMINANCE:
849                         case GL_LUMINANCE32F_EXT:
850                             return true;
851                         default:
852                             break;
853                     }
854                     break;
855                 }
856                 case GL_HALF_FLOAT:
857                 {
858                     switch (internalFormat)
859                     {
860                         case GL_LUMINANCE:
861                         case GL_LUMINANCE16F_EXT:
862                             return true;
863                         default:
864                             break;
865                     }
866                     break;
867                 }
868                 case GL_HALF_FLOAT_OES:
869                 {
870                     switch (internalFormat)
871                     {
872                         case GL_LUMINANCE:
873                         case GL_LUMINANCE16F_EXT:
874                             return true;
875                         default:
876                             break;
877                     }
878                     break;
879                 }
880                 case GL_UNSIGNED_BYTE:
881                 {
882                     switch (internalFormat)
883                     {
884                         case GL_LUMINANCE:
885                         case GL_LUMINANCE8_EXT:
886                             return true;
887                         default:
888                             break;
889                     }
890                     break;
891                 }
892                 default:
893                     break;
894             }
895             break;
896 
897         case GL_LUMINANCE_ALPHA:
898             switch (type)
899             {
900                 case GL_FLOAT:
901                 {
902                     switch (internalFormat)
903                     {
904                         case GL_LUMINANCE_ALPHA:
905                         case GL_LUMINANCE_ALPHA32F_EXT:
906                             return true;
907                         default:
908                             break;
909                     }
910                     break;
911                 }
912                 case GL_HALF_FLOAT:
913                 {
914                     switch (internalFormat)
915                     {
916                         case GL_LUMINANCE_ALPHA:
917                         case GL_LUMINANCE_ALPHA16F_EXT:
918                             return true;
919                         default:
920                             break;
921                     }
922                     break;
923                 }
924                 case GL_HALF_FLOAT_OES:
925                 {
926                     switch (internalFormat)
927                     {
928                         case GL_LUMINANCE_ALPHA:
929                         case GL_LUMINANCE_ALPHA16F_EXT:
930                             return true;
931                         default:
932                             break;
933                     }
934                     break;
935                 }
936                 case GL_UNSIGNED_BYTE:
937                 {
938                     switch (internalFormat)
939                     {
940                         case GL_LUMINANCE_ALPHA:
941                         case GL_LUMINANCE8_ALPHA8_EXT:
942                             return true;
943                         default:
944                             break;
945                     }
946                     break;
947                 }
948                 default:
949                     break;
950             }
951             break;
952 
953         case GL_RED:
954             switch (type)
955             {
956                 case GL_BYTE:
957                 {
958                     switch (internalFormat)
959                     {
960                         case GL_R8_SNORM:
961                             return true;
962                         default:
963                             break;
964                     }
965                     break;
966                 }
967                 case GL_FLOAT:
968                 {
969                     switch (internalFormat)
970                     {
971                         case GL_R32F:
972                         case GL_R16F:
973                         case GL_RED:
974                             return true;
975                         default:
976                             break;
977                     }
978                     break;
979                 }
980                 case GL_HALF_FLOAT:
981                 {
982                     switch (internalFormat)
983                     {
984                         case GL_R16F:
985                         case GL_RED:
986                             return true;
987                         default:
988                             break;
989                     }
990                     break;
991                 }
992                 case GL_HALF_FLOAT_OES:
993                 {
994                     switch (internalFormat)
995                     {
996                         case GL_R16F:
997                         case GL_RED:
998                             return true;
999                         default:
1000                             break;
1001                     }
1002                     break;
1003                 }
1004                 case GL_SHORT:
1005                 {
1006                     switch (internalFormat)
1007                     {
1008                         case GL_R16_SNORM_EXT:
1009                             return true;
1010                         default:
1011                             break;
1012                     }
1013                     break;
1014                 }
1015                 case GL_UNSIGNED_BYTE:
1016                 {
1017                     switch (internalFormat)
1018                     {
1019                         case GL_R8:
1020                         case GL_RED:
1021                         case GL_SR8_EXT:
1022                             return true;
1023                         default:
1024                             break;
1025                     }
1026                     break;
1027                 }
1028                 case GL_UNSIGNED_SHORT:
1029                 {
1030                     switch (internalFormat)
1031                     {
1032                         case GL_R16_EXT:
1033                             return true;
1034                         default:
1035                             break;
1036                     }
1037                     break;
1038                 }
1039                 default:
1040                     break;
1041             }
1042             break;
1043 
1044         case GL_RED_INTEGER:
1045             switch (type)
1046             {
1047                 case GL_BYTE:
1048                 {
1049                     switch (internalFormat)
1050                     {
1051                         case GL_R8I:
1052                             return true;
1053                         default:
1054                             break;
1055                     }
1056                     break;
1057                 }
1058                 case GL_INT:
1059                 {
1060                     switch (internalFormat)
1061                     {
1062                         case GL_R32I:
1063                             return true;
1064                         default:
1065                             break;
1066                     }
1067                     break;
1068                 }
1069                 case GL_SHORT:
1070                 {
1071                     switch (internalFormat)
1072                     {
1073                         case GL_R16I:
1074                             return true;
1075                         default:
1076                             break;
1077                     }
1078                     break;
1079                 }
1080                 case GL_UNSIGNED_BYTE:
1081                 {
1082                     switch (internalFormat)
1083                     {
1084                         case GL_R8UI:
1085                             return true;
1086                         default:
1087                             break;
1088                     }
1089                     break;
1090                 }
1091                 case GL_UNSIGNED_INT:
1092                 {
1093                     switch (internalFormat)
1094                     {
1095                         case GL_R32UI:
1096                             return true;
1097                         default:
1098                             break;
1099                     }
1100                     break;
1101                 }
1102                 case GL_UNSIGNED_SHORT:
1103                 {
1104                     switch (internalFormat)
1105                     {
1106                         case GL_R16UI:
1107                             return true;
1108                         default:
1109                             break;
1110                     }
1111                     break;
1112                 }
1113                 default:
1114                     break;
1115             }
1116             break;
1117 
1118         case GL_RG:
1119             switch (type)
1120             {
1121                 case GL_BYTE:
1122                 {
1123                     switch (internalFormat)
1124                     {
1125                         case GL_RG8_SNORM:
1126                             return true;
1127                         default:
1128                             break;
1129                     }
1130                     break;
1131                 }
1132                 case GL_FLOAT:
1133                 {
1134                     switch (internalFormat)
1135                     {
1136                         case GL_RG32F:
1137                         case GL_RG16F:
1138                         case GL_RG:
1139                             return true;
1140                         default:
1141                             break;
1142                     }
1143                     break;
1144                 }
1145                 case GL_HALF_FLOAT:
1146                 {
1147                     switch (internalFormat)
1148                     {
1149                         case GL_RG16F:
1150                         case GL_RG:
1151                             return true;
1152                         default:
1153                             break;
1154                     }
1155                     break;
1156                 }
1157                 case GL_HALF_FLOAT_OES:
1158                 {
1159                     switch (internalFormat)
1160                     {
1161                         case GL_RG16F:
1162                         case GL_RG:
1163                             return true;
1164                         default:
1165                             break;
1166                     }
1167                     break;
1168                 }
1169                 case GL_SHORT:
1170                 {
1171                     switch (internalFormat)
1172                     {
1173                         case GL_RG16_SNORM_EXT:
1174                             return true;
1175                         default:
1176                             break;
1177                     }
1178                     break;
1179                 }
1180                 case GL_UNSIGNED_BYTE:
1181                 {
1182                     switch (internalFormat)
1183                     {
1184                         case GL_RG8:
1185                         case GL_RG:
1186                         case GL_SRG8_EXT:
1187                             return true;
1188                         default:
1189                             break;
1190                     }
1191                     break;
1192                 }
1193                 case GL_UNSIGNED_SHORT:
1194                 {
1195                     switch (internalFormat)
1196                     {
1197                         case GL_RG16_EXT:
1198                             return true;
1199                         default:
1200                             break;
1201                     }
1202                     break;
1203                 }
1204                 default:
1205                     break;
1206             }
1207             break;
1208 
1209         case GL_RGB:
1210             switch (type)
1211             {
1212                 case GL_BYTE:
1213                 {
1214                     switch (internalFormat)
1215                     {
1216                         case GL_RGB8_SNORM:
1217                             return true;
1218                         default:
1219                             break;
1220                     }
1221                     break;
1222                 }
1223                 case GL_FLOAT:
1224                 {
1225                     switch (internalFormat)
1226                     {
1227                         case GL_RGB32F:
1228                         case GL_RGB16F:
1229                         case GL_R11F_G11F_B10F:
1230                         case GL_RGB9_E5:
1231                         case GL_RGB:
1232                             return true;
1233                         default:
1234                             break;
1235                     }
1236                     break;
1237                 }
1238                 case GL_HALF_FLOAT:
1239                 {
1240                     switch (internalFormat)
1241                     {
1242                         case GL_RGB16F:
1243                         case GL_R11F_G11F_B10F:
1244                         case GL_RGB9_E5:
1245                             return true;
1246                         default:
1247                             break;
1248                     }
1249                     break;
1250                 }
1251                 case GL_HALF_FLOAT_OES:
1252                 {
1253                     switch (internalFormat)
1254                     {
1255                         case GL_RGB16F:
1256                         case GL_R11F_G11F_B10F:
1257                         case GL_RGB9_E5:
1258                         case GL_RGB:
1259                             return true;
1260                         default:
1261                             break;
1262                     }
1263                     break;
1264                 }
1265                 case GL_SHORT:
1266                 {
1267                     switch (internalFormat)
1268                     {
1269                         case GL_RGB16_SNORM_EXT:
1270                             return true;
1271                         default:
1272                             break;
1273                     }
1274                     break;
1275                 }
1276                 case GL_UNSIGNED_BYTE:
1277                 {
1278                     switch (internalFormat)
1279                     {
1280                         case GL_RGB8:
1281                         case GL_RGB565:
1282                         case GL_SRGB8:
1283                         case GL_RGB:
1284                         case GL_RGBX8_ANGLE:
1285                             return true;
1286                         default:
1287                             break;
1288                     }
1289                     break;
1290                 }
1291                 case GL_UNSIGNED_INT_10F_11F_11F_REV:
1292                 {
1293                     switch (internalFormat)
1294                     {
1295                         case GL_R11F_G11F_B10F:
1296                             return true;
1297                         default:
1298                             break;
1299                     }
1300                     break;
1301                 }
1302                 case GL_UNSIGNED_INT_2_10_10_10_REV:
1303                 {
1304                     switch (internalFormat)
1305                     {
1306                         case GL_RGB:
1307                             return true;
1308                         default:
1309                             break;
1310                     }
1311                     break;
1312                 }
1313                 case GL_UNSIGNED_INT_5_9_9_9_REV:
1314                 {
1315                     switch (internalFormat)
1316                     {
1317                         case GL_RGB9_E5:
1318                             return true;
1319                         default:
1320                             break;
1321                     }
1322                     break;
1323                 }
1324                 case GL_UNSIGNED_SHORT:
1325                 {
1326                     switch (internalFormat)
1327                     {
1328                         case GL_RGB16_EXT:
1329                             return true;
1330                         default:
1331                             break;
1332                     }
1333                     break;
1334                 }
1335                 case GL_UNSIGNED_SHORT_5_6_5:
1336                 {
1337                     switch (internalFormat)
1338                     {
1339                         case GL_RGB565:
1340                         case GL_RGB:
1341                             return true;
1342                         default:
1343                             break;
1344                     }
1345                     break;
1346                 }
1347                 default:
1348                     break;
1349             }
1350             break;
1351 
1352         case GL_RGBA:
1353             switch (type)
1354             {
1355                 case GL_BYTE:
1356                 {
1357                     switch (internalFormat)
1358                     {
1359                         case GL_RGBA8_SNORM:
1360                             return true;
1361                         default:
1362                             break;
1363                     }
1364                     break;
1365                 }
1366                 case GL_FLOAT:
1367                 {
1368                     switch (internalFormat)
1369                     {
1370                         case GL_RGBA32F:
1371                         case GL_RGBA16F:
1372                         case GL_RGBA:
1373                             return true;
1374                         default:
1375                             break;
1376                     }
1377                     break;
1378                 }
1379                 case GL_HALF_FLOAT:
1380                 {
1381                     switch (internalFormat)
1382                     {
1383                         case GL_RGBA16F:
1384                             return true;
1385                         default:
1386                             break;
1387                     }
1388                     break;
1389                 }
1390                 case GL_HALF_FLOAT_OES:
1391                 {
1392                     switch (internalFormat)
1393                     {
1394                         case GL_RGBA16F:
1395                         case GL_RGBA:
1396                             return true;
1397                         default:
1398                             break;
1399                     }
1400                     break;
1401                 }
1402                 case GL_SHORT:
1403                 {
1404                     switch (internalFormat)
1405                     {
1406                         case GL_RGBA16_SNORM_EXT:
1407                             return true;
1408                         default:
1409                             break;
1410                     }
1411                     break;
1412                 }
1413                 case GL_UNSIGNED_BYTE:
1414                 {
1415                     switch (internalFormat)
1416                     {
1417                         case GL_RGBA8:
1418                         case GL_RGB5_A1:
1419                         case GL_RGBA4:
1420                         case GL_SRGB8_ALPHA8:
1421                         case GL_RGBA:
1422                             return true;
1423                         default:
1424                             break;
1425                     }
1426                     break;
1427                 }
1428                 case GL_UNSIGNED_INT_2_10_10_10_REV:
1429                 {
1430                     switch (internalFormat)
1431                     {
1432                         case GL_RGB10_A2:
1433                         case GL_RGB5_A1:
1434                         case GL_RGBA:
1435                             return true;
1436                         default:
1437                             break;
1438                     }
1439                     break;
1440                 }
1441                 case GL_UNSIGNED_SHORT:
1442                 {
1443                     switch (internalFormat)
1444                     {
1445                         case GL_RGBA16_EXT:
1446                             return true;
1447                         default:
1448                             break;
1449                     }
1450                     break;
1451                 }
1452                 case GL_UNSIGNED_SHORT_4_4_4_4:
1453                 {
1454                     switch (internalFormat)
1455                     {
1456                         case GL_RGBA4:
1457                         case GL_RGBA:
1458                             return true;
1459                         default:
1460                             break;
1461                     }
1462                     break;
1463                 }
1464                 case GL_UNSIGNED_SHORT_5_5_5_1:
1465                 {
1466                     switch (internalFormat)
1467                     {
1468                         case GL_RGB5_A1:
1469                         case GL_RGBA:
1470                             return true;
1471                         default:
1472                             break;
1473                     }
1474                     break;
1475                 }
1476                 default:
1477                     break;
1478             }
1479             break;
1480 
1481         case GL_RGBA_INTEGER:
1482             switch (type)
1483             {
1484                 case GL_BYTE:
1485                 {
1486                     switch (internalFormat)
1487                     {
1488                         case GL_RGBA8I:
1489                             return true;
1490                         default:
1491                             break;
1492                     }
1493                     break;
1494                 }
1495                 case GL_INT:
1496                 {
1497                     switch (internalFormat)
1498                     {
1499                         case GL_RGBA32I:
1500                             return true;
1501                         default:
1502                             break;
1503                     }
1504                     break;
1505                 }
1506                 case GL_SHORT:
1507                 {
1508                     switch (internalFormat)
1509                     {
1510                         case GL_RGBA16I:
1511                             return true;
1512                         default:
1513                             break;
1514                     }
1515                     break;
1516                 }
1517                 case GL_UNSIGNED_BYTE:
1518                 {
1519                     switch (internalFormat)
1520                     {
1521                         case GL_RGBA8UI:
1522                             return true;
1523                         default:
1524                             break;
1525                     }
1526                     break;
1527                 }
1528                 case GL_UNSIGNED_INT:
1529                 {
1530                     switch (internalFormat)
1531                     {
1532                         case GL_RGBA32UI:
1533                             return true;
1534                         default:
1535                             break;
1536                     }
1537                     break;
1538                 }
1539                 case GL_UNSIGNED_INT_2_10_10_10_REV:
1540                 {
1541                     switch (internalFormat)
1542                     {
1543                         case GL_RGB10_A2UI:
1544                             return true;
1545                         default:
1546                             break;
1547                     }
1548                     break;
1549                 }
1550                 case GL_UNSIGNED_SHORT:
1551                 {
1552                     switch (internalFormat)
1553                     {
1554                         case GL_RGBA16UI:
1555                             return true;
1556                         default:
1557                             break;
1558                     }
1559                     break;
1560                 }
1561                 default:
1562                     break;
1563             }
1564             break;
1565 
1566         case GL_RGB_INTEGER:
1567             switch (type)
1568             {
1569                 case GL_BYTE:
1570                 {
1571                     switch (internalFormat)
1572                     {
1573                         case GL_RGB8I:
1574                             return true;
1575                         default:
1576                             break;
1577                     }
1578                     break;
1579                 }
1580                 case GL_INT:
1581                 {
1582                     switch (internalFormat)
1583                     {
1584                         case GL_RGB32I:
1585                             return true;
1586                         default:
1587                             break;
1588                     }
1589                     break;
1590                 }
1591                 case GL_SHORT:
1592                 {
1593                     switch (internalFormat)
1594                     {
1595                         case GL_RGB16I:
1596                             return true;
1597                         default:
1598                             break;
1599                     }
1600                     break;
1601                 }
1602                 case GL_UNSIGNED_BYTE:
1603                 {
1604                     switch (internalFormat)
1605                     {
1606                         case GL_RGB8UI:
1607                             return true;
1608                         default:
1609                             break;
1610                     }
1611                     break;
1612                 }
1613                 case GL_UNSIGNED_INT:
1614                 {
1615                     switch (internalFormat)
1616                     {
1617                         case GL_RGB32UI:
1618                             return true;
1619                         default:
1620                             break;
1621                     }
1622                     break;
1623                 }
1624                 case GL_UNSIGNED_SHORT:
1625                 {
1626                     switch (internalFormat)
1627                     {
1628                         case GL_RGB16UI:
1629                             return true;
1630                         default:
1631                             break;
1632                     }
1633                     break;
1634                 }
1635                 default:
1636                     break;
1637             }
1638             break;
1639 
1640         case GL_RG_INTEGER:
1641             switch (type)
1642             {
1643                 case GL_BYTE:
1644                 {
1645                     switch (internalFormat)
1646                     {
1647                         case GL_RG8I:
1648                             return true;
1649                         default:
1650                             break;
1651                     }
1652                     break;
1653                 }
1654                 case GL_INT:
1655                 {
1656                     switch (internalFormat)
1657                     {
1658                         case GL_RG32I:
1659                             return true;
1660                         default:
1661                             break;
1662                     }
1663                     break;
1664                 }
1665                 case GL_SHORT:
1666                 {
1667                     switch (internalFormat)
1668                     {
1669                         case GL_RG16I:
1670                             return true;
1671                         default:
1672                             break;
1673                     }
1674                     break;
1675                 }
1676                 case GL_UNSIGNED_BYTE:
1677                 {
1678                     switch (internalFormat)
1679                     {
1680                         case GL_RG8UI:
1681                             return true;
1682                         default:
1683                             break;
1684                     }
1685                     break;
1686                 }
1687                 case GL_UNSIGNED_INT:
1688                 {
1689                     switch (internalFormat)
1690                     {
1691                         case GL_RG32UI:
1692                             return true;
1693                         default:
1694                             break;
1695                     }
1696                     break;
1697                 }
1698                 case GL_UNSIGNED_SHORT:
1699                 {
1700                     switch (internalFormat)
1701                     {
1702                         case GL_RG16UI:
1703                             return true;
1704                         default:
1705                             break;
1706                     }
1707                     break;
1708                 }
1709                 default:
1710                     break;
1711             }
1712             break;
1713 
1714         case GL_SRGB_ALPHA_EXT:
1715             switch (type)
1716             {
1717                 case GL_UNSIGNED_BYTE:
1718                 {
1719                     switch (internalFormat)
1720                     {
1721                         case GL_SRGB_ALPHA_EXT:
1722                         case GL_SRGB8_ALPHA8_EXT:
1723                             return true;
1724                         default:
1725                             break;
1726                     }
1727                     break;
1728                 }
1729                 default:
1730                     break;
1731             }
1732             break;
1733 
1734         case GL_SRGB_EXT:
1735             switch (type)
1736             {
1737                 case GL_UNSIGNED_BYTE:
1738                 {
1739                     switch (internalFormat)
1740                     {
1741                         case GL_SRGB_EXT:
1742                         case GL_SRGB8:
1743                             return true;
1744                         default:
1745                             break;
1746                     }
1747                     break;
1748                 }
1749                 default:
1750                     break;
1751             }
1752             break;
1753 
1754         case GL_STENCIL_INDEX:
1755             switch (type)
1756             {
1757                 case GL_UNSIGNED_BYTE:
1758                 {
1759                     switch (internalFormat)
1760                     {
1761                         case GL_STENCIL_INDEX8:
1762                             return true;
1763                         default:
1764                             break;
1765                     }
1766                     break;
1767                 }
1768                 default:
1769                     break;
1770             }
1771             break;
1772 
1773         default:
1774             UNREACHABLE();
1775             break;
1776     }
1777 
1778     return false;
1779 }
1780 
1781 }  // namespace gl
1782