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