1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES Utilities 3 * ------------------------------------------------ 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 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 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 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. 18 * 19 *//*! 20 * \file 21 * \brief Shader utilities. 22 *//*--------------------------------------------------------------------*/ 23 24 #include "gluShaderUtil.hpp" 25 #include "glwEnums.hpp" 26 #include "deArrayUtil.hpp" 27 28 namespace glu 29 { 30 31 // ShadingLanguageVersion 32 33 const char* getGLSLVersionName (GLSLVersion version) 34 { 35 static const char* s_names[] = 36 { 37 "GLSL ES 1.0", 38 "GLSL ES 3.0", 39 "GLSL ES 3.1", 40 "GLSL ES 3.2", 41 "GLSL 1.3", 42 "GLSL 1.4", 43 "GLSL 1.5", 44 "GLSL 3.3", 45 "GLSL 4.0", 46 "GLSL 4.1", 47 "GLSL 4.2", 48 "GLSL 4.3", 49 "GLSL 4.4", 50 "GLSL 4.5", 51 }; 52 53 return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_names, version); 54 } 55 56 const char* getGLSLVersionDeclaration (GLSLVersion version) 57 { 58 static const char* s_decl[] = 59 { 60 "#version 100", 61 "#version 300 es", 62 "#version 310 es", 63 "#version 320 es", 64 "#version 130", 65 "#version 140", 66 "#version 150", 67 "#version 330", 68 "#version 400", 69 "#version 410", 70 "#version 420", 71 "#version 430", 72 "#version 440", 73 "#version 450", 74 }; 75 76 return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_decl, version); 77 } 78 79 bool glslVersionUsesInOutQualifiers (GLSLVersion version) 80 { 81 return de::inRange<int>(version, GLSL_VERSION_300_ES, GLSL_VERSION_320_ES) || de::inRange<int>(version, GLSL_VERSION_330, GLSL_VERSION_430); 82 } 83 84 bool glslVersionIsES (GLSLVersion version) 85 { 86 DE_STATIC_ASSERT(GLSL_VERSION_LAST == 14); 87 DE_ASSERT(version != GLSL_VERSION_LAST); 88 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) 93 return true; 94 else 95 return false; 96 } 97 98 // \todo [2014-10-06 pyry] Export this. 99 static ApiType getMinAPIForGLSLVersion (GLSLVersion version) 100 { 101 static const ApiType s_minApi[] = 102 { 103 ApiType::es(2,0), 104 ApiType::es(3,0), 105 ApiType::es(3,1), 106 ApiType::es(3,2), 107 ApiType::core(3,0), 108 ApiType::core(3,1), 109 ApiType::core(3,2), 110 ApiType::core(3,3), 111 ApiType::core(4,0), 112 ApiType::core(4,1), 113 ApiType::core(4,2), 114 ApiType::core(4,3), 115 ApiType::core(4,4), 116 ApiType::core(4,5), 117 }; 118 119 return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_minApi, version); 120 } 121 122 bool isGLSLVersionSupported (ContextType type, GLSLVersion version) 123 { 124 return contextSupports(type, getMinAPIForGLSLVersion(version)); 125 } 126 127 GLSLVersion getContextTypeGLSLVersion (ContextType type) 128 { 129 // \note From newer to older 130 for (int version = GLSL_VERSION_LAST-1; version >= 0; version--) 131 { 132 if (isGLSLVersionSupported(type, GLSLVersion(version))) 133 return GLSLVersion(version); 134 } 135 136 DE_ASSERT(false); 137 return GLSL_VERSION_LAST; 138 } 139 140 // ShaderType 141 142 const char* getShaderTypeName (ShaderType shaderType) 143 { 144 const char* s_names[] = 145 { 146 "vertex", 147 "fragment", 148 "geometry", 149 "tess_control", 150 "tess_eval", 151 "compute", 152 }; 153 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]; 157 } 158 159 // Precision 160 161 const char* getPrecisionName (Precision precision) 162 { 163 const char* s_names[] = 164 { 165 "lowp", 166 "mediump", 167 "highp" 168 }; 169 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]; 173 } 174 175 // DataType 176 177 const char* getDataTypeName (DataType dataType) 178 { 179 const char* s_names[] = 180 { 181 "invalid", 182 "float", 183 "vec2", 184 "vec3", 185 "vec4", 186 "mat2", 187 "mat2x3", 188 "mat2x4", 189 "mat3x2", 190 "mat3", 191 "mat3x4", 192 "mat4x2", 193 "mat4x3", 194 "mat4", 195 "int", 196 "ivec2", 197 "ivec3", 198 "ivec4", 199 "uint", 200 "uvec2", 201 "uvec3", 202 "uvec4", 203 "bool", 204 "bvec2", 205 "bvec3", 206 "bvec4", 207 "sampler1D", 208 "sampler2D", 209 "samplerCube", 210 "sampler2DArray", 211 "sampler3D", 212 "samplerCubeArray", 213 "sampler1DShadow", 214 "sampler2DShadow", 215 "samplerCubeShadow", 216 "sampler2DArrayShadow", 217 "samplerCubeArrayShadow", 218 "isampler1D", 219 "isampler2D", 220 "isamplerCube", 221 "isampler2DArray", 222 "isampler3D", 223 "isamplerCubeArray", 224 "usampler1D", 225 "usampler2D", 226 "usamplerCube", 227 "usampler2DArray", 228 "usampler3D", 229 "usamplerCubeArray", 230 "sampler2DMS", 231 "isampler2DMS", 232 "usampler2DMS", 233 "image2D", 234 "imageCube", 235 "image2DArray", 236 "image3D", 237 "imageCubeArray", 238 "iimage2D", 239 "iimageCube", 240 "iimage2DArray", 241 "iimage3D", 242 "iimageCubeArray", 243 "uimage2D", 244 "uimageCube", 245 "uimage2DArray", 246 "uimage3D", 247 "uimageCubeArray", 248 "atomic_uint", 249 "samplerBuffer", 250 "isamplerBuffer", 251 "usamplerBuffer", 252 "sampler2DMSArray", 253 "isampler2DMSArray", 254 "usampler2DMSArray", 255 "imageBuffer", 256 "iimageBuffer", 257 "uimageBuffer", 258 }; 259 260 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_names) == TYPE_LAST); 261 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_names))); 262 return s_names[(int)dataType]; 263 } 264 265 int getDataTypeScalarSize (DataType dataType) 266 { 267 const int s_sizes[] = 268 { 269 -1, // invalid 270 1, // float 271 2, // vec2 272 3, // vec3 273 4, // vec4 274 4, // mat2 275 6, // mat2x3 276 8, // mat2x4 277 6, // mat3x2 278 9, // mat3 279 12, // mat3x4 280 8, // mat4x2 281 12, // mat4x3 282 16, // mat4 283 1, // int 284 2, // ivec2 285 3, // ivec3 286 4, // ivec4 287 1, // uint 288 2, // uvec2 289 3, // uvec3 290 4, // uvec4 291 1, // bool 292 2, // bvec2 293 3, // bvec3 294 4, // bvec4 295 1, // sampler1D 296 1, // sampler2D 297 1, // samplerCube 298 1, // sampler2DArray 299 1, // sampler3D 300 1, // samplerCubeArray 301 1, // sampler1DShadow 302 1, // sampler2DShadow 303 1, // samplerCubeShadow 304 1, // sampler2DArrayShadow 305 1, // samplerCubeArrayShadow 306 1, // isampler1D 307 1, // isampler2D 308 1, // isamplerCube 309 1, // isampler2DArray 310 1, // isampler3D 311 1, // isamplerCubeArray 312 1, // usampler1D 313 1, // usampler2D 314 1, // usamplerCube 315 1, // usampler2DArray 316 1, // usampler3D 317 1, // usamplerCubeArray 318 1, // sampler2DMS 319 1, // isampler2DMS 320 1, // usampler2DMS 321 1, // image2D 322 1, // imageCube 323 1, // image2DArray 324 1, // image3D 325 1, // imageCubeArray 326 1, // iimage2D 327 1, // iimageCube 328 1, // iimage2DArray 329 1, // iimage3D 330 1, // iimageCubeArray 331 1, // uimage2D 332 1, // uimageCube 333 1, // uimage2DArray 334 1, // uimage3D 335 1, // uimageCubeArray 336 1, // atomic_uint 337 1, // samplerBuffer 338 1, // isamplerBuffer 339 1, // usamplerBuffer 340 1, // sampler2DMSArray 341 1, // isampler2DMSArray 342 1, // usampler2DMSArray 343 1, // imageBuffer 344 1, // iimageBuffer 345 1, // uimageBuffer 346 }; 347 348 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_sizes) == TYPE_LAST); 349 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_sizes))); 350 return s_sizes[(int)dataType]; 351 } 352 353 DataType getDataTypeScalarType (DataType dataType) 354 { 355 const DataType s_scalarTypes[] = 356 { 357 TYPE_INVALID, // invalid 358 TYPE_FLOAT, // float 359 TYPE_FLOAT, // vec2 360 TYPE_FLOAT, // vec3 361 TYPE_FLOAT, // vec4 362 TYPE_FLOAT, // mat2 363 TYPE_FLOAT, // mat2x3 364 TYPE_FLOAT, // mat2x4 365 TYPE_FLOAT, // mat3x2 366 TYPE_FLOAT, // mat3 367 TYPE_FLOAT, // mat3x4 368 TYPE_FLOAT, // mat4x2 369 TYPE_FLOAT, // mat4x3 370 TYPE_FLOAT, // mat4 371 TYPE_INT, // int 372 TYPE_INT, // ivec2 373 TYPE_INT, // ivec3 374 TYPE_INT, // ivec4 375 TYPE_UINT, // uint 376 TYPE_UINT, // uvec2 377 TYPE_UINT, // uvec3 378 TYPE_UINT, // uvec4 379 TYPE_BOOL, // bool 380 TYPE_BOOL, // bvec2 381 TYPE_BOOL, // bvec3 382 TYPE_BOOL, // bvec4 383 TYPE_SAMPLER_1D, // sampler1D 384 TYPE_SAMPLER_2D, // sampler2D 385 TYPE_SAMPLER_CUBE, // samplerCube 386 TYPE_SAMPLER_2D_ARRAY, // sampler2DArray 387 TYPE_SAMPLER_3D, // sampler3D 388 TYPE_SAMPLER_CUBE_ARRAY, // samplerCubeArray 389 TYPE_SAMPLER_1D_SHADOW, // sampler1DShadow 390 TYPE_SAMPLER_2D_SHADOW, // sampler2DShadow 391 TYPE_SAMPLER_CUBE_SHADOW, // samplerCubeShadow 392 TYPE_SAMPLER_2D_ARRAY_SHADOW, // sampler2DArrayShadow 393 TYPE_SAMPLER_CUBE_ARRAY_SHADOW, // samplerCubeArrayShadow 394 TYPE_INT_SAMPLER_1D, // isampler1D 395 TYPE_INT_SAMPLER_2D, // isampler2D 396 TYPE_INT_SAMPLER_CUBE, // isamplerCube 397 TYPE_INT_SAMPLER_2D_ARRAY, // isampler2DArray 398 TYPE_INT_SAMPLER_3D, // isampler3D 399 TYPE_INT_SAMPLER_CUBE_ARRAY, // isamplerCubeArray 400 TYPE_UINT_SAMPLER_1D, // usampler1D 401 TYPE_UINT_SAMPLER_2D, // usampler2D 402 TYPE_UINT_SAMPLER_CUBE, // usamplerCube 403 TYPE_UINT_SAMPLER_2D_ARRAY, // usampler2DArray 404 TYPE_UINT_SAMPLER_3D, // usampler3D 405 TYPE_UINT_SAMPLER_CUBE_ARRAY, // usamplerCubeArray 406 TYPE_SAMPLER_2D_MULTISAMPLE, // sampler2DMS 407 TYPE_INT_SAMPLER_2D_MULTISAMPLE, // isampler2DMS 408 TYPE_UINT_SAMPLER_2D_MULTISAMPLE, // usampler2DMS 409 TYPE_IMAGE_2D, // image2D 410 TYPE_IMAGE_CUBE, // imageCube 411 TYPE_IMAGE_2D_ARRAY, // image2DArray 412 TYPE_IMAGE_3D, // image3D 413 TYPE_IMAGE_CUBE_ARRAY, // imageCubeArray 414 TYPE_INT_IMAGE_2D, // iimage2D 415 TYPE_INT_IMAGE_CUBE, // iimageCube 416 TYPE_INT_IMAGE_2D_ARRAY, // iimage2DArray 417 TYPE_INT_IMAGE_3D, // iimage3D 418 TYPE_INT_IMAGE_CUBE_ARRAY, // iimageCubeArray 419 TYPE_UINT_IMAGE_2D, // uimage2D 420 TYPE_UINT_IMAGE_CUBE, // uimageCube 421 TYPE_UINT_IMAGE_2D_ARRAY, // uimage2DArray 422 TYPE_UINT_IMAGE_3D, // uimage3D 423 TYPE_UINT_IMAGE_CUBE_ARRAY, // uimageCubeArray 424 TYPE_UINT_ATOMIC_COUNTER, // atomic_uint 425 TYPE_SAMPLER_BUFFER, // samplerBuffer 426 TYPE_INT_SAMPLER_BUFFER, // isamplerBuffer 427 TYPE_UINT_SAMPLER_BUFFER, // usamplerBuffer 428 TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY, // sampler2DMSArray 429 TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, // isampler2DMSArray 430 TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY, // usampler2DMSArray 431 TYPE_IMAGE_BUFFER, // imageBuffer 432 TYPE_INT_IMAGE_BUFFER, // iimageBuffer 433 TYPE_UINT_IMAGE_BUFFER, // uimageBuffer 434 }; 435 436 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_scalarTypes) == TYPE_LAST); 437 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_scalarTypes))); 438 return s_scalarTypes[(int)dataType]; 439 } 440 441 DataType getDataTypeFloatScalars (DataType dataType) 442 { 443 const DataType s_floatTypes[] = 444 { 445 TYPE_INVALID, // invalid 446 TYPE_FLOAT, // float 447 TYPE_FLOAT_VEC2, // vec2 448 TYPE_FLOAT_VEC3, // vec3 449 TYPE_FLOAT_VEC4, // vec4 450 TYPE_FLOAT_MAT2, // mat2 451 TYPE_FLOAT_MAT2X3, // mat2x3 452 TYPE_FLOAT_MAT2X4, // mat2x4 453 TYPE_FLOAT_MAT3X2, // mat3x2 454 TYPE_FLOAT_MAT3, // mat3 455 TYPE_FLOAT_MAT3X4, // mat3x4 456 TYPE_FLOAT_MAT4X2, // mat4x2 457 TYPE_FLOAT_MAT4X3, // mat4x3 458 TYPE_FLOAT_MAT4, // mat4 459 TYPE_FLOAT, // int 460 TYPE_FLOAT_VEC2, // ivec2 461 TYPE_FLOAT_VEC3, // ivec3 462 TYPE_FLOAT_VEC4, // ivec4 463 TYPE_FLOAT, // uint 464 TYPE_FLOAT_VEC2, // uvec2 465 TYPE_FLOAT_VEC3, // uvec3 466 TYPE_FLOAT_VEC4, // uvec4 467 TYPE_FLOAT, // bool 468 TYPE_FLOAT_VEC2, // bvec2 469 TYPE_FLOAT_VEC3, // bvec3 470 TYPE_FLOAT_VEC4, // bvec4 471 TYPE_INVALID, // sampler1D 472 TYPE_INVALID, // sampler2D 473 TYPE_INVALID, // samplerCube 474 TYPE_INVALID, // sampler2DArray 475 TYPE_INVALID, // sampler3D 476 TYPE_INVALID, // samplerCubeArray 477 TYPE_INVALID, // sampler1DShadow 478 TYPE_INVALID, // sampler2DShadow 479 TYPE_INVALID, // samplerCubeShadow 480 TYPE_INVALID, // sampler2DArrayShadow 481 TYPE_INVALID, // samplerCubeArrayShadow 482 TYPE_INVALID, // isampler1D 483 TYPE_INVALID, // isampler2D 484 TYPE_INVALID, // isamplerCube 485 TYPE_INVALID, // isampler2DArray 486 TYPE_INVALID, // isampler3D 487 TYPE_INVALID, // isamplerCubeArray 488 TYPE_INVALID, // usampler1D 489 TYPE_INVALID, // usampler2D 490 TYPE_INVALID, // usamplerCube 491 TYPE_INVALID, // usampler2DArray 492 TYPE_INVALID, // usampler3D 493 TYPE_INVALID, // usamplerCubeArray 494 TYPE_INVALID, // sampler2DMS 495 TYPE_INVALID, // isampler2DMS 496 TYPE_INVALID, // usampler2DMS 497 TYPE_INVALID, // image2D 498 TYPE_INVALID, // imageCube 499 TYPE_INVALID, // image2DArray 500 TYPE_INVALID, // image3D 501 TYPE_INVALID, // imageCubeArray 502 TYPE_INVALID, // iimage2D 503 TYPE_INVALID, // iimageCube 504 TYPE_INVALID, // iimage2DArray 505 TYPE_INVALID, // iimage3D 506 TYPE_INVALID, // iimageCubeArray 507 TYPE_INVALID, // uimage2D 508 TYPE_INVALID, // uimageCube 509 TYPE_INVALID, // uimage2DArray 510 TYPE_INVALID, // uimage3D 511 TYPE_INVALID, // uimageCubeArray 512 TYPE_INVALID, // atomic_uint 513 TYPE_INVALID, // samplerBuffer 514 TYPE_INVALID, // isamplerBuffer 515 TYPE_INVALID, // usamplerBuffer 516 TYPE_INVALID, // sampler2DMSArray 517 TYPE_INVALID, // isampler2DMSArray 518 TYPE_INVALID, // usampler2DMSArray 519 TYPE_INVALID, // imageBuffer 520 TYPE_INVALID, // iimageBuffer 521 TYPE_INVALID, // uimageBuffer 522 }; 523 524 DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == TYPE_LAST); 525 DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_floatTypes))); 526 return s_floatTypes[(int)dataType]; 527 } 528 529 DataType getDataTypeVector (DataType scalarType, int size) 530 { 531 DE_ASSERT(deInRange32(size, 1, 4)); 532 switch (scalarType) 533 { 534 case TYPE_FLOAT: 535 case TYPE_INT: 536 case TYPE_UINT: 537 case TYPE_BOOL: 538 return (DataType)((int)scalarType + size - 1); 539 default: 540 return TYPE_INVALID; 541 } 542 } 543 544 DataType getDataTypeFloatVec (int vecSize) 545 { 546 return getDataTypeVector(TYPE_FLOAT, vecSize); 547 } 548 549 DataType getDataTypeIntVec (int vecSize) 550 { 551 return getDataTypeVector(TYPE_INT, vecSize); 552 } 553 554 DataType getDataTypeUintVec (int vecSize) 555 { 556 return getDataTypeVector(TYPE_UINT, vecSize); 557 } 558 559 DataType getDataTypeBoolVec (int vecSize) 560 { 561 return getDataTypeVector(TYPE_BOOL, vecSize); 562 } 563 564 DataType getDataTypeMatrix (int numCols, int numRows) 565 { 566 DE_ASSERT(de::inRange(numCols, 2, 4) && de::inRange(numRows, 2, 4)); 567 return (DataType)((int)TYPE_FLOAT_MAT2 + (numCols-2)*3 + (numRows-2)); 568 } 569 570 int getDataTypeMatrixNumRows (DataType dataType) 571 { 572 switch (dataType) 573 { 574 case TYPE_FLOAT_MAT2: return 2; 575 case TYPE_FLOAT_MAT2X3: return 3; 576 case TYPE_FLOAT_MAT2X4: return 4; 577 case TYPE_FLOAT_MAT3X2: return 2; 578 case TYPE_FLOAT_MAT3: return 3; 579 case TYPE_FLOAT_MAT3X4: return 4; 580 case TYPE_FLOAT_MAT4X2: return 2; 581 case TYPE_FLOAT_MAT4X3: return 3; 582 case TYPE_FLOAT_MAT4: return 4; 583 default: 584 DE_ASSERT(false); 585 return 0; 586 } 587 } 588 589 int getDataTypeMatrixNumColumns (DataType dataType) 590 { 591 switch (dataType) 592 { 593 case TYPE_FLOAT_MAT2: return 2; 594 case TYPE_FLOAT_MAT2X3: return 2; 595 case TYPE_FLOAT_MAT2X4: return 2; 596 case TYPE_FLOAT_MAT3X2: return 3; 597 case TYPE_FLOAT_MAT3: return 3; 598 case TYPE_FLOAT_MAT3X4: return 3; 599 case TYPE_FLOAT_MAT4X2: return 4; 600 case TYPE_FLOAT_MAT4X3: return 4; 601 case TYPE_FLOAT_MAT4: return 4; 602 default: 603 DE_ASSERT(false); 604 return 0; 605 } 606 } 607 608 int getDataTypeNumLocations (DataType dataType) 609 { 610 if (isDataTypeScalarOrVector(dataType)) 611 return 1; 612 else if (isDataTypeMatrix(dataType)) 613 return getDataTypeMatrixNumColumns(dataType); 614 615 DE_FATAL("Illegal datatype."); 616 return 0; 617 } 618 619 int getDataTypeNumComponents (DataType dataType) 620 { 621 if (isDataTypeScalarOrVector(dataType)) 622 return getDataTypeScalarSize(dataType); 623 else if (isDataTypeMatrix(dataType)) 624 return getDataTypeMatrixNumRows(dataType); 625 626 DE_FATAL("Illegal datatype."); 627 return 0; 628 } 629 630 DataType getDataTypeFromGLType (deUint32 glType) 631 { 632 switch (glType) 633 { 634 case GL_FLOAT: return TYPE_FLOAT; 635 case GL_FLOAT_VEC2: return TYPE_FLOAT_VEC2; 636 case GL_FLOAT_VEC3: return TYPE_FLOAT_VEC3; 637 case GL_FLOAT_VEC4: return TYPE_FLOAT_VEC4; 638 639 case GL_FLOAT_MAT2: return TYPE_FLOAT_MAT2; 640 case GL_FLOAT_MAT2x3: return TYPE_FLOAT_MAT2X3; 641 case GL_FLOAT_MAT2x4: return TYPE_FLOAT_MAT2X4; 642 643 case GL_FLOAT_MAT3x2: return TYPE_FLOAT_MAT3X2; 644 case GL_FLOAT_MAT3: return TYPE_FLOAT_MAT3; 645 case GL_FLOAT_MAT3x4: return TYPE_FLOAT_MAT3X4; 646 647 case GL_FLOAT_MAT4x2: return TYPE_FLOAT_MAT4X2; 648 case GL_FLOAT_MAT4x3: return TYPE_FLOAT_MAT4X3; 649 case GL_FLOAT_MAT4: return TYPE_FLOAT_MAT4; 650 651 case GL_INT: return TYPE_INT; 652 case GL_INT_VEC2: return TYPE_INT_VEC2; 653 case GL_INT_VEC3: return TYPE_INT_VEC3; 654 case GL_INT_VEC4: return TYPE_INT_VEC4; 655 656 case GL_UNSIGNED_INT: return TYPE_UINT; 657 case GL_UNSIGNED_INT_VEC2: return TYPE_UINT_VEC2; 658 case GL_UNSIGNED_INT_VEC3: return TYPE_UINT_VEC3; 659 case GL_UNSIGNED_INT_VEC4: return TYPE_UINT_VEC4; 660 661 case GL_BOOL: return TYPE_BOOL; 662 case GL_BOOL_VEC2: return TYPE_BOOL_VEC2; 663 case GL_BOOL_VEC3: return TYPE_BOOL_VEC3; 664 case GL_BOOL_VEC4: return TYPE_BOOL_VEC4; 665 666 case GL_SAMPLER_1D: return TYPE_SAMPLER_1D; 667 case GL_SAMPLER_2D: return TYPE_SAMPLER_2D; 668 case GL_SAMPLER_CUBE: return TYPE_SAMPLER_CUBE; 669 case GL_SAMPLER_2D_ARRAY: return TYPE_SAMPLER_2D_ARRAY; 670 case GL_SAMPLER_3D: return TYPE_SAMPLER_3D; 671 case GL_SAMPLER_CUBE_MAP_ARRAY: return TYPE_SAMPLER_CUBE_ARRAY; 672 673 case GL_SAMPLER_1D_SHADOW: return TYPE_SAMPLER_1D_SHADOW; 674 case GL_SAMPLER_2D_SHADOW: return TYPE_SAMPLER_2D_SHADOW; 675 case GL_SAMPLER_CUBE_SHADOW: return TYPE_SAMPLER_CUBE_SHADOW; 676 case GL_SAMPLER_2D_ARRAY_SHADOW: return TYPE_SAMPLER_2D_ARRAY_SHADOW; 677 case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: return TYPE_SAMPLER_CUBE_ARRAY_SHADOW; 678 679 case GL_INT_SAMPLER_1D: return TYPE_INT_SAMPLER_1D; 680 case GL_INT_SAMPLER_2D: return TYPE_INT_SAMPLER_2D; 681 case GL_INT_SAMPLER_CUBE: return TYPE_INT_SAMPLER_CUBE; 682 case GL_INT_SAMPLER_2D_ARRAY: return TYPE_INT_SAMPLER_2D_ARRAY; 683 case GL_INT_SAMPLER_3D: return TYPE_INT_SAMPLER_3D; 684 case GL_INT_SAMPLER_CUBE_MAP_ARRAY: return TYPE_INT_SAMPLER_CUBE_ARRAY; 685 686 case GL_UNSIGNED_INT_SAMPLER_1D: return TYPE_UINT_SAMPLER_1D; 687 case GL_UNSIGNED_INT_SAMPLER_2D: return TYPE_UINT_SAMPLER_2D; 688 case GL_UNSIGNED_INT_SAMPLER_CUBE: return TYPE_UINT_SAMPLER_CUBE; 689 case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: return TYPE_UINT_SAMPLER_2D_ARRAY; 690 case GL_UNSIGNED_INT_SAMPLER_3D: return TYPE_UINT_SAMPLER_3D; 691 case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: return TYPE_UINT_SAMPLER_CUBE_ARRAY; 692 693 case GL_SAMPLER_2D_MULTISAMPLE: return TYPE_SAMPLER_2D_MULTISAMPLE; 694 case GL_INT_SAMPLER_2D_MULTISAMPLE: return TYPE_INT_SAMPLER_2D_MULTISAMPLE; 695 case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: return TYPE_UINT_SAMPLER_2D_MULTISAMPLE; 696 697 case GL_IMAGE_2D: return TYPE_IMAGE_2D; 698 case GL_IMAGE_CUBE: return TYPE_IMAGE_CUBE; 699 case GL_IMAGE_2D_ARRAY: return TYPE_IMAGE_2D_ARRAY; 700 case GL_IMAGE_3D: return TYPE_IMAGE_3D; 701 case GL_INT_IMAGE_2D: return TYPE_INT_IMAGE_2D; 702 case GL_INT_IMAGE_CUBE: return TYPE_INT_IMAGE_CUBE; 703 case GL_INT_IMAGE_2D_ARRAY: return TYPE_INT_IMAGE_2D_ARRAY; 704 case GL_INT_IMAGE_3D: return TYPE_INT_IMAGE_3D; 705 case GL_UNSIGNED_INT_IMAGE_2D: return TYPE_UINT_IMAGE_2D; 706 case GL_UNSIGNED_INT_IMAGE_CUBE: return TYPE_UINT_IMAGE_CUBE; 707 case GL_UNSIGNED_INT_IMAGE_2D_ARRAY: return TYPE_UINT_IMAGE_2D_ARRAY; 708 case GL_UNSIGNED_INT_IMAGE_3D: return TYPE_UINT_IMAGE_3D; 709 710 case GL_UNSIGNED_INT_ATOMIC_COUNTER: return TYPE_UINT_ATOMIC_COUNTER; 711 712 case GL_SAMPLER_BUFFER: return TYPE_SAMPLER_BUFFER; 713 case GL_INT_SAMPLER_BUFFER: return TYPE_INT_SAMPLER_BUFFER; 714 case GL_UNSIGNED_INT_SAMPLER_BUFFER: return TYPE_UINT_SAMPLER_BUFFER; 715 716 case GL_SAMPLER_2D_MULTISAMPLE_ARRAY: return TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY; 717 case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: return TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY; 718 case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: return TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY; 719 720 case GL_IMAGE_BUFFER: return TYPE_IMAGE_BUFFER; 721 case GL_INT_IMAGE_BUFFER: return TYPE_INT_IMAGE_BUFFER; 722 case GL_UNSIGNED_INT_IMAGE_BUFFER: return TYPE_UINT_IMAGE_BUFFER; 723 724 default: 725 return TYPE_LAST; 726 } 727 } 728 729 } // glu 730