1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES Utilities
3 * ------------------------------------------------
5 * Copyright 2014 The Android Open Source Project
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
21 * \brief Shader utilities.
22 *//*--------------------------------------------------------------------*/
24 #include "gluShaderUtil.hpp"
25 #include "glwEnums.hpp"
26 #include "deArrayUtil.hpp"
31 // ShadingLanguageVersion
33 const char* getGLSLVersionName (GLSLVersion version)
35 static const char* s_names[] =
53 return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_names, version);
56 const char* getGLSLVersionDeclaration (GLSLVersion version)
58 static const char* s_decl[] =
76 return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_decl, version);
79 bool glslVersionUsesInOutQualifiers (GLSLVersion version)
81 return de::inRange<int>(version, GLSL_VERSION_300_ES, GLSL_VERSION_320_ES) || de::inRange<int>(version, GLSL_VERSION_330, GLSL_VERSION_430);
84 bool glslVersionIsES (GLSLVersion version)
86 DE_STATIC_ASSERT(GLSL_VERSION_LAST == 14);
87 DE_ASSERT(version != GLSL_VERSION_LAST);
89 if (version == GLSL_VERSION_100_ES ||
90 version == GLSL_VERSION_300_ES ||
91 version == GLSL_VERSION_310_ES ||
92 version == GLSL_VERSION_320_ES)
98 // \todo [2014-10-06 pyry] Export this.
99 static ApiType getMinAPIForGLSLVersion (GLSLVersion version)
101 static const ApiType s_minApi[] =
119 return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_minApi, version);
122 bool isGLSLVersionSupported (ContextType type, GLSLVersion version)
124 return contextSupports(type, getMinAPIForGLSLVersion(version));
127 GLSLVersion getContextTypeGLSLVersion (ContextType type)
129 // \note From newer to older
130 for (int version = GLSL_VERSION_LAST-1; version >= 0; version--)
132 if (isGLSLVersionSupported(type, GLSLVersion(version)))
133 return GLSLVersion(version);
137 return GLSL_VERSION_LAST;
142 const char* getShaderTypeName (ShaderType shaderType)
144 static const char* s_names[] =
154 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_names) == SHADERTYPE_LAST);
155 DE_ASSERT(deInBounds32((int)shaderType, 0, SHADERTYPE_LAST));
156 return s_names[(int)shaderType];
161 const char* getPrecisionName (Precision precision)
163 static const char* s_names[] =
170 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_names) == PRECISION_LAST);
171 DE_ASSERT(deInBounds32((int)precision, 0, PRECISION_LAST));
172 return s_names[(int)precision];
177 const char* getDataTypeName (DataType dataType)
179 static const char* s_names[] =
229 "sampler2DArrayShadow",
230 "samplerCubeArrayShadow",
273 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_names) == TYPE_LAST);
274 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_names)));
275 return s_names[(int)dataType];
278 int getDataTypeScalarSize (DataType dataType)
280 static const int s_sizes[] =
326 1, // samplerCubeArray
327 1, // sampler1DShadow
328 1, // sampler2DShadow
329 1, // samplerCubeShadow
330 1, // sampler2DArrayShadow
331 1, // samplerCubeArrayShadow
335 1, // isampler2DArray
337 1, // isamplerCubeArray
341 1, // usampler2DArray
343 1, // usamplerCubeArray
356 1, // iimageCubeArray
361 1, // uimageCubeArray
366 1, // sampler2DMSArray
367 1, // isampler2DMSArray
368 1, // usampler2DMSArray
374 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_sizes) == TYPE_LAST);
375 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_sizes)));
376 return s_sizes[(int)dataType];
379 DataType getDataTypeScalarType (DataType dataType)
381 static const DataType s_scalarTypes[] =
383 TYPE_INVALID, // invalid
389 TYPE_FLOAT, // mat2x3
390 TYPE_FLOAT, // mat2x4
391 TYPE_FLOAT, // mat3x2
393 TYPE_FLOAT, // mat3x4
394 TYPE_FLOAT, // mat4x2
395 TYPE_FLOAT, // mat4x3
397 TYPE_DOUBLE, // double
398 TYPE_DOUBLE, // dvec2
399 TYPE_DOUBLE, // dvec3
400 TYPE_DOUBLE, // dvec4
401 TYPE_DOUBLE, // dmat2
402 TYPE_DOUBLE, // dmat2x3
403 TYPE_DOUBLE, // dmat2x4
404 TYPE_DOUBLE, // dmat3x2
405 TYPE_DOUBLE, // dmat3
406 TYPE_DOUBLE, // dmat3x4
407 TYPE_DOUBLE, // dmat4x2
408 TYPE_DOUBLE, // dmat4x3
409 TYPE_DOUBLE, // dmat4
422 TYPE_SAMPLER_1D, // sampler1D
423 TYPE_SAMPLER_2D, // sampler2D
424 TYPE_SAMPLER_CUBE, // samplerCube
425 TYPE_SAMPLER_2D_ARRAY, // sampler2DArray
426 TYPE_SAMPLER_3D, // sampler3D
427 TYPE_SAMPLER_CUBE_ARRAY, // samplerCubeArray
428 TYPE_SAMPLER_1D_SHADOW, // sampler1DShadow
429 TYPE_SAMPLER_2D_SHADOW, // sampler2DShadow
430 TYPE_SAMPLER_CUBE_SHADOW, // samplerCubeShadow
431 TYPE_SAMPLER_2D_ARRAY_SHADOW, // sampler2DArrayShadow
432 TYPE_SAMPLER_CUBE_ARRAY_SHADOW, // samplerCubeArrayShadow
433 TYPE_INT_SAMPLER_1D, // isampler1D
434 TYPE_INT_SAMPLER_2D, // isampler2D
435 TYPE_INT_SAMPLER_CUBE, // isamplerCube
436 TYPE_INT_SAMPLER_2D_ARRAY, // isampler2DArray
437 TYPE_INT_SAMPLER_3D, // isampler3D
438 TYPE_INT_SAMPLER_CUBE_ARRAY, // isamplerCubeArray
439 TYPE_UINT_SAMPLER_1D, // usampler1D
440 TYPE_UINT_SAMPLER_2D, // usampler2D
441 TYPE_UINT_SAMPLER_CUBE, // usamplerCube
442 TYPE_UINT_SAMPLER_2D_ARRAY, // usampler2DArray
443 TYPE_UINT_SAMPLER_3D, // usampler3D
444 TYPE_UINT_SAMPLER_CUBE_ARRAY, // usamplerCubeArray
445 TYPE_SAMPLER_2D_MULTISAMPLE, // sampler2DMS
446 TYPE_INT_SAMPLER_2D_MULTISAMPLE, // isampler2DMS
447 TYPE_UINT_SAMPLER_2D_MULTISAMPLE, // usampler2DMS
448 TYPE_IMAGE_2D, // image2D
449 TYPE_IMAGE_CUBE, // imageCube
450 TYPE_IMAGE_2D_ARRAY, // image2DArray
451 TYPE_IMAGE_3D, // image3D
452 TYPE_IMAGE_CUBE_ARRAY, // imageCubeArray
453 TYPE_INT_IMAGE_2D, // iimage2D
454 TYPE_INT_IMAGE_CUBE, // iimageCube
455 TYPE_INT_IMAGE_2D_ARRAY, // iimage2DArray
456 TYPE_INT_IMAGE_3D, // iimage3D
457 TYPE_INT_IMAGE_CUBE_ARRAY, // iimageCubeArray
458 TYPE_UINT_IMAGE_2D, // uimage2D
459 TYPE_UINT_IMAGE_CUBE, // uimageCube
460 TYPE_UINT_IMAGE_2D_ARRAY, // uimage2DArray
461 TYPE_UINT_IMAGE_3D, // uimage3D
462 TYPE_UINT_IMAGE_CUBE_ARRAY, // uimageCubeArray
463 TYPE_UINT_ATOMIC_COUNTER, // atomic_uint
464 TYPE_SAMPLER_BUFFER, // samplerBuffer
465 TYPE_INT_SAMPLER_BUFFER, // isamplerBuffer
466 TYPE_UINT_SAMPLER_BUFFER, // usamplerBuffer
467 TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY, // sampler2DMSArray
468 TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, // isampler2DMSArray
469 TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY, // usampler2DMSArray
470 TYPE_IMAGE_BUFFER, // imageBuffer
471 TYPE_INT_IMAGE_BUFFER, // iimageBuffer
472 TYPE_UINT_IMAGE_BUFFER, // uimageBuffer
475 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_scalarTypes) == TYPE_LAST);
476 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_scalarTypes)));
477 return s_scalarTypes[(int)dataType];
480 DataType getDataTypeFloatScalars (DataType dataType)
482 static const DataType s_floatTypes[] =
484 TYPE_INVALID, // invalid
486 TYPE_FLOAT_VEC2, // vec2
487 TYPE_FLOAT_VEC3, // vec3
488 TYPE_FLOAT_VEC4, // vec4
489 TYPE_FLOAT_MAT2, // mat2
490 TYPE_FLOAT_MAT2X3, // mat2x3
491 TYPE_FLOAT_MAT2X4, // mat2x4
492 TYPE_FLOAT_MAT3X2, // mat3x2
493 TYPE_FLOAT_MAT3, // mat3
494 TYPE_FLOAT_MAT3X4, // mat3x4
495 TYPE_FLOAT_MAT4X2, // mat4x2
496 TYPE_FLOAT_MAT4X3, // mat4x3
497 TYPE_FLOAT_MAT4, // mat4
498 TYPE_FLOAT, // double
499 TYPE_FLOAT_VEC2, // dvec2
500 TYPE_FLOAT_VEC3, // dvec3
501 TYPE_FLOAT_VEC4, // dvec4
502 TYPE_FLOAT_MAT2, // dmat2
503 TYPE_FLOAT_MAT2X3, // dmat2x3
504 TYPE_FLOAT_MAT2X4, // dmat2x4
505 TYPE_FLOAT_MAT3X2, // dmat3x2
506 TYPE_FLOAT_MAT3, // dmat3
507 TYPE_FLOAT_MAT3X4, // dmat3x4
508 TYPE_FLOAT_MAT4X2, // dmat4x2
509 TYPE_FLOAT_MAT4X3, // dmat4x3
510 TYPE_FLOAT_MAT4, // dmat4
512 TYPE_FLOAT_VEC2, // ivec2
513 TYPE_FLOAT_VEC3, // ivec3
514 TYPE_FLOAT_VEC4, // ivec4
516 TYPE_FLOAT_VEC2, // uvec2
517 TYPE_FLOAT_VEC3, // uvec3
518 TYPE_FLOAT_VEC4, // uvec4
520 TYPE_FLOAT_VEC2, // bvec2
521 TYPE_FLOAT_VEC3, // bvec3
522 TYPE_FLOAT_VEC4, // bvec4
523 TYPE_INVALID, // sampler1D
524 TYPE_INVALID, // sampler2D
525 TYPE_INVALID, // samplerCube
526 TYPE_INVALID, // sampler2DArray
527 TYPE_INVALID, // sampler3D
528 TYPE_INVALID, // samplerCubeArray
529 TYPE_INVALID, // sampler1DShadow
530 TYPE_INVALID, // sampler2DShadow
531 TYPE_INVALID, // samplerCubeShadow
532 TYPE_INVALID, // sampler2DArrayShadow
533 TYPE_INVALID, // samplerCubeArrayShadow
534 TYPE_INVALID, // isampler1D
535 TYPE_INVALID, // isampler2D
536 TYPE_INVALID, // isamplerCube
537 TYPE_INVALID, // isampler2DArray
538 TYPE_INVALID, // isampler3D
539 TYPE_INVALID, // isamplerCubeArray
540 TYPE_INVALID, // usampler1D
541 TYPE_INVALID, // usampler2D
542 TYPE_INVALID, // usamplerCube
543 TYPE_INVALID, // usampler2DArray
544 TYPE_INVALID, // usampler3D
545 TYPE_INVALID, // usamplerCubeArray
546 TYPE_INVALID, // sampler2DMS
547 TYPE_INVALID, // isampler2DMS
548 TYPE_INVALID, // usampler2DMS
549 TYPE_INVALID, // image2D
550 TYPE_INVALID, // imageCube
551 TYPE_INVALID, // image2DArray
552 TYPE_INVALID, // image3D
553 TYPE_INVALID, // imageCubeArray
554 TYPE_INVALID, // iimage2D
555 TYPE_INVALID, // iimageCube
556 TYPE_INVALID, // iimage2DArray
557 TYPE_INVALID, // iimage3D
558 TYPE_INVALID, // iimageCubeArray
559 TYPE_INVALID, // uimage2D
560 TYPE_INVALID, // uimageCube
561 TYPE_INVALID, // uimage2DArray
562 TYPE_INVALID, // uimage3D
563 TYPE_INVALID, // uimageCubeArray
564 TYPE_INVALID, // atomic_uint
565 TYPE_INVALID, // samplerBuffer
566 TYPE_INVALID, // isamplerBuffer
567 TYPE_INVALID, // usamplerBuffer
568 TYPE_INVALID, // sampler2DMSArray
569 TYPE_INVALID, // isampler2DMSArray
570 TYPE_INVALID, // usampler2DMSArray
571 TYPE_INVALID, // imageBuffer
572 TYPE_INVALID, // iimageBuffer
573 TYPE_INVALID, // uimageBuffer
576 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == TYPE_LAST);
577 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_floatTypes)));
578 return s_floatTypes[(int)dataType];
581 DataType getDataTypeDoubleScalars (DataType dataType)
583 static const DataType s_doubleTypes[] =
585 TYPE_INVALID, // invalid
586 TYPE_DOUBLE, // float
587 TYPE_DOUBLE_VEC2, // vec2
588 TYPE_DOUBLE_VEC3, // vec3
589 TYPE_DOUBLE_VEC4, // vec4
590 TYPE_DOUBLE_MAT2, // mat2
591 TYPE_DOUBLE_MAT2X3, // mat2x3
592 TYPE_DOUBLE_MAT2X4, // mat2x4
593 TYPE_DOUBLE_MAT3X2, // mat3x2
594 TYPE_DOUBLE_MAT3, // mat3
595 TYPE_DOUBLE_MAT3X4, // mat3x4
596 TYPE_DOUBLE_MAT4X2, // mat4x2
597 TYPE_DOUBLE_MAT4X3, // mat4x3
598 TYPE_DOUBLE_MAT4, // mat4
599 TYPE_DOUBLE, // double
600 TYPE_DOUBLE_VEC2, // dvec2
601 TYPE_DOUBLE_VEC3, // dvec3
602 TYPE_DOUBLE_VEC4, // dvec4
603 TYPE_DOUBLE_MAT2, // dmat2
604 TYPE_DOUBLE_MAT2X3, // dmat2x3
605 TYPE_DOUBLE_MAT2X4, // dmat2x4
606 TYPE_DOUBLE_MAT3X2, // dmat3x2
607 TYPE_DOUBLE_MAT3, // dmat3
608 TYPE_DOUBLE_MAT3X4, // dmat3x4
609 TYPE_DOUBLE_MAT4X2, // dmat4x2
610 TYPE_DOUBLE_MAT4X3, // dmat4x3
611 TYPE_DOUBLE_MAT4, // dmat4
613 TYPE_DOUBLE_VEC2, // ivec2
614 TYPE_DOUBLE_VEC3, // ivec3
615 TYPE_DOUBLE_VEC4, // ivec4
617 TYPE_DOUBLE_VEC2, // uvec2
618 TYPE_DOUBLE_VEC3, // uvec3
619 TYPE_DOUBLE_VEC4, // uvec4
621 TYPE_DOUBLE_VEC2, // bvec2
622 TYPE_DOUBLE_VEC3, // bvec3
623 TYPE_DOUBLE_VEC4, // bvec4
624 TYPE_INVALID, // sampler1D
625 TYPE_INVALID, // sampler2D
626 TYPE_INVALID, // samplerCube
627 TYPE_INVALID, // sampler2DArray
628 TYPE_INVALID, // sampler3D
629 TYPE_INVALID, // samplerCubeArray
630 TYPE_INVALID, // sampler1DShadow
631 TYPE_INVALID, // sampler2DShadow
632 TYPE_INVALID, // samplerCubeShadow
633 TYPE_INVALID, // sampler2DArrayShadow
634 TYPE_INVALID, // samplerCubeArrayShadow
635 TYPE_INVALID, // isampler1D
636 TYPE_INVALID, // isampler2D
637 TYPE_INVALID, // isamplerCube
638 TYPE_INVALID, // isampler2DArray
639 TYPE_INVALID, // isampler3D
640 TYPE_INVALID, // isamplerCubeArray
641 TYPE_INVALID, // usampler1D
642 TYPE_INVALID, // usampler2D
643 TYPE_INVALID, // usamplerCube
644 TYPE_INVALID, // usampler2DArray
645 TYPE_INVALID, // usampler3D
646 TYPE_INVALID, // usamplerCubeArray
647 TYPE_INVALID, // sampler2DMS
648 TYPE_INVALID, // isampler2DMS
649 TYPE_INVALID, // usampler2DMS
650 TYPE_INVALID, // image2D
651 TYPE_INVALID, // imageCube
652 TYPE_INVALID, // image2DArray
653 TYPE_INVALID, // image3D
654 TYPE_INVALID, // imageCubeArray
655 TYPE_INVALID, // iimage2D
656 TYPE_INVALID, // iimageCube
657 TYPE_INVALID, // iimage2DArray
658 TYPE_INVALID, // iimage3D
659 TYPE_INVALID, // iimageCubeArray
660 TYPE_INVALID, // uimage2D
661 TYPE_INVALID, // uimageCube
662 TYPE_INVALID, // uimage2DArray
663 TYPE_INVALID, // uimage3D
664 TYPE_INVALID, // uimageCubeArray
665 TYPE_INVALID, // atomic_uint
666 TYPE_INVALID, // samplerBuffer
667 TYPE_INVALID, // isamplerBuffer
668 TYPE_INVALID, // usamplerBuffer
669 TYPE_INVALID, // sampler2DMSArray
670 TYPE_INVALID, // isampler2DMSArray
671 TYPE_INVALID, // usampler2DMSArray
672 TYPE_INVALID, // imageBuffer
673 TYPE_INVALID, // iimageBuffer
674 TYPE_INVALID, // uimageBuffer
677 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_doubleTypes) == TYPE_LAST);
678 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_doubleTypes)));
679 return s_doubleTypes[(int)dataType];
682 DataType getDataTypeVector (DataType scalarType, int size)
684 DE_ASSERT(deInRange32(size, 1, 4));
692 return (DataType)((int)scalarType + size - 1);
698 DataType getDataTypeFloatVec (int vecSize)
700 return getDataTypeVector(TYPE_FLOAT, vecSize);
703 DataType getDataTypeIntVec (int vecSize)
705 return getDataTypeVector(TYPE_INT, vecSize);
708 DataType getDataTypeUintVec (int vecSize)
710 return getDataTypeVector(TYPE_UINT, vecSize);
713 DataType getDataTypeBoolVec (int vecSize)
715 return getDataTypeVector(TYPE_BOOL, vecSize);
718 DataType getDataTypeMatrix (int numCols, int numRows)
720 DE_ASSERT(de::inRange(numCols, 2, 4) && de::inRange(numRows, 2, 4));
721 return (DataType)((int)TYPE_FLOAT_MAT2 + (numCols-2)*3 + (numRows-2));
724 int getDataTypeMatrixNumRows (DataType dataType)
728 case TYPE_FLOAT_MAT2: return 2;
729 case TYPE_FLOAT_MAT2X3: return 3;
730 case TYPE_FLOAT_MAT2X4: return 4;
731 case TYPE_FLOAT_MAT3X2: return 2;
732 case TYPE_FLOAT_MAT3: return 3;
733 case TYPE_FLOAT_MAT3X4: return 4;
734 case TYPE_FLOAT_MAT4X2: return 2;
735 case TYPE_FLOAT_MAT4X3: return 3;
736 case TYPE_FLOAT_MAT4: return 4;
737 case TYPE_DOUBLE_MAT2: return 2;
738 case TYPE_DOUBLE_MAT2X3: return 3;
739 case TYPE_DOUBLE_MAT2X4: return 4;
740 case TYPE_DOUBLE_MAT3X2: return 2;
741 case TYPE_DOUBLE_MAT3: return 3;
742 case TYPE_DOUBLE_MAT3X4: return 4;
743 case TYPE_DOUBLE_MAT4X2: return 2;
744 case TYPE_DOUBLE_MAT4X3: return 3;
745 case TYPE_DOUBLE_MAT4: return 4;
752 int getDataTypeMatrixNumColumns (DataType dataType)
756 case TYPE_FLOAT_MAT2: return 2;
757 case TYPE_FLOAT_MAT2X3: return 2;
758 case TYPE_FLOAT_MAT2X4: return 2;
759 case TYPE_FLOAT_MAT3X2: return 3;
760 case TYPE_FLOAT_MAT3: return 3;
761 case TYPE_FLOAT_MAT3X4: return 3;
762 case TYPE_FLOAT_MAT4X2: return 4;
763 case TYPE_FLOAT_MAT4X3: return 4;
764 case TYPE_FLOAT_MAT4: return 4;
765 case TYPE_DOUBLE_MAT2: return 2;
766 case TYPE_DOUBLE_MAT2X3: return 2;
767 case TYPE_DOUBLE_MAT2X4: return 2;
768 case TYPE_DOUBLE_MAT3X2: return 3;
769 case TYPE_DOUBLE_MAT3: return 3;
770 case TYPE_DOUBLE_MAT3X4: return 3;
771 case TYPE_DOUBLE_MAT4X2: return 4;
772 case TYPE_DOUBLE_MAT4X3: return 4;
773 case TYPE_DOUBLE_MAT4: return 4;
780 int getDataTypeNumLocations (DataType dataType)
782 if (isDataTypeScalarOrVector(dataType))
784 else if (isDataTypeMatrix(dataType))
785 return getDataTypeMatrixNumColumns(dataType);
787 DE_FATAL("Illegal datatype.");
791 int getDataTypeNumComponents (DataType dataType)
793 if (isDataTypeScalarOrVector(dataType))
794 return getDataTypeScalarSize(dataType);
795 else if (isDataTypeMatrix(dataType))
796 return getDataTypeMatrixNumRows(dataType);
798 DE_FATAL("Illegal datatype.");
802 DataType getDataTypeFromGLType (deUint32 glType)
806 case GL_FLOAT: return TYPE_FLOAT;
807 case GL_FLOAT_VEC2: return TYPE_FLOAT_VEC2;
808 case GL_FLOAT_VEC3: return TYPE_FLOAT_VEC3;
809 case GL_FLOAT_VEC4: return TYPE_FLOAT_VEC4;
811 case GL_FLOAT_MAT2: return TYPE_FLOAT_MAT2;
812 case GL_FLOAT_MAT2x3: return TYPE_FLOAT_MAT2X3;
813 case GL_FLOAT_MAT2x4: return TYPE_FLOAT_MAT2X4;
815 case GL_FLOAT_MAT3x2: return TYPE_FLOAT_MAT3X2;
816 case GL_FLOAT_MAT3: return TYPE_FLOAT_MAT3;
817 case GL_FLOAT_MAT3x4: return TYPE_FLOAT_MAT3X4;
819 case GL_FLOAT_MAT4x2: return TYPE_FLOAT_MAT4X2;
820 case GL_FLOAT_MAT4x3: return TYPE_FLOAT_MAT4X3;
821 case GL_FLOAT_MAT4: return TYPE_FLOAT_MAT4;
823 case GL_DOUBLE: return TYPE_DOUBLE;
824 case GL_DOUBLE_VEC2: return TYPE_DOUBLE_VEC2;
825 case GL_DOUBLE_VEC3: return TYPE_DOUBLE_VEC3;
826 case GL_DOUBLE_VEC4: return TYPE_DOUBLE_VEC4;
828 case GL_DOUBLE_MAT2: return TYPE_DOUBLE_MAT2;
829 case GL_DOUBLE_MAT2x3: return TYPE_DOUBLE_MAT2X3;
830 case GL_DOUBLE_MAT2x4: return TYPE_DOUBLE_MAT2X4;
832 case GL_DOUBLE_MAT3x2: return TYPE_DOUBLE_MAT3X2;
833 case GL_DOUBLE_MAT3: return TYPE_DOUBLE_MAT3;
834 case GL_DOUBLE_MAT3x4: return TYPE_DOUBLE_MAT3X4;
836 case GL_DOUBLE_MAT4x2: return TYPE_DOUBLE_MAT4X2;
837 case GL_DOUBLE_MAT4x3: return TYPE_DOUBLE_MAT4X3;
838 case GL_DOUBLE_MAT4: return TYPE_DOUBLE_MAT4;
840 case GL_INT: return TYPE_INT;
841 case GL_INT_VEC2: return TYPE_INT_VEC2;
842 case GL_INT_VEC3: return TYPE_INT_VEC3;
843 case GL_INT_VEC4: return TYPE_INT_VEC4;
845 case GL_UNSIGNED_INT: return TYPE_UINT;
846 case GL_UNSIGNED_INT_VEC2: return TYPE_UINT_VEC2;
847 case GL_UNSIGNED_INT_VEC3: return TYPE_UINT_VEC3;
848 case GL_UNSIGNED_INT_VEC4: return TYPE_UINT_VEC4;
850 case GL_BOOL: return TYPE_BOOL;
851 case GL_BOOL_VEC2: return TYPE_BOOL_VEC2;
852 case GL_BOOL_VEC3: return TYPE_BOOL_VEC3;
853 case GL_BOOL_VEC4: return TYPE_BOOL_VEC4;
855 case GL_SAMPLER_1D: return TYPE_SAMPLER_1D;
856 case GL_SAMPLER_2D: return TYPE_SAMPLER_2D;
857 case GL_SAMPLER_CUBE: return TYPE_SAMPLER_CUBE;
858 case GL_SAMPLER_2D_ARRAY: return TYPE_SAMPLER_2D_ARRAY;
859 case GL_SAMPLER_3D: return TYPE_SAMPLER_3D;
860 case GL_SAMPLER_CUBE_MAP_ARRAY: return TYPE_SAMPLER_CUBE_ARRAY;
862 case GL_SAMPLER_1D_SHADOW: return TYPE_SAMPLER_1D_SHADOW;
863 case GL_SAMPLER_2D_SHADOW: return TYPE_SAMPLER_2D_SHADOW;
864 case GL_SAMPLER_CUBE_SHADOW: return TYPE_SAMPLER_CUBE_SHADOW;
865 case GL_SAMPLER_2D_ARRAY_SHADOW: return TYPE_SAMPLER_2D_ARRAY_SHADOW;
866 case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: return TYPE_SAMPLER_CUBE_ARRAY_SHADOW;
868 case GL_INT_SAMPLER_1D: return TYPE_INT_SAMPLER_1D;
869 case GL_INT_SAMPLER_2D: return TYPE_INT_SAMPLER_2D;
870 case GL_INT_SAMPLER_CUBE: return TYPE_INT_SAMPLER_CUBE;
871 case GL_INT_SAMPLER_2D_ARRAY: return TYPE_INT_SAMPLER_2D_ARRAY;
872 case GL_INT_SAMPLER_3D: return TYPE_INT_SAMPLER_3D;
873 case GL_INT_SAMPLER_CUBE_MAP_ARRAY: return TYPE_INT_SAMPLER_CUBE_ARRAY;
875 case GL_UNSIGNED_INT_SAMPLER_1D: return TYPE_UINT_SAMPLER_1D;
876 case GL_UNSIGNED_INT_SAMPLER_2D: return TYPE_UINT_SAMPLER_2D;
877 case GL_UNSIGNED_INT_SAMPLER_CUBE: return TYPE_UINT_SAMPLER_CUBE;
878 case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: return TYPE_UINT_SAMPLER_2D_ARRAY;
879 case GL_UNSIGNED_INT_SAMPLER_3D: return TYPE_UINT_SAMPLER_3D;
880 case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: return TYPE_UINT_SAMPLER_CUBE_ARRAY;
882 case GL_SAMPLER_2D_MULTISAMPLE: return TYPE_SAMPLER_2D_MULTISAMPLE;
883 case GL_INT_SAMPLER_2D_MULTISAMPLE: return TYPE_INT_SAMPLER_2D_MULTISAMPLE;
884 case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: return TYPE_UINT_SAMPLER_2D_MULTISAMPLE;
886 case GL_IMAGE_2D: return TYPE_IMAGE_2D;
887 case GL_IMAGE_CUBE: return TYPE_IMAGE_CUBE;
888 case GL_IMAGE_2D_ARRAY: return TYPE_IMAGE_2D_ARRAY;
889 case GL_IMAGE_3D: return TYPE_IMAGE_3D;
890 case GL_INT_IMAGE_2D: return TYPE_INT_IMAGE_2D;
891 case GL_INT_IMAGE_CUBE: return TYPE_INT_IMAGE_CUBE;
892 case GL_INT_IMAGE_2D_ARRAY: return TYPE_INT_IMAGE_2D_ARRAY;
893 case GL_INT_IMAGE_3D: return TYPE_INT_IMAGE_3D;
894 case GL_UNSIGNED_INT_IMAGE_2D: return TYPE_UINT_IMAGE_2D;
895 case GL_UNSIGNED_INT_IMAGE_CUBE: return TYPE_UINT_IMAGE_CUBE;
896 case GL_UNSIGNED_INT_IMAGE_2D_ARRAY: return TYPE_UINT_IMAGE_2D_ARRAY;
897 case GL_UNSIGNED_INT_IMAGE_3D: return TYPE_UINT_IMAGE_3D;
899 case GL_UNSIGNED_INT_ATOMIC_COUNTER: return TYPE_UINT_ATOMIC_COUNTER;
901 case GL_SAMPLER_BUFFER: return TYPE_SAMPLER_BUFFER;
902 case GL_INT_SAMPLER_BUFFER: return TYPE_INT_SAMPLER_BUFFER;
903 case GL_UNSIGNED_INT_SAMPLER_BUFFER: return TYPE_UINT_SAMPLER_BUFFER;
905 case GL_SAMPLER_2D_MULTISAMPLE_ARRAY: return TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY;
906 case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: return TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY;
907 case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: return TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY;
909 case GL_IMAGE_BUFFER: return TYPE_IMAGE_BUFFER;
910 case GL_INT_IMAGE_BUFFER: return TYPE_INT_IMAGE_BUFFER;
911 case GL_UNSIGNED_INT_IMAGE_BUFFER: return TYPE_UINT_IMAGE_BUFFER;