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