| 1 | // Copyright (C) 2022 The Qt Company Ltd. |
| 2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only |
| 3 | |
| 4 | #include "syntaxhighlighterdata.h" |
| 5 | |
| 6 | static constexpr QByteArrayView shader_arg_names[] { |
| 7 | { "gl_Position" }, |
| 8 | { "qt_MultiTexCoord0" }, |
| 9 | { "qt_Vertex" }, |
| 10 | { "qt_Matrix" }, |
| 11 | { "qt_Opacity" }, |
| 12 | { "vertCoord" }, |
| 13 | { "fragCoord" }, |
| 14 | { "texCoord" }, |
| 15 | { "fragColor" }, |
| 16 | { "iMouse" }, |
| 17 | { "iResolution" }, |
| 18 | { "iTime" }, |
| 19 | { "iFrame" }, |
| 20 | { "iSource" }, |
| 21 | { "iSourceBlur1" }, |
| 22 | { "iSourceBlur2" }, |
| 23 | { "iSourceBlur3" }, |
| 24 | { "iSourceBlur4" }, |
| 25 | { "iSourceBlur5" }, |
| 26 | { "iSourceBlur6" } |
| 27 | }; |
| 28 | |
| 29 | static constexpr QByteArrayView shader_tag_names[] { |
| 30 | { "@main" }, |
| 31 | { "@nodes" }, |
| 32 | { "@mesh" }, |
| 33 | { "@blursources" }, |
| 34 | { "@requires" } |
| 35 | }; |
| 36 | |
| 37 | // From https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.40.pdf |
| 38 | // Not including functions only available with compatibility profile |
| 39 | static constexpr QByteArrayView shader_function_names[] { |
| 40 | { "radians()" }, |
| 41 | { "degrees()" }, |
| 42 | { "sin()" }, |
| 43 | { "cos()" }, |
| 44 | { "tan()" }, |
| 45 | { "asin()" }, |
| 46 | { "acos()" }, |
| 47 | { "atan()" }, |
| 48 | { "sinh()" }, |
| 49 | { "cosh()" }, |
| 50 | { "tanh()" }, |
| 51 | { "asinh()" }, |
| 52 | { "acosh()" }, |
| 53 | { "atanh()" }, |
| 54 | { "pow()" }, |
| 55 | { "exp()" }, |
| 56 | { "log()" }, |
| 57 | { "exp2()" }, |
| 58 | { "log2()" }, |
| 59 | { "sqrt()" }, |
| 60 | { "inversesqrt()" }, |
| 61 | { "abs()" }, |
| 62 | { "sign()" }, |
| 63 | { "floor()" }, |
| 64 | { "trunc()" }, |
| 65 | { "round()" }, |
| 66 | { "roundEven()" }, |
| 67 | { "ceil()" }, |
| 68 | { "fract()" }, |
| 69 | { "mod()" }, |
| 70 | { "modf()" }, |
| 71 | { "min()" }, |
| 72 | { "max()" }, |
| 73 | { "clamp()" }, |
| 74 | { "mix()" }, |
| 75 | { "step()" }, |
| 76 | { "smoothstep()" }, |
| 77 | { "isnan()" }, |
| 78 | { "isinf()" }, |
| 79 | { "floatBitsToInt()" }, |
| 80 | { "intBitsToFloat()" }, |
| 81 | { "fma()" }, |
| 82 | { "frexp()" }, |
| 83 | { "ldexp()" }, |
| 84 | { "packUnorm2x16()" }, |
| 85 | { "packSnorm2x16()" }, |
| 86 | { "packUnorm4x8()" }, |
| 87 | { "packSnorm4x8()" }, |
| 88 | { "unpackUnorm2x16()" }, |
| 89 | { "unpackSnorm2x16()" }, |
| 90 | { "unpackUnorm4x8()" }, |
| 91 | { "unpackSnorm4x8()" }, |
| 92 | //{ "packDouble2x32()" }, // Not supported in HLSL |
| 93 | //{ "unpackDouble2x32()" }, |
| 94 | { "packHalf2x16()" }, |
| 95 | { "unpackHalf2x16()" }, |
| 96 | { "length()" }, |
| 97 | { "distance()" }, |
| 98 | { "dot()" }, |
| 99 | { "cross()" }, |
| 100 | { "normalize()" }, |
| 101 | { "faceforward()" }, |
| 102 | { "reflect()" }, |
| 103 | { "refract()" }, |
| 104 | { "matrixCompMult()" }, |
| 105 | { "outerProduct()" }, |
| 106 | { "transpose()" }, |
| 107 | { "determinant()" }, |
| 108 | { "inverse()" }, |
| 109 | { "lessThan()" }, |
| 110 | { "lessThanEqual()" }, |
| 111 | { "greaterThan()" }, |
| 112 | { "greaterThanEqual()" }, |
| 113 | { "equal()" }, |
| 114 | { "notEqual()" }, |
| 115 | { "any()" }, |
| 116 | { "all()" }, |
| 117 | { "not()" }, |
| 118 | //{ "uaddCarry()" }, // Extended arithmetic is only available from ESSL 310 |
| 119 | //{ "usubBorrow()" }, |
| 120 | //{ "umulExtended()" }, |
| 121 | //{ "imulExtended()" }, |
| 122 | { "bitfieldExtract()" }, |
| 123 | { "bitfieldInsert()" }, |
| 124 | { "bitfieldReverse()" }, |
| 125 | { "bitCount()" }, |
| 126 | { "findLSB()" }, |
| 127 | { "findMSB()" }, |
| 128 | { "textureSize()" }, |
| 129 | //{ "textureQueryLod()" }, // ImageQueryLod is only supported on MSL 2.2 and up. |
| 130 | //{ "textureQueryLevels()" }, // textureQueryLevels not supported in ES profile. |
| 131 | { "texture()" }, |
| 132 | { "textureProj()" }, |
| 133 | { "textureLod()" }, |
| 134 | { "textureOffset()" }, |
| 135 | { "texelFetch()" }, |
| 136 | { "texelFetchOffset()" }, |
| 137 | { "textureProjOffset()" }, |
| 138 | { "textureLodOffset()" }, |
| 139 | { "textureProjLod()" }, |
| 140 | { "textureProjLodOffset()" }, |
| 141 | { "textureGrad()" }, |
| 142 | { "textureGradOffset()" }, |
| 143 | { "textureProjGrad()" }, |
| 144 | { "textureProjGradOffset()" }, |
| 145 | //{ "textureGather()" }, // textureGather requires ESSL 310. |
| 146 | //{ "textureGatherOffset()" }, |
| 147 | //{ "textureGatherOffsets()" }, |
| 148 | //{ "atomicCounterIncrement()" }, // 'atomic counter types' : not allowed when using GLSL for Vulkan |
| 149 | //{ "atomicCounterDecrement()" }, |
| 150 | //{ "atomicCounter()" }, |
| 151 | //{ "atomicAdd()" }, // HLSL: interlocked targets must be groupshared or UAV elements |
| 152 | //{ "atomicMin()" }, |
| 153 | //{ "atomicMax()" }, |
| 154 | //{ "atomicAnd()" }, |
| 155 | //{ "atomicOr()" }, |
| 156 | //{ "atomicXor()" }, |
| 157 | //{ "atomicExchange()" }, |
| 158 | //{ "atomicCompSwap()" }, |
| 159 | { "dFdx()" }, |
| 160 | { "dFdy()" }, |
| 161 | { "fwidth()" } |
| 162 | //{ "interpolateAtCentroid()" }, // Pull-model interpolation requires MSL 2.3. |
| 163 | //{ "interpolateAtSample()" }, |
| 164 | //{ "interpolateAtOffset()" } |
| 165 | }; |
| 166 | |
| 167 | SyntaxHighlighterData::SyntaxHighlighterData() |
| 168 | { |
| 169 | } |
| 170 | |
| 171 | |
| 172 | QList<QByteArrayView> SyntaxHighlighterData::reservedArgumentNames() |
| 173 | { |
| 174 | return { std::begin(arr: shader_arg_names), std::end(arr: shader_arg_names) }; |
| 175 | } |
| 176 | |
| 177 | QList<QByteArrayView> SyntaxHighlighterData::reservedTagNames() |
| 178 | { |
| 179 | return { std::begin(arr: shader_tag_names), std::end(arr: shader_tag_names) }; |
| 180 | } |
| 181 | |
| 182 | QList<QByteArrayView> SyntaxHighlighterData::reservedFunctionNames() |
| 183 | { |
| 184 | return { std::begin(arr: shader_function_names), std::end(arr: shader_function_names) }; |
| 185 | } |
| 186 | |