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