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