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