// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "glsllexer.h" #include "glslparser.h" using namespace GLSL; static inline int classify2(const char *s) { if (s[0] == 'd') { if (s[1] == 'o') { return Parser::T_DO; } } else if (s[0] == 'i') { if (s[1] == 'f') { return Parser::T_IF; } else if (s[1] == 'n') { return Parser::T_IN; } } return Parser::T_IDENTIFIER; } static inline int classify3(const char *s) { if (s[0] == 'f') { if (s[1] == 'o') { if (s[2] == 'r') { return Parser::T_FOR; } } } else if (s[0] == 'i') { if (s[1] == 'n') { if (s[2] == 't') { return Parser::T_INT; } } } else if (s[0] == 'o') { if (s[1] == 'u') { if (s[2] == 't') { return Parser::T_OUT; } } } return Parser::T_IDENTIFIER; } static inline int classify4(const char *s) { if (s[0] == 'b') { if (s[1] == 'o') { if (s[2] == 'o') { if (s[3] == 'l') { return Parser::T_BOOL; } } } } else if (s[0] == 'c') { if (s[1] == 'a') { if (s[2] == 's') { if (s[3] == 'e') { return Parser::T_CASE | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[0] == 'e') { if (s[1] == 'l') { if (s[2] == 's') { if (s[3] == 'e') { return Parser::T_ELSE; } } } } else if (s[0] == 'f') { if (s[1] == 'l') { if (s[2] == 'a') { if (s[3] == 't') { return Parser::T_FLAT | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[0] == 'l') { if (s[1] == 'o') { if (s[2] == 'w') { if (s[3] == 'p') { return Parser::T_LOWP | Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[0] == 'm') { if (s[1] == 'a') { if (s[2] == 't') { if (s[3] == '2') { return Parser::T_MAT2; } else if (s[3] == '3') { return Parser::T_MAT3; } else if (s[3] == '4') { return Parser::T_MAT4; } } } } else if (s[0] == 't') { if (s[1] == 'r') { if (s[2] == 'u') { if (s[3] == 'e') { return Parser::T_TRUE; } } } } else if (s[0] == 'u') { if (s[1] == 'i') { if (s[2] == 'n') { if (s[3] == 't') { return Parser::T_UINT | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[0] == 'v') { if (s[1] == 'e') { if (s[2] == 'c') { if (s[3] == '2') { return Parser::T_VEC2; } else if (s[3] == '3') { return Parser::T_VEC3; } else if (s[3] == '4') { return Parser::T_VEC4; } } } else if (s[1] == 'o') { if (s[2] == 'i') { if (s[3] == 'd') { return Parser::T_VOID; } } } } return Parser::T_IDENTIFIER; } static inline int classify5(const char *s) { if (s[0] == 'b') { if (s[1] == 'r') { if (s[2] == 'e') { if (s[3] == 'a') { if (s[4] == 'k') { return Parser::T_BREAK; } } } } else if (s[1] == 'v') { if (s[2] == 'e') { if (s[3] == 'c') { if (s[4] == '2') { return Parser::T_BVEC2; } else if (s[4] == '3') { return Parser::T_BVEC3; } else if (s[4] == '4') { return Parser::T_BVEC4; } } } } } else if (s[0] == 'c') { if (s[1] == 'o') { if (s[2] == 'n') { if (s[3] == 's') { if (s[4] == 't') { return Parser::T_CONST; } } } } } else if (s[0] == 'd') { if (s[1] == 'm') { if (s[2] == 'a') { if (s[3] == 't') { if (s[4] == '2') { return Parser::T_DMAT2 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[4] == '3') { return Parser::T_DMAT3 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[4] == '4') { return Parser::T_DMAT4 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[1] == 'v') { if (s[2] == 'e') { if (s[3] == 'c') { if (s[4] == '2') { return Parser::T_DVEC2 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[4] == '3') { return Parser::T_DVEC3 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[4] == '4') { return Parser::T_DVEC4 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } else if (s[0] == 'f') { if (s[1] == 'a') { if (s[2] == 'l') { if (s[3] == 's') { if (s[4] == 'e') { return Parser::T_FALSE; } } } } else if (s[1] == 'l') { if (s[2] == 'o') { if (s[3] == 'a') { if (s[4] == 't') { return Parser::T_FLOAT; } } } } } else if (s[0] == 'h') { if (s[1] == 'i') { if (s[2] == 'g') { if (s[3] == 'h') { if (s[4] == 'p') { return Parser::T_HIGHP | Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } else if (s[0] == 'i') { if (s[1] == 'n') { if (s[2] == 'o') { if (s[3] == 'u') { if (s[4] == 't') { return Parser::T_INOUT; } } } } else if (s[1] == 'v') { if (s[2] == 'e') { if (s[3] == 'c') { if (s[4] == '2') { return Parser::T_IVEC2; } else if (s[4] == '3') { return Parser::T_IVEC3; } else if (s[4] == '4') { return Parser::T_IVEC4; } } } } } else if (s[0] == 'p') { if (s[1] == 'a') { if (s[2] == 't') { if (s[3] == 'c') { if (s[4] == 'h') { return Parser::T_PATCH | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } else if (s[0] == 'u') { if (s[1] == 'v') { if (s[2] == 'e') { if (s[3] == 'c') { if (s[4] == '2') { return Parser::T_UVEC2 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[4] == '3') { return Parser::T_UVEC3 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[4] == '4') { return Parser::T_UVEC4 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } else if (s[0] == 'w') { if (s[1] == 'h') { if (s[2] == 'i') { if (s[3] == 'l') { if (s[4] == 'e') { return Parser::T_WHILE; } } } } } return Parser::T_IDENTIFIER; } static inline int classify6(const char *s) { if (s[0] == 'b') { if (s[1] == 'u') { if (s[2] == 'f') { if (s[3] == 'f') { if (s[4] == 'e') { if (s[5] == 'r') { return Parser::T_BUFFER | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[0] == 'd') { if (s[1] == 'o') { if (s[2] == 'u') { if (s[3] == 'b') { if (s[4] == 'l') { if (s[5] == 'e') { return Parser::T_DOUBLE | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[0] == 'l') { if (s[1] == 'a') { if (s[2] == 'y') { if (s[3] == 'o') { if (s[4] == 'u') { if (s[5] == 't') { return Parser::T_LAYOUT | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[0] == 'm') { if (s[1] == 'a') { if (s[2] == 't') { if (s[3] == '2') { if (s[4] == 'x') { if (s[5] == '2') { return Parser::T_MAT2X2 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[5] == '3') { return Parser::T_MAT2X3 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[5] == '4') { return Parser::T_MAT2X4 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400; } } } else if (s[3] == '3') { if (s[4] == 'x') { if (s[5] == '2') { return Parser::T_MAT3X2 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[5] == '3') { return Parser::T_MAT3X3 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[5] == '4') { return Parser::T_MAT3X4 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } else if (s[3] == '4') { if (s[4] == 'x') { if (s[5] == '2') { return Parser::T_MAT4X2 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[5] == '3') { return Parser::T_MAT4X3 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[5] == '4') { return Parser::T_MAT4X4 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[0] == 'r') { if (s[1] == 'e') { if (s[2] == 't') { if (s[3] == 'u') { if (s[4] == 'r') { if (s[5] == 'n') { return Parser::T_RETURN; } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { return Parser::T_SAMPLE | Lexer::Variant_Reserved; } } } } } else if (s[1] == 'h') { if (s[2] == 'a') { if (s[3] == 'r') { if (s[4] == 'e') { if (s[5] == 'd') { return Parser::T_SHARED | Lexer::Variant_GLSL_400; } } } } } else if (s[1] == 'm') { if (s[2] == 'o') { if (s[3] == 'o') { if (s[4] == 't') { if (s[5] == 'h') { return Parser::T_SMOOTH | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } else if (s[1] == 't') { if (s[2] == 'r') { if (s[3] == 'u') { if (s[4] == 'c') { if (s[5] == 't') { return Parser::T_STRUCT; } } } } } else if (s[1] == 'w') { if (s[2] == 'i') { if (s[3] == 't') { if (s[4] == 'c') { if (s[5] == 'h') { return Parser::T_SWITCH | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } return Parser::T_IDENTIFIER; } static inline int classify7(const char *s) { if (s[0] == 'd') { if (s[1] == 'e') { if (s[2] == 'f') { if (s[3] == 'a') { if (s[4] == 'u') { if (s[5] == 'l') { if (s[6] == 't') { return Parser::T_DEFAULT | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[1] == 'i') { if (s[2] == 's') { if (s[3] == 'c') { if (s[4] == 'a') { if (s[5] == 'r') { if (s[6] == 'd') { return Parser::T_DISCARD | Lexer::Variant_FragmentShader; } } } } } } else if (s[1] == 'm') { if (s[2] == 'a') { if (s[3] == 't') { if (s[4] == '2') { if (s[5] == 'x') { if (s[6] == '2') { return Parser::T_DMAT2X2 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[6] == '3') { return Parser::T_DMAT2X3 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[6] == '4') { return Parser::T_DMAT2X4 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } else if (s[4] == '3') { if (s[5] == 'x') { if (s[6] == '2') { return Parser::T_DMAT3X2 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[6] == '3') { return Parser::T_DMAT3X3 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[6] == '4') { return Parser::T_DMAT3X4 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } else if (s[4] == '4') { if (s[5] == 'x') { if (s[6] == '2') { return Parser::T_DMAT4X2 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[6] == '3') { return Parser::T_DMAT4X3 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } else if (s[6] == '4') { return Parser::T_DMAT4X4 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } else if (s[0] == 'i') { if (s[1] == 'm') { if (s[2] == 'a') { if (s[3] == 'g') { if (s[4] == 'e') { if (s[5] == '1') { if (s[6] == 'D') { return Parser::T_IMAGE1D | Lexer::Variant_GLSL_460; // 420 } } else if (s[5] == '2') { if (s[6] == 'D') { return Parser::T_IMAGE2D | Lexer::Variant_GLSL_460; // 420 } } else if (s[5] == '3') { if (s[6] == 'D') { return Parser::T_IMAGE3D | Lexer::Variant_GLSL_460; // 420 } } } } } } } else if (s[0] == 'm') { if (s[1] == 'e') { if (s[2] == 'd') { if (s[3] == 'i') { if (s[4] == 'u') { if (s[5] == 'm') { if (s[6] == 'p') { return Parser::T_MEDIUMP | Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } else if (s[0] == 'p') { if (s[1] == 'r') { if (s[2] == 'e') { if (s[3] == 'c') { if (s[4] == 'i') { if (s[5] == 's') { if (s[6] == 'e') { return Parser::T_PRECISE | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { return Parser::T_SAMPLER | Lexer::Variant_Vulkan; } } } } } } } else if (s[0] == 'u') { if (s[1] == 'n') { if (s[2] == 'i') { if (s[3] == 'f') { if (s[4] == 'o') { if (s[5] == 'r') { if (s[6] == 'm') { return Parser::T_UNIFORM; } } } } } } } else if (s[0] == 'v') { if (s[1] == 'a') { if (s[2] == 'r') { if (s[3] == 'y') { if (s[4] == 'i') { if (s[5] == 'n') { if (s[6] == 'g') { return Parser::T_VARYING; } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify8(const char *s) { if (s[0] == 'c') { if (s[1] == 'e') { if (s[2] == 'n') { if (s[3] == 't') { if (s[4] == 'r') { if (s[5] == 'o') { if (s[6] == 'i') { if (s[7] == 'd') { return Parser::T_CENTROID | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } else if (s[1] == 'o') { if (s[2] == 'h') { if (s[3] == 'e') { if (s[4] == 'r') { if (s[5] == 'e') { if (s[6] == 'n') { if (s[7] == 't') { return Parser::T_COHERENT | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[2] == 'n') { if (s[3] == 't') { if (s[4] == 'i') { if (s[5] == 'n') { if (s[6] == 'u') { if (s[7] == 'e') { return Parser::T_CONTINUE; } } } } } } } } else if (s[0] == 'i') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '1') { if (s[7] == 'D') { return Parser::T_IIMAGE1D | Lexer::Variant_GLSL_460; // 420 } } else if (s[6] == '2') { if (s[7] == 'D') { return Parser::T_IIMAGE2D | Lexer::Variant_GLSL_460; // 420 } } else if (s[6] == '3') { if (s[7] == 'D') { return Parser::T_IIMAGE3D | Lexer::Variant_GLSL_460; // 420 } } } } } } } } else if (s[0] == 'r') { if (s[1] == 'e') { if (s[2] == 'a') { if (s[3] == 'd') { if (s[4] == 'o') { if (s[5] == 'n') { if (s[6] == 'l') { if (s[7] == 'y') { return Parser::T_READONLY | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[2] == 's') { if (s[3] == 't') { if (s[4] == 'r') { if (s[5] == 'i') { if (s[6] == 'c') { if (s[7] == 't') { return Parser::T_RESTRICT | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } else if (s[0] == 'u') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '1') { if (s[7] == 'D') { return Parser::T_UIMAGE1D | Lexer::Variant_GLSL_460; // 420 } } else if (s[6] == '2') { if (s[7] == 'D') { return Parser::T_UIMAGE2D | Lexer::Variant_GLSL_460; // 420 } } else if (s[6] == '3') { if (s[7] == 'D') { return Parser::T_UIMAGE3D | Lexer::Variant_GLSL_460; // 420 } } } } } } } } else if (s[0] == 'v') { if (s[1] == 'o') { if (s[2] == 'l') { if (s[3] == 'a') { if (s[4] == 't') { if (s[5] == 'i') { if (s[6] == 'l') { if (s[7] == 'e') { return Parser::T_VOLATILE | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify9(const char *s) { if (s[0] == 'a') { if (s[1] == 't') { if (s[2] == 't') { if (s[3] == 'r') { if (s[4] == 'i') { if (s[5] == 'b') { if (s[6] == 'u') { if (s[7] == 't') { if (s[8] == 'e') { return Parser::T_ATTRIBUTE | Lexer::Variant_VertexShader; } } } } } } } } } else if (s[0] == 'i') { if (s[1] == 'm') { if (s[2] == 'a') { if (s[3] == 'g') { if (s[4] == 'e') { if (s[5] == '2') { if (s[6] == 'D') { if (s[7] == 'M') { if (s[8] == 'S') { return Parser::T_IMAGE2DMS | Lexer::Variant_GLSL_460; // 420 } } } } else if (s[5] == 'C') { if (s[6] == 'u') { if (s[7] == 'b') { if (s[8] == 'e') { return Parser::T_IMAGECUBE | Lexer::Variant_GLSL_460; // 420 } } } } } } } } else if (s[1] == 'n') { if (s[2] == 'v') { if (s[3] == 'a') { if (s[4] == 'r') { if (s[5] == 'i') { if (s[6] == 'a') { if (s[7] == 'n') { if (s[8] == 't') { return Parser::T_INVARIANT; } } } } } } } } } else if (s[0] == 'p') { if (s[1] == 'r') { if (s[2] == 'e') { if (s[3] == 'c') { if (s[4] == 'i') { if (s[5] == 's') { if (s[6] == 'i') { if (s[7] == 'o') { if (s[8] == 'n') { return Parser::T_PRECISION | Lexer::Variant_GLSL_ES_100; } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '1') { if (s[8] == 'D') { return Parser::T_SAMPLER1D | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } else if (s[7] == '2') { if (s[8] == 'D') { return Parser::T_SAMPLER2D | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } else if (s[7] == '3') { if (s[8] == 'D') { return Parser::T_SAMPLER3D | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } else if (s[0] == 't') { if (s[1] == 'e') { if (s[2] == 'x') { if (s[3] == 't') { if (s[4] == 'u') { if (s[5] == 'r') { if (s[6] == 'e') { if (s[7] == '1') { if (s[8] == 'D') { return Parser::T_TEXTURE1D | Lexer::Variant_Vulkan; } } else if (s[7] == '2') { if (s[8] == 'D') { return Parser::T_TEXTURE2D | Lexer::Variant_Vulkan; } } else if (s[7] == '3') { if (s[8] == 'D') { return Parser::T_TEXTURE3D | Lexer::Variant_Vulkan; } } } } } } } } } else if (s[0] == 'w') { if (s[1] == 'r') { if (s[2] == 'i') { if (s[3] == 't') { if (s[4] == 'e') { if (s[5] == 'o') { if (s[6] == 'n') { if (s[7] == 'l') { if (s[8] == 'y') { return Parser::T_WRITEONLY | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify10(const char *s) { if (s[0] == 'i') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'M') { if (s[9] == 'S') { return Parser::T_IIMAGE2DMS | Lexer::Variant_GLSL_460; // 420 } } } } else if (s[6] == 'C') { if (s[7] == 'u') { if (s[8] == 'b') { if (s[9] == 'e') { return Parser::T_IIMAGECUBE | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '1') { if (s[9] == 'D') { return Parser::T_ISAMPLER1D | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } else if (s[8] == '2') { if (s[9] == 'D') { return Parser::T_ISAMPLER2D | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } else if (s[8] == '3') { if (s[9] == 'D') { return Parser::T_ISAMPLER3D | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '1') { if (s[9] == 'D') { return Parser::T_ITEXTURE1D | Lexer::Variant_Vulkan; } } else if (s[8] == '2') { if (s[9] == 'D') { return Parser::T_ITEXTURE2D | Lexer::Variant_Vulkan; } } else if (s[8] == '3') { if (s[9] == 'D') { return Parser::T_ITEXTURE3D | Lexer::Variant_Vulkan; } } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'u') { if (s[2] == 'b') { if (s[3] == 'r') { if (s[4] == 'o') { if (s[5] == 'u') { if (s[6] == 't') { if (s[7] == 'i') { if (s[8] == 'n') { if (s[9] == 'e') { return Parser::T_SUBROUTINE | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } else if (s[0] == 'u') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'M') { if (s[9] == 'S') { return Parser::T_UIMAGE2DMS | Lexer::Variant_GLSL_460; // 420 } } } } else if (s[6] == 'C') { if (s[7] == 'u') { if (s[8] == 'b') { if (s[9] == 'e') { return Parser::T_UIMAGECUBE | Lexer::Variant_GLSL_460; //420 } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '1') { if (s[9] == 'D') { return Parser::T_USAMPLER1D | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } else if (s[8] == '2') { if (s[9] == 'D') { return Parser::T_USAMPLER2D | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } else if (s[8] == '3') { if (s[9] == 'D') { return Parser::T_USAMPLER3D | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '1') { if (s[9] == 'D') { return Parser::T_UTEXTURE1D | Lexer::Variant_Vulkan; } } else if (s[8] == '2') { if (s[9] == 'D') { return Parser::T_UTEXTURE2D | Lexer::Variant_Vulkan; } } else if (s[8] == '3') { if (s[9] == 'D') { return Parser::T_UTEXTURE3D | Lexer::Variant_Vulkan; } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify11(const char *s) { if (s[0] == 'a') { if (s[1] == 't') { if (s[2] == 'o') { if (s[3] == 'm') { if (s[4] == 'i') { if (s[5] == 'c') { if (s[6] == '_') { if (s[7] == 'u') { if (s[8] == 'i') { if (s[9] == 'n') { if (s[10] == 't') { return Parser::T_ATOMIC_UINT | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } else if (s[0] == 'i') { if (s[1] == 'm') { if (s[2] == 'a') { if (s[3] == 'g') { if (s[4] == 'e') { if (s[5] == '2') { if (s[6] == 'D') { if (s[7] == 'R') { if (s[8] == 'e') { if (s[9] == 'c') { if (s[10] == 't') { return Parser::T_IMAGE2DRECT | Lexer::Variant_GLSL_460; // 420 } } } } } } else if (s[5] == 'B') { if (s[6] == 'u') { if (s[7] == 'f') { if (s[8] == 'f') { if (s[9] == 'e') { if (s[10] == 'r') { return Parser::T_IMAGEBUFFER | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'M') { if (s[10] == 'S') { return Parser::T_SAMPLER2DMS | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[7] == 'C') { if (s[8] == 'u') { if (s[9] == 'b') { if (s[10] == 'e') { return Parser::T_SAMPLERCUBE | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } else if (s[0] == 't') { if (s[1] == 'e') { if (s[2] == 'x') { if (s[3] == 't') { if (s[4] == 'u') { if (s[5] == 'r') { if (s[6] == 'e') { if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'M') { if (s[10] == 'S') { return Parser::T_TEXTURE2DMS | Lexer::Variant_Vulkan; } } } } else if (s[7] == 'C') { if (s[8] == 'u') { if (s[9] == 'b') { if (s[10] == 'e') { return Parser::T_TEXTURECUBE | Lexer::Variant_Vulkan; } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify12(const char *s) { if (s[0] == 'i') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'R') { if (s[9] == 'e') { if (s[10] == 'c') { if (s[11] == 't') { return Parser::T_IIMAGE2DRECT | Lexer::Variant_GLSL_460; // 420 } } } } } } else if (s[6] == 'B') { if (s[7] == 'u') { if (s[8] == 'f') { if (s[9] == 'f') { if (s[10] == 'e') { if (s[11] == 'r') { return Parser::T_IIMAGEBUFFER | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } else if (s[1] == 'm') { if (s[2] == 'a') { if (s[3] == 'g') { if (s[4] == 'e') { if (s[5] == '1') { if (s[6] == 'D') { if (s[7] == 'A') { if (s[8] == 'r') { if (s[9] == 'r') { if (s[10] == 'a') { if (s[11] == 'y') { return Parser::T_IMAGE1DARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } else if (s[5] == '2') { if (s[6] == 'D') { if (s[7] == 'A') { if (s[8] == 'r') { if (s[9] == 'r') { if (s[10] == 'a') { if (s[11] == 'y') { return Parser::T_IMAGE2DARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { return Parser::T_ISAMPLER2DMS | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { return Parser::T_ISAMPLERCUBE | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { return Parser::T_ITEXTURE2DMS | Lexer::Variant_Vulkan; } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { return Parser::T_ITEXTURECUBE | Lexer::Variant_Vulkan; } } } } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'u') { if (s[2] == 'b') { if (s[3] == 'p') { if (s[4] == 'a') { if (s[5] == 's') { if (s[6] == 's') { if (s[7] == 'I') { if (s[8] == 'n') { if (s[9] == 'p') { if (s[10] == 'u') { if (s[11] == 't') { return Parser::T_SUBPASSINPUT | Lexer::Variant_Vulkan; } } } } } } } } } } } } else if (s[0] == 'u') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'R') { if (s[9] == 'e') { if (s[10] == 'c') { if (s[11] == 't') { return Parser::T_UIMAGE2DRECT | Lexer::Variant_GLSL_460; // 420 } } } } } } else if (s[6] == 'B') { if (s[7] == 'u') { if (s[8] == 'f') { if (s[9] == 'f') { if (s[10] == 'e') { if (s[11] == 'r') { return Parser::T_UIMAGEBUFFER | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { return Parser::T_USAMPLER2DMS | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { return Parser::T_USAMPLERCUBE | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } else if (s[1] =='t') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { return Parser::T_UTEXTURE2DMS | Lexer::Variant_Vulkan; } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { return Parser::T_UTEXTURECUBE | Lexer::Variant_Vulkan; } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify13(const char *s) { if (s[0] == 'i') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '1') { if (s[7] == 'D') { if (s[8] == 'A') { if (s[9] == 'r') { if (s[10] == 'r') { if (s[11] == 'a') { if (s[12] == 'y') { return Parser::T_IIMAGE1DARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } else if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'A') { if (s[9] == 'r') { if (s[10] == 'r') { if (s[11] == 'a') { if (s[12] == 'y') { return Parser::T_IIMAGE2DARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'u') { if (s[3] == 'b') { if (s[4] == 'p') { if (s[5] == 'a') { if (s[6] == 's') { if (s[7] == 's') { if (s[8] == 'I') { if (s[9] == 'n') { if (s[10] == 'p') { if (s[11] == 'u') { if (s[12] == 't') { return Parser::T_ISUBPASSINPUT | Lexer::Variant_Vulkan; } } } } } } } } } } } } } else if (s[0] == 'n') { if (s[1] == 'o') { if (s[2] == 'p') { if (s[3] == 'e') { if (s[4] == 'r') { if (s[5] == 's') { if (s[6] == 'p') { if (s[7] == 'e') { if (s[8] == 'c') { if (s[9] == 't') { if (s[10] == 'i') { if (s[11] == 'v') { if (s[12] == 'e') { return Parser::T_NOPERSPECTIVE | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'R') { if (s[10] == 'e') { if (s[11] == 'c') { if (s[12] == 't') { return Parser::T_SAMPLER2DRECT | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[7] == 'B') { if (s[8] == 'u') { if (s[9] == 'f') { if (s[10] == 'f') { if (s[11] == 'e') { if (s[12] == 'r') { return Parser::T_SAMPLERBUFFER | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[7] == 'S') { if (s[8] == 'h') { if (s[9] == 'a') { if (s[10] == 'd') { if (s[11] == 'o') { if (s[12] == 'w') { return Parser::T_SAMPLERSHADOW | Lexer::Variant_Vulkan; } } } } } } } } } } } } } else if (s[0] == 't') { if (s[1] == 'e') { if (s[2] == 'x') { if (s[3] == 't') { if (s[4] == 'u') { if (s[5] == 'r') { if (s[6] == 'e') { if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'R') { if (s[10] == 'e') { if (s[11] == 'c') { if (s[12] == 't') { return Parser::T_TEXTURE2DRECT | Lexer::Variant_Vulkan; } } } } } } else if (s[7] == 'B') { if (s[8] == 'u') { if (s[9] == 'f') { if (s[10] == 'f') { if (s[11] == 'e') { if (s[12] == 'r') { return Parser::T_TEXTUREBUFFER | Lexer::Variant_Vulkan; } } } } } } } } } } } } } else if (s[0] == 'u') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '1') { if (s[7] == 'D') { if (s[8] == 'A') { if (s[9] == 'r') { if (s[10] == 'r') { if (s[11] == 'a') { if (s[12] == 'y') { return Parser::T_UIMAGE1DARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } else if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'A') { if (s[9] == 'r') { if (s[10] == 'r') { if (s[11] == 'a') { if (s[12] == 'y') { return Parser::T_UIMAGE2DARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'u') { if (s[3] == 'b') { if (s[4] == 'p') { if (s[5] == 'a') { if (s[6] == 's') { if (s[7] == 's') { if (s[8] == 'I') { if (s[9] == 'n') { if (s[10] == 'p') { if (s[11] == 'u') { if (s[12] == 't') { return Parser::T_USUBPASSINPUT | Lexer::Variant_Vulkan; } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify14(const char *s) { if (s[0] == 'i') { if (s[1] == 'm') { if (s[2] == 'a') { if (s[3] == 'g') { if (s[4] == 'e') { if (s[5] == '2') { if (s[6] == 'D') { if (s[7] == 'M') { if (s[8] == 'S') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { return Parser::T_IMAGE2DMSARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } else if (s[5] == 'C') { if (s[6] == 'u') { if (s[7] == 'b') { if (s[8] == 'e') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { return Parser::T_IMAGECUBEARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'R') { if (s[11] == 'e') { if (s[12] == 'c') { if (s[13] == 't') { return Parser::T_ISAMPLER2DRECT | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[8] == 'B') { if (s[9] == 'u') { if (s[10] == 'f') { if (s[11] == 'f') { if (s[12] == 'e') { if (s[13] == 'r') { return Parser::T_ISAMPLERBUFFER | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'R') { if (s[11] == 'e') { if (s[12] == 'c') { if (s[13] == 't') { return Parser::T_ITEXTURE2DRECT | Lexer::Variant_Vulkan; } } } } } } else if (s[8] == 'B') { if (s[9] == 'u') { if (s[10] == 'f') { if (s[11] == 'f') { if (s[12] == 'e') { if (s[13] == 'r') { return Parser::T_ITEXTUREBUFFER | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '1') { if (s[8] == 'D') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { return Parser::T_SAMPLER1DARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } else if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { return Parser::T_SAMPLER2DARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } else if (s[1] == 'u') { if (s[2] == 'b') { if (s[3] == 'p') { if (s[4] == 'a') { if (s[5] == 's') { if (s[6] == 's') { if (s[7] == 'I') { if (s[8] == 'n') { if (s[9] == 'p') { if (s[10] == 'u') { if (s[11] == 't') { if (s[12] == 'M') { if (s[13] == 'S') { return Parser::T_SUBPASSINPUTMS | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } else if (s[0] == 't') { if (s[1] == 'e') { if (s[2] == 'x') { if (s[3] == 't') { if (s[4] == 'u') { if (s[5] == 'r') { if (s[6] == 'e') { if (s[7] == '1') { if (s[8] == 'D') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { return Parser::T_TEXTURE1DARRAY | Lexer::Variant_Vulkan; } } } } } } } else if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { return Parser::T_TEXTURE2DARRAY | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } else if (s[0] == 'u') { if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'R') { if (s[11] == 'e') { if (s[12] == 'c') { if (s[13] == 't') { return Parser::T_USAMPLER2DRECT | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } else if (s[8] == 'B') { if (s[9] == 'u') { if (s[10] == 'f') { if (s[11] == 'f') { if (s[12] == 'e') { if (s[13] == 'r') { return Parser::T_USAMPLERBUFFER | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'R') { if (s[11] == 'e') { if (s[12] == 'c') { if (s[13] == 't') { return Parser::T_UTEXTURE2DRECT | Lexer::Variant_Vulkan; } } } } } } else if (s[8] == 'B') { if (s[9] == 'u') { if (s[10] == 'f') { if (s[11] == 'f') { if (s[12] == 'e') { if (s[13] == 'r') { return Parser::T_UTEXTUREBUFFER | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify15(const char *s) { if (s[0] == 'i') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'M') { if (s[9] == 'S') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_IIMAGE2DMSARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } else if (s[6] == 'C') { if (s[7] == 'u') { if (s[8] == 'b') { if (s[9] == 'e') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_IIMAGECUBEARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '1') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_ISAMPLER1DARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } else if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_ISAMPLER2DARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '1') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_ITEXTURE1DARRAY | Lexer::Variant_Vulkan; } } } } } } } else if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_ITEXTURE2DARRAY | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '1') { if (s[8] == 'D') { if (s[9] == 'S') { if (s[10] == 'h') { if (s[11] == 'a') { if (s[12] == 'd') { if (s[13] == 'o') { if (s[14] == 'w') { return Parser::T_SAMPLER1DSHADOW | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } else if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'S') { if (s[10] == 'h') { if (s[11] == 'a') { if (s[12] == 'd') { if (s[13] == 'o') { if (s[14] == 'w') { return Parser::T_SAMPLER2DSHADOW | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } else if (s[1] == 'u') { if (s[2] == 'b') { if (s[3] == 'p') { if (s[4] == 'a') { if (s[5] == 's') { if (s[6] == 's') { if (s[7] == 'I') { if (s[8] == 'n') { if (s[9] == 'p') { if (s[10] == 'u') { if (s[11] == 't') { if (s[12] == 'M') { if (s[13] == 'S') { return Parser::T_ISUBPASSINPUTMS | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } else if (s[0] == 'u') { if (s[1] == 'i') { if (s[2] == 'm') { if (s[3] == 'a') { if (s[4] == 'g') { if (s[5] == 'e') { if (s[6] == '2') { if (s[7] == 'D') { if (s[8] == 'M') { if (s[9] == 'S') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_UIMAGE2DMSARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } else if (s[6] == 'C') { if (s[7] == 'u') { if (s[8] == 'b') { if (s[9] == 'e') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_UIMAGECUBEARRAY | Lexer::Variant_GLSL_460; // 420 } } } } } } } } } } } } } } else if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '1') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_USAMPLER1DARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } else if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_USAMPLER2DARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } else if (s[2] == 'u') { if (s[3] == 'b') { if (s[4] == 'p') { if (s[5] == 'a') { if (s[6] == 's') { if (s[7] == 's') { if (s[8] == 'I') { if (s[9] == 'n') { if (s[10] == 'p') { if (s[11] == 'u') { if (s[12] == 't') { if (s[13] == 'M') { if (s[14] == 'S') { return Parser::T_USUBPASSINPUTMS | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '1') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_UTEXTURE1DARRAY | Lexer::Variant_Vulkan; } } } } } } } else if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'A') { if (s[11] == 'r') { if (s[12] == 'r') { if (s[13] == 'a') { if (s[14] == 'y') { return Parser::T_UTEXTURE2DARRAY | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify16(const char *s) { if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'M') { if (s[10] == 'S') { if (s[11] == 'A') { if (s[12] == 'r') { if (s[13] == 'r') { if (s[14] == 'a') { if (s[15] == 'y') { return Parser::T_SAMPLER2DMSARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } else if (s[7] == 'C') { if (s[8] == 'u') { if (s[9] == 'b') { if (s[10] == 'e') { if (s[11] == 'A') { if (s[12] == 'r') { if (s[13] == 'r') { if (s[14] == 'a') { if (s[15] == 'y') { return Parser::T_SAMPLERCUBEARRAY | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } } } else if (s[0] == 't') { if (s[1] == 'e') { if (s[2] == 'x') { if (s[3] == 't') { if (s[4] == 'u') { if (s[5] == 'r') { if (s[6] == 'e') { if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'M') { if (s[10] == 'S') { if (s[11] == 'A') { if (s[12] == 'r') { if (s[13] == 'r') { if (s[14] == 'a') { if (s[15] == 'y') { return Parser::T_TEXTURE2DMSARRAY | Lexer::Variant_Vulkan; } } } } } } } } } else if (s[7] == 'C') { if (s[8] == 'u') { if (s[9] == 'b') { if (s[10] == 'e') { if (s[11] == 'A') { if (s[12] == 'r') { if (s[13] == 'r') { if (s[14] == 'a') { if (s[15] == 'y') { return Parser::T_TEXTURECUBEARRAY | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify17(const char *s) { if (s[0] == 'i') { if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_ISAMPLER2DMSARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_ISAMPLERCUBEARRAY | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_ITEXTURE2DMSARRAY | Lexer::Variant_Vulkan; } } } } } } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_ITEXTURECUBEARRAY | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } } } } else if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == 'C') { if (s[8] == 'u') { if (s[9] == 'b') { if (s[10] == 'e') { if (s[11] == 'S') { if (s[12] == 'h') { if (s[13] == 'a') { if (s[14] == 'd') { if (s[15] == 'o') { if (s[16] == 'w') { return Parser::T_SAMPLERCUBESHADOW | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } } } } else if (s[0] == 'u') { if (s[1] == 's') { if (s[2] == 'a') { if (s[3] == 'm') { if (s[4] == 'p') { if (s[5] == 'l') { if (s[6] == 'e') { if (s[7] == 'r') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_USAMPLER2DMSARRAY | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_USAMPLERCUBEARRAY | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } } } else if (s[1] == 't') { if (s[2] == 'e') { if (s[3] == 'x') { if (s[4] == 't') { if (s[5] == 'u') { if (s[6] == 'r') { if (s[7] == 'e') { if (s[8] == '2') { if (s[9] == 'D') { if (s[10] == 'M') { if (s[11] == 'S') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_UTEXTURE2DMSARRAY | Lexer::Variant_Vulkan; } } } } } } } } } else if (s[8] == 'C') { if (s[9] == 'u') { if (s[10] == 'b') { if (s[11] == 'e') { if (s[12] == 'A') { if (s[13] == 'r') { if (s[14] == 'r') { if (s[15] == 'a') { if (s[16] == 'y') { return Parser::T_UTEXTURECUBEARRAY | Lexer::Variant_Vulkan; } } } } } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify19(const char *s) { if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'R') { if (s[10] == 'e') { if (s[11] == 'c') { if (s[12] == 't') { if (s[13] == 'S') { if (s[14] == 'h') { if (s[15] == 'a') { if (s[16] == 'd') { if (s[17] == 'o') { if (s[18] == 'w') { return Parser::T_SAMPLER2DRECTSHADOW | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify20(const char *s) { if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == '1') { if (s[8] == 'D') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { if (s[14] == 'S') { if (s[15] == 'h') { if (s[16] == 'a') { if (s[17] == 'd') { if (s[18] == 'o') { if (s[19] == 'w') { return Parser::T_SAMPLER1DARRAYSHADOW | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } else if (s[7] == '2') { if (s[8] == 'D') { if (s[9] == 'A') { if (s[10] == 'r') { if (s[11] == 'r') { if (s[12] == 'a') { if (s[13] == 'y') { if (s[14] == 'S') { if (s[15] == 'h') { if (s[16] == 'a') { if (s[17] == 'd') { if (s[18] == 'o') { if (s[19] == 'w') { return Parser::T_SAMPLER2DARRAYSHADOW | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } static inline int classify22(const char *s) { if (s[0] == 's') { if (s[1] == 'a') { if (s[2] == 'm') { if (s[3] == 'p') { if (s[4] == 'l') { if (s[5] == 'e') { if (s[6] == 'r') { if (s[7] == 'C') { if (s[8] == 'u') { if (s[9] == 'b') { if (s[10] == 'e') { if (s[11] == 'A') { if (s[12] == 'r') { if (s[13] == 'r') { if (s[14] == 'a') { if (s[15] == 'y') { if (s[16] == 'S') { if (s[17] == 'h') { if (s[18] == 'a') { if (s[19] == 'd') { if (s[20] == 'o') { if (s[21] == 'w') { return Parser::T_SAMPLERCUBEARRAYSHADOW | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460; } } } } } } } } } } } } } } } } } } } } } } return Parser::T_IDENTIFIER; } int Lexer::classify(const char *s, int n) { switch (n) { case 2: return classify2(s); case 3: return classify3(s); case 4: return classify4(s); case 5: return classify5(s); case 6: return classify6(s); case 7: return classify7(s); case 8: return classify8(s); case 9: return classify9(s); case 10: return classify10(s); case 11: return classify11(s); case 12: return classify12(s); case 13: return classify13(s); case 14: return classify14(s); case 15: return classify15(s); case 16: return classify16(s); case 17: return classify17(s); case 19: return classify19(s); case 20: return classify20(s); case 22: return classify22(s); default: return Parser::T_IDENTIFIER; } // switch } QStringList Lexer::keywords(int variant) { QStringList list; list += QLatin1String("do"); list += QLatin1String("if"); list += QLatin1String("in"); list += QLatin1String("for"); list += QLatin1String("int"); list += QLatin1String("out"); list += QLatin1String("bool"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("case"); list += QLatin1String("else"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("flat"); if (variant & (Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("lowp"); list += QLatin1String("mat2"); list += QLatin1String("mat3"); list += QLatin1String("mat4"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("uint"); list += QLatin1String("vec2"); list += QLatin1String("vec3"); list += QLatin1String("vec4"); list += QLatin1String("void"); list += QLatin1String("true"); list += QLatin1String("break"); list += QLatin1String("bvec2"); list += QLatin1String("bvec3"); list += QLatin1String("bvec4"); list += QLatin1String("const"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat2"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat3"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat4"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dvec2"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dvec3"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dvec4"); list += QLatin1String("float"); if (variant & (Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("highp"); list += QLatin1String("inout"); list += QLatin1String("ivec2"); list += QLatin1String("ivec3"); list += QLatin1String("ivec4"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("patch"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("uvec2"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("uvec3"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("uvec4"); list += QLatin1String("while"); list += QLatin1String("false"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("double"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("layout"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat2x2"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat2x3"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat2x4"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat3x2"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat3x3"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat3x4"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat4x2"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat4x3"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mat4x4"); list += QLatin1String("return"); if (variant & (Lexer::Variant_Reserved)) list += QLatin1String("sample"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("smooth"); list += QLatin1String("struct"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("switch"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("default"); if (variant & (Lexer::Variant_FragmentShader)) list += QLatin1String("discard"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat2x2"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat2x3"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat2x4"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat3x2"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat3x3"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat3x4"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat4x2"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat4x3"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("dmat4x4"); if (variant & (Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("mediump"); list += QLatin1String("uniform"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("buffer"); list += QLatin1String("varying"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("centroid"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("coherent"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("precise"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("readonly"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("restrict"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("shared"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("volatile"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("writeonly"); list += QLatin1String("continue"); if (variant & (Lexer::Variant_VertexShader)) list += QLatin1String("attribute"); list += QLatin1String("invariant"); if (variant & (Lexer::Variant_GLSL_ES_100 | Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("precision"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler1D"); list += QLatin1String("sampler2D"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler3D"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler1D"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler2D"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler3D"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("subroutine"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler1D"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler2D"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler3D"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler2DMS"); list += QLatin1String("samplerCube"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler2DMS"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isamplerCube"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler2DMS"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usamplerCube"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("noperspective"); list += QLatin1String("sampler2DRect"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("samplerBuffer"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler2DRect"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isamplerBuffer"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler1DArray"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler2DArray"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler2DRect"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usamplerBuffer"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler1DArray"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler2DArray"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler1DShadow"); if (variant & (Lexer::Variant_GLSL_120 | Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler2DShadow"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler1DArray"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler2DArray"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler2DMSArray"); if (variant & (Lexer::Variant_GLSL_400)) list += QLatin1String("samplerCubeArray"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("isampler2DMSArray"); if (variant & (Lexer::Variant_GLSL_400)) list += QLatin1String("isamplerCubeArray"); if (variant & (Lexer::Variant_GLSL_400)) list += QLatin1String("samplerCubeShadow"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usampler2DMSarray"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("usamplerCubeArray"); list += QLatin1String("sampler2DRectShadow"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler1DArrayShadow"); if (variant & (Lexer::Variant_GLSL_150 | Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("sampler2DArrayShadow"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("samplerCubeArrayShadow"); if (variant & (Lexer::Variant_GLSL_400 | Lexer::Variant_GLSL_460)) list += QLatin1String("atomic_uint"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage1D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage1DArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage2D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage2DArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage2DMS"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage2DMSArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage2DRect"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimage3D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimageBuffer"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimageCube"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("iimageCubeArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image1D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image1DArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image2D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image2DArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image2DMS"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image2DMSArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image2DRect"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("image3D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("imageBuffer"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("imageCube"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("imageCubeArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage1D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage1DArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage2D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage2DArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage2DMS"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage2DMSArray"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage2DRect"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimage3D"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimageBuffer"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimageCube"); if (variant & (Lexer::Variant_GLSL_460)) list += QLatin1String("uimageCubeArray"); // Vulkan additions if (variant & (Lexer::Variant_Vulkan)) { list += QLatin1String("isubpassInput"); list += QLatin1String("isubpassInputMS"); list += QLatin1String("itexture1D"); list += QLatin1String("itexture1DArray"); list += QLatin1String("itexture2D"); list += QLatin1String("itexture2DArray"); list += QLatin1String("itexture2DMS"); list += QLatin1String("itexture2DMSArray"); list += QLatin1String("itexture2DRect"); list += QLatin1String("itexture3D"); list += QLatin1String("itextureBuffer"); list += QLatin1String("itextureCube"); list += QLatin1String("itextureCubeArray"); list += QLatin1String("sampler"); list += QLatin1String("samplerShadow"); list += QLatin1String("subpassInput"); list += QLatin1String("subpassInputMS"); list += QLatin1String("texture1D"); list += QLatin1String("texture1DArray"); list += QLatin1String("texture2D"); list += QLatin1String("texture2DArray"); list += QLatin1String("texture2DMS"); list += QLatin1String("texture2DMSArray"); list += QLatin1String("texture2DRect"); list += QLatin1String("texture3D"); list += QLatin1String("textureBuffer"); list += QLatin1String("textureCube"); list += QLatin1String("textureCubeArray"); list += QLatin1String("usubpassInput"); list += QLatin1String("usubpassInputMS"); list += QLatin1String("utexture1D"); list += QLatin1String("utexture1DArray"); list += QLatin1String("utexture2D"); list += QLatin1String("utexture2DArray"); list += QLatin1String("utexture2DMS"); list += QLatin1String("utexture2DMSArray"); list += QLatin1String("utexture2DRect"); list += QLatin1String("utexture3D"); list += QLatin1String("utextureBuffer"); list += QLatin1String("utextureCube"); list += QLatin1String("utextureCubeArray"); } return list; }