1 STRINGIFY( 2 3 // defines built-in functions supported by SkiaSL 4 5 $genType radians($genType degrees); 6 $genType sin($genType angle); 7 $genType cos($genType angle); 8 $genType tan($genType angle); 9 $genType asin($genType x); 10 $genType acos($genType x); 11 $genType atan($genType y, $genType x); 12 $genType atan($genType y_over_x); 13 $genType sinh($genType x); 14 $genType cosh($genType x); 15 $genType tanh($genType x); 16 $genType asinh($genType x); 17 $genType acosh($genType x); 18 $genType atanh($genType x); 19 $genType pow($genType x, $genType y); 20 $genType exp($genType x); 21 $genType log($genType x); 22 $genType exp2($genType x); 23 $genType log2($genType x); 24 $genType sqrt($genType x); 25 //$genDType sqrt($genDType x); 26 $genType inversesqrt($genType x); 27 //$genDType inversesqrt($genDType x); 28 $genType abs($genType x); 29 $genIType abs($genIType x); 30 //$genDType abs($genDType x); 31 $genType sign($genType x); 32 $genIType sign($genIType x); 33 //$genDType sign($genDType x); 34 $genType floor($genType x); 35 //$genDType floor($genDType x); 36 $genType trunc($genType x); 37 //$genDType trunc($genDType x); 38 $genType round($genType x); 39 //$genDType round($genDType x); 40 $genType roundEven($genType x); 41 //$genDType roundEven($genDType x); 42 $genType ceil($genType x); 43 //$genDType ceil($genDType x); 44 $genType fract($genType x); 45 //$genDType fract($genDType x); 46 $genType mod($genType x, float y); 47 $genType mod($genType x, $genType y); 48 //$genDType mod($genDType x, double y); 49 //$genDType mod($genDType x, $genDType y); 50 $genType modf($genType x, out $genType i); 51 //$genDType modf($genDType x, out $genDType i); 52 $genType min($genType x, $genType y); 53 $genType min($genType x, float y); 54 //$genDType min($genDType x, $genDType y); 55 //$genDType min($genDType x, double y); 56 $genIType min($genIType x, $genIType y); 57 $genIType min($genIType x, int y); 58 //$genUType min($genUType x, $genUType y); 59 //$genUType min($genUType x, uint y); 60 $genType max($genType x, $genType y); 61 $genType max($genType x, float y); 62 //$genDType max($genDType x, $genDType y); 63 //$genDType max($genDType x, double y); 64 $genIType max($genIType x, $genIType y); 65 $genIType max($genIType x, int y); 66 //$genUType max($genUType x, $genUType y); 67 //$genUType max($genUType x, uint y); 68 $genType clamp($genType x, $genType minVal, $genType maxVal); 69 $genType clamp($genType x, float minVal, float maxVal); 70 //$genDType clamp($genDType x, $genDType minVal, $genDType maxVal); 71 //$genDType clamp($genDType x, double minVal, double maxVal); 72 $genIType clamp($genIType x, $genIType minVal, $genIType maxVal); 73 $genIType clamp($genIType x, int minVal, int maxVal); 74 //$genUType clamp($genUType x, $genUType minVal, $genUType maxVal); 75 //$genUType clamp($genUType x, uint minVal, uint maxVal); 76 $genType mix($genType x, $genType y, $genType a); 77 $genType mix($genType x, $genType y, float a); 78 //$genDType mix($genDType x, $genDType y, $genDType a); 79 //$genDType mix($genDType x, $genDType y, double a); 80 $genType mix($genType x, $genType y, $genBType a); 81 //$genDType mix($genDType x, $genDType y, $genBType a); 82 $genIType mix($genIType x, $genIType y, $genBType a); 83 //$genUType mix($genUType x, $genUType y, $genBType a); 84 $genBType mix($genBType x, $genBType y, $genBType a); 85 $genType step($genType edge, $genType x); 86 $genType step(float edge, $genType x); 87 //$genDType step($genDType edge, $genDType x); 88 //$genDType step(double edge, $genDType x); 89 $genType smoothstep($genType edge0, $genType edge1, $genType x); 90 $genType smoothstep(float edge0, float edge1, $genType x); 91 //$genDType smoothstep($genDType edge0, $genDType edge1, $genDType x); 92 //$genDType smoothstep(double edge0, double edge1, $genDType x); 93 $genBType isnan($genType x); 94 $genBType isnan($genDType x); 95 $genBType isinf($genType x); 96 $genBType isinf($genDType x); 97 $genIType floatBitsToInt($genType value); 98 //$genUType floatBitsToUint($genType value); 99 $genType intBitsToFloat($genIType value); 100 $genType uintBitsToFloat($genUType value); 101 $genType fma($genType a, $genType b, $genType c); 102 //$genDType fma($genDType a, $genDType b, $genDType c); 103 $genType frexp($genType x, out $genIType exp); 104 //$genDType frexp($genDType x, out $genIType exp); 105 $genType ldexp($genType x, in $genIType exp); 106 //$genDType ldexp($genDType x, in $genIType exp); 107 uint packUnorm2x16(vec2 v); 108 uint packSnorm2x16(vec2 v); 109 uint packUnorm4x8(vec4 v); 110 uint packSnorm4x8(vec4 v); 111 vec2 unpackUnorm2x16(uint p); 112 vec2 unpackSnorm2x16(uint p); 113 vec4 unpackUnorm4x8(uint p); 114 vec4 unpackSnorm4x8(uint p); 115 //double packDouble2x32(uvec2 v); 116 uvec2 unpackDouble2x32(double v); 117 uint packHalf2x16(vec2 v); 118 vec2 unpackHalf2x16(uint v); 119 float length($genType x); 120 //double length($genDType x); 121 float distance($genType p0, $genType p1); 122 //double distance($genDType p0, $genDType p1); 123 float dot($genType x, $genType y); 124 //double dot($genDType x, $genDType y); 125 vec3 cross(vec3 x, vec3 y); 126 //dvec3 cross(dvec3 x, dvec3 y); 127 $genType normalize($genType x); 128 //$genDType normalize($genDType x); 129 vec4 ftransform(); 130 $genType faceforward($genType N, $genType I, $genType Nref); 131 //$genDType faceforward($genDType N, $genDType I, $genDType Nref); 132 $genType reflect($genType I, $genType N); 133 //$genDType reflect($genDType I, $genDType N); 134 $genType refract($genType I, $genType N, float eta); 135 //$genDType refract($genDType I, $genDType N, float eta); 136 $mat matrixCompMult($mat x, $mat y); 137 mat2 outerProduct(vec2 c, vec2 r); 138 mat3 outerProduct(vec3 c, vec3 r); 139 mat4 outerProduct(vec4 c, vec4 r); 140 mat2x3 outerProduct(vec3 c, vec2 r); 141 mat3x2 outerProduct(vec2 c, vec3 r); 142 mat2x4 outerProduct(vec4 c, vec2 r); 143 mat4x2 outerProduct(vec2 c, vec4 r); 144 mat3x4 outerProduct(vec4 c, vec3 r); 145 mat4x3 outerProduct(vec3 c, vec4 r); 146 mat2 transpose(mat2 m); 147 mat3 transpose(mat3 m); 148 mat4 transpose(mat4 m); 149 mat2x3 transpose(mat3x2 m); 150 mat3x2 transpose(mat2x3 m); 151 mat2x4 transpose(mat4x2 m); 152 mat4x2 transpose(mat2x4 m); 153 mat3x4 transpose(mat4x3 m); 154 mat4x3 transpose(mat3x4 m); 155 float determinant(mat2 m); 156 float determinant(mat3 m); 157 float determinant(mat4 m); 158 mat2 inverse(mat2 m); 159 mat3 inverse(mat3 m); 160 mat4 inverse(mat4 m); 161 $bvec lessThan($vec x, $vec y); 162 $bvec lessThan($ivec x, $ivec y); 163 $bvec lessThan($uvec x, $uvec y); 164 $bvec lessThanEqual($vec x, $vec y); 165 $bvec lessThanEqual($ivec x, $ivec y); 166 $bvec lessThanEqual($uvec x, $uvec y); 167 $bvec greaterThan($vec x, $vec y); 168 $bvec greaterThan($ivec x, $ivec y); 169 $bvec greaterThan($uvec x, $uvec y); 170 $bvec greaterThanEqual($vec x, $vec y); 171 $bvec greaterThanEqual($ivec x, $ivec y); 172 $bvec greaterThanEqual($uvec x, $uvec y); 173 $bvec equal($vec x, $vec y); 174 $bvec equal($ivec x, $ivec y); 175 $bvec equal($uvec x, $uvec y); 176 $bvec equal($bvec x, $bvec y); 177 $bvec notEqual($vec x, $vec y); 178 $bvec notEqual($ivec x, $ivec y); 179 $bvec notEqual($uvec x, $uvec y); 180 $bvec notEqual($bvec x, $bvec y); 181 bool any($bvec x); 182 bool all($bvec x); 183 $bvec not($bvec x); 184 185 $genIType bitCount($genIType value); 186 $genIType bitCount($genUType value); 187 $genIType findLSB($genIType value); 188 $genIType findLSB($genUType value); 189 $genIType findMSB($genIType value); 190 $genIType findMSB($genUType value); 191 192 /* 193 //$genUType uaddCarry($genUType x, $genUType y, out $genUType carry); 194 //$genUType usubBorrow($genUType x, $genUType y, out $genUType borrow); 195 void umulExtended($genUType x, $genUType y, out $genUType msb, out $genUType lsb); 196 void imulExtended($genIType x, $genIType y, out $genIType msb, out $genIType lsb); 197 $genIType bitfieldExtract($genIType value, int offset, int bits); 198 //$genUType bitfieldExtract($genUType value, int offset, int bits); 199 $genIType bitfieldInsert($genIType base, $genIType insert, int offset, int bits); 200 //$genUType bitfieldInsert($genUType base, $genUType insert, int offset, int bits); 201 $genIType bitfieldReverse($genIType value); 202 //$genUType bitfieldReverse($genUType value); 203 int textureSize($gsampler1D sampler, int lod); 204 ivec2 textureSize($gsampler2D sampler, int lod); 205 ivec3 textureSize($gsampler3D sampler, int lod); 206 ivec2 textureSize($gsamplerCube sampler, int lod); 207 int textureSize(sampler1DShadow sampler, int lod); 208 ivec2 textureSize(sampler2DShadow sampler, int lod); 209 ivec2 textureSize(samplerCubeShadow sampler, int lod); 210 ivec3 textureSize($gsamplerCubeArray sampler, int lod); 211 ivec3 textureSize(samplerCubeArrayShadow sampler, int lod); 212 */ 213 ivec2 textureSize($gsampler2DRect sampler); 214 /* 215 ivec2 textureSize(sampler2DRectShadow sampler); 216 ivec2 textureSize($gsampler1DArray sampler, int lod); 217 ivec3 textureSize($gsampler2DArray sampler, int lod); 218 ivec2 textureSize(sampler1DArrayShadow sampler, int lod); 219 ivec3 textureSize(sampler2DArrayShadow sampler, int lod); 220 int textureSize($gsamplerBuffer sampler); 221 ivec2 textureSize($gsampler2DMS sampler); 222 ivec3 textureSize($gsampler2DMSArray sampler); 223 vec2 textureQueryLod($gsampler1D sampler, float P); 224 vec2 textureQueryLod($gsampler2D sampler, vec2 P); 225 vec2 textureQueryLod($gsampler3D sampler, vec3 P); 226 vec2 textureQueryLod($gsamplerCube sampler, vec3 P); 227 vec2 textureQueryLod($gsampler1DArray sampler, float P); 228 vec2 textureQueryLod($gsampler2DArray sampler, vec2 P); 229 vec2 textureQueryLod($gsamplerCubeArray sampler, vec3 P); 230 vec2 textureQueryLod(sampler1DShadow sampler, float P); 231 vec2 textureQueryLod(sampler2DShadow sampler, vec2 P); 232 vec2 textureQueryLod(samplerCubeShadow sampler, vec3 P); 233 vec2 textureQueryLod(sampler1DArrayShadow sampler, float P); 234 vec2 textureQueryLod(sampler2DArrayShadow sampler, vec2 P); 235 vec2 textureQueryLod(samplerCubeArrayShadow sampler, vec3 P); 236 int textureQueryLevels($gsampler1D sampler); 237 int textureQueryLevels($gsampler2D sampler); 238 int textureQueryLevels($gsampler3D sampler); 239 int textureQueryLevels($gsamplerCube sampler); 240 int textureQueryLevels($gsampler1DArray sampler); 241 int textureQueryLevels($gsampler2DArray sampler); 242 int textureQueryLevels($gsamplerCubeArray sampler); 243 int textureQueryLevels(sampler1DShadow sampler); 244 int textureQueryLevels(sampler2DShadow sampler); 245 int textureQueryLevels(samplerCubeShadow sampler); 246 int textureQueryLevels(sampler1DArrayShadow sampler); 247 int textureQueryLevels(sampler2DArrayShadow sampler); 248 int textureQueryLevels(samplerCubeArrayShadow sampler); 249 */ 250 251 $gvec4 texture($gsampler1D sampler, float P); 252 $gvec4 texture($gsampler1D sampler, float P, float bias); 253 $gvec4 texture($gsampler2D sampler, vec2 P); 254 // The above currently only expand to handle the float/fixed case. So we also declare this integer 255 // version of texture(). 256 ivec4 texture(isampler2D sampler, vec2 P); 257 vec4 texture(samplerExternalOES sampler, vec2 P, float bias); 258 vec4 texture(samplerExternalOES sampler, vec2 P); 259 260 /* 261 $gvec4 texture($gsampler2D sampler, vec2 P, float bias); 262 $gvec4 texture($gsampler3D sampler, vec3 P); 263 $gvec4 texture($gsampler3D sampler, vec3 P, float bias); 264 $gvec4 texture($gsamplerCube sampler, vec3 P); 265 $gvec4 texture($gsamplerCube sampler, vec3 P, float bias); 266 float texture(sampler1DShadow sampler, vec3 P); 267 float texture(sampler1DShadow sampler, vec3 P, float bias); 268 float texture(sampler2DShadow sampler, vec3 P); 269 float texture(sampler2DShadow sampler, vec3 P, float bias); 270 float texture(samplerCubeShadow sampler, vec4 P); 271 float texture(samplerCubeShadow sampler, vec4 P, float bias); 272 $gvec4 texture($gsampler1DArray sampler, vec2 P); 273 $gvec4 texture($gsampler1DArray sampler, vec2 P, float bias); 274 $gvec4 texture($gsampler2DArray sampler, vec3 P); 275 $gvec4 texture($gsampler2DArray sampler, vec3 P, float bias); 276 $gvec4 texture($gsamplerCubeArray sampler, vec4 P); 277 $gvec4 texture($gsamplerCubeArray sampler, vec4 P, float bias); 278 float texture(sampler1DArrayShadow sampler, vec3 P); 279 float texture(sampler1DArrayShadow sampler, vec3 P, float bias); 280 float texture(sampler2DArrayShadow sampler, vec4 P); 281 */ 282 283 $gvec4 texture($gsampler2DRect sampler, vec2 P); 284 285 /* 286 float texture(sampler2DRectShadow sampler, vec3 P); 287 float texture($gsamplerCubeArrayShadow sampler, vec4 P, float compare); 288 */ 289 290 // Currently we do not support the generic types of loading subpassInput so we have some explicit 291 // versions that we currently use 292 vec4 subpassLoad(subpassInput subpass); 293 vec4 subpassLoad(subpassInputMS subpass, int sample); 294 /* 295 $gvec4 subpassLoad(gsubpassInput subpass); 296 $gvec4 subpassLoad(gsubpassInputMS subpass, int sample); 297 */ 298 ) 299 300 // split into multiple chunks, as MSVC++ complains if a single string is too long 301 302 STRINGIFY( 303 304 $gvec4 texture($gsampler1D sampler, vec2 P); 305 $gvec4 texture($gsampler1D sampler, vec2 P, float bias); 306 $gvec4 texture($gsampler2D sampler, vec3 P); 307 $gvec4 texture($gsampler2D sampler, vec3 P, float bias); 308 /* 309 $gvec4 textureProj($gsampler3D sampler, vec4 P); 310 $gvec4 textureProj($gsampler3D sampler, vec4 P, float bias); 311 float textureProj(sampler1DShadow sampler, vec4 P); 312 float textureProj(sampler1DShadow sampler, vec4 P, float bias); 313 float textureProj(sampler2DShadow sampler, vec4 P); 314 float textureProj(sampler2DShadow sampler, vec4 P, float bias); 315 $gvec4 textureProj($gsampler2DRect sampler, vec3 P); 316 $gvec4 textureProj($gsampler2DRect sampler, vec4 P); 317 float textureProj(sampler2DRectShadow sampler, vec4 P); 318 $gvec4 textureLod($gsampler1D sampler, float P, float lod); 319 $gvec4 textureLod($gsampler2D sampler, vec2 P, float lod); 320 $gvec4 textureLod($gsampler3D sampler, vec3 P, float lod); 321 $gvec4 textureLod($gsamplerCube sampler, vec3 P, float lod); 322 float textureLod(sampler1DShadow sampler, vec3 P, float lod); 323 float textureLod(sampler2DShadow sampler, vec3 P, float lod); 324 $gvec4 textureLod($gsampler1DArray sampler, vec2 P, float lod); 325 $gvec4 textureLod($gsampler2DArray sampler, vec3 P, float lod); 326 float textureLod(sampler1DArrayShadow sampler, vec3 P, float lod); 327 $gvec4 textureLod($gsamplerCubeArray sampler, vec4 P, float lod); 328 $gvec4 textureOffset($gsampler1D sampler, float P, int offset); 329 $gvec4 textureOffset($gsampler1D sampler, float P, int offset, float bias); 330 $gvec4 textureOffset($gsampler2D sampler, vec2 P, ivec2 offset); 331 $gvec4 textureOffset($gsampler2D sampler, vec2 P, ivec2 offset, float bias); 332 $gvec4 textureOffset($gsampler3D sampler, vec3 P, ivec3 offset); 333 $gvec4 textureOffset($gsampler3D sampler, vec3 P, ivec3 offset, float bias); 334 $gvec4 textureOffset($gsampler2DRect sampler, vec2 P, ivec2 offset); 335 float textureOffset(sampler2DRectShadow sampler, vec3 P, ivec2 offset); 336 float textureOffset(sampler1DShadow sampler, vec3 P, int offset); 337 float textureOffset(sampler1DShadow sampler, vec3 P, int offset, float bias); 338 float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset); 339 float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset, float bias); 340 $gvec4 textureOffset($gsampler1DArray sampler, vec2 P, int offset); 341 $gvec4 textureOffset($gsampler1DArray sampler, vec2 P, int offset, float bias); 342 $gvec4 textureOffset($gsampler2DArray sampler, vec3 P, ivec2 offset); 343 $gvec4 textureOffset($gsampler2DArray sampler, vec3 P, ivec2 offset, float bias); 344 float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset); 345 float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset, float bias); 346 float textureOffset(sampler2DArrayShadow sampler, vec4 P, ivec2 offset); 347 */ 348 $gvec4 texelFetch($gsampler1D sampler, int P, int lod); 349 $gvec4 texelFetch($gsampler2D sampler, ivec2 P, int lod); 350 $gvec4 texelFetch($gsamplerBuffer sampler, int P); 351 $gvec4 texelFetch($gsampler2DRect sampler, ivec2 P); 352 /* 353 $gvec4 texelFetch($gsampler3D sampler, ivec3 P, int lod); 354 $gvec4 texelFetch($gsampler1DArray sampler, ivec2 P, int lod); 355 $gvec4 texelFetch($gsampler2DArray sampler, ivec3 P, int lod); 356 $gvec4 texelFetch($gsampler2DMS sampler, ivec2 P, int sample); 357 $gvec4 texelFetch($gsampler2DMSArray sampler, ivec3 P, int sample); 358 $gvec4 texelFetchOffset($gsampler1D sampler, int P, int lod, int offset); 359 $gvec4 texelFetchOffset($gsampler2D sampler, ivec2 P, int lod, ivec2 offset); 360 $gvec4 texelFetchOffset($gsampler3D sampler, ivec3 P, int lod, ivec3 offset); 361 $gvec4 texelFetchOffset($gsampler2DRect sampler, ivec2 P, ivec2 offset); 362 $gvec4 texelFetchOffset($gsampler1DArray sampler, ivec2 P, int lod, int offset); 363 $gvec4 texelFetchOffset($gsampler2DArray sampler, ivec3 P, int lod, ivec2 offset); 364 $gvec4 textureProjOffset($gsampler1D sampler, vec2 P, int offset); 365 $gvec4 textureProjOffset($gsampler1D sampler, vec2 P, int offset, float bias); 366 $gvec4 textureProjOffset($gsampler1D sampler, vec4 P, int offset); 367 $gvec4 textureProjOffset($gsampler1D sampler, vec4 P, int offset, float bias); 368 $gvec4 textureProjOffset($gsampler2D sampler, vec3 P, ivec2 offset); 369 $gvec4 textureProjOffset($gsampler2D sampler, vec3 P, ivec2 offset, float bias); 370 $gvec4 textureProjOffset($gsampler2D sampler, vec4 P, ivec2 offset); 371 $gvec4 textureProjOffset($gsampler2D sampler, vec4 P, ivec2 offset, float bias); 372 $gvec4 textureProjOffset($gsampler3D sampler, vec4 P, ivec3 offset); 373 $gvec4 textureProjOffset($gsampler3D sampler, vec4 P, ivec3 offset, float bias); 374 $gvec4 textureProjOffset($gsampler2DRect sampler, vec3 P, ivec2 offset); 375 $gvec4 textureProjOffset($gsampler2DRect sampler, vec4 P, ivec2 offset); 376 float textureProjOffset(sampler2DRectShadow sampler, vec4 P, ivec2 offset); 377 float textureProjOffset(sampler1DShadow sampler, vec4 P, int offset); 378 float textureProjOffset(sampler1DShadow sampler, vec4 P, int offset, float bias); 379 float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset); 380 float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset, float bias); 381 $gvec4 textureLodOffset($gsampler1D sampler, float P, float lod, int offset); 382 $gvec4 textureLodOffset($gsampler2D sampler, vec2 P, float lod, ivec2 offset); 383 $gvec4 textureLodOffset($gsampler3D sampler, vec3 P, float lod, ivec3 offset); 384 float textureLodOffset(sampler1DShadow sampler, vec3 P, float lod, int offset); 385 float textureLodOffset(sampler2DShadow sampler, vec3 P, float lod, ivec2 offset); 386 $gvec4 textureLodOffset($gsampler1DArray sampler, vec2 P, float lod, int offset); 387 $gvec4 textureLodOffset($gsampler2DArray sampler, vec3 P, float lod, ivec2 offset); 388 float textureLodOffset(sampler1DArrayShadow sampler, vec3 P, float lod, int offset); 389 $gvec4 textureProjLod($gsampler1D sampler, vec2 P, float lod); 390 $gvec4 textureProjLod($gsampler1D sampler, vec4 P, float lod); 391 $gvec4 textureProjLod($gsampler2D sampler, vec3 P, float lod); 392 $gvec4 textureProjLod($gsampler2D sampler, vec4 P, float lod); 393 $gvec4 textureProjLod($gsampler3D sampler, vec4 P, float lod); 394 float textureProjLod(sampler1DShadow sampler, vec4 P, float lod); 395 float textureProjLod(sampler2DShadow sampler, vec4 P, float lod); 396 $gvec4 textureProjLodOffset($gsampler1D sampler, vec2 P, float lod, int offset); 397 $gvec4 textureProjLodOffset($gsampler1D sampler, vec4 P, float lod, int offset); 398 $gvec4 textureProjLodOffset($gsampler2D sampler, vec3 P, float lod, ivec2 offset); 399 $gvec4 textureProjLodOffset($gsampler2D sampler, vec4 P, float lod, ivec2 offset); 400 $gvec4 textureProjLodOffset($gsampler3D sampler, vec4 P, float lod, ivec3 offset); 401 float textureProjLodOffset(sampler1DShadow sampler, vec4 P, float lod, int offset); 402 float textureProjLodOffset(sampler2DShadow sampler, vec4 P, float lod, ivec2 offset); 403 $gvec4 textureGrad($gsampler1D sampler, float P, float dPdx, float dPdy); 404 $gvec4 textureGrad($gsampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy); 405 $gvec4 textureGrad($gsampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy); 406 $gvec4 textureGrad($gsamplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy); 407 $gvec4 textureGrad($gsampler2DRect sampler, vec2 P, vec2 dPdx, vec2 dPdy); 408 float textureGrad(sampler2DRectShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); 409 float textureGrad(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy); 410 float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); 411 float textureGrad(samplerCubeShadow sampler, vec4 P, vec3 dPdx, vec3 dPdy); 412 $gvec4 textureGrad($gsampler1DArray sampler, vec2 P, float dPdx, float dPdy); 413 $gvec4 textureGrad($gsampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy); 414 float textureGrad(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy); 415 float textureGrad(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); 416 $gvec4 textureGrad($gsamplerCubeArray sampler, vec4 P, vec3 dPdx, vec3 dPdy); 417 $gvec4 textureGradOffset($gsampler1D sampler, float P, float dPdx, float dPdy, int offset); 418 $gvec4 textureGradOffset($gsampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 419 $gvec4 textureGradOffset($gsampler3D sampler, vec3 P, vec3 dPdx, vec3 dPdy, ivec3 offset); 420 $gvec4 textureGradOffset($gsampler2DRect sampler, vec2 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 421 float textureGradOffset(sampler2DRectShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 422 float textureGradOffset(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy, int offset ); 423 float textureGradOffset(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 424 $gvec4 textureGradOffset($gsampler1DArray sampler, vec2 P, float dPdx, float dPdy, int offset); 425 $gvec4 textureGradOffset($gsampler2DArray sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 426 float textureGradOffset(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy, int offset); 427 float textureGradOffset(sampler2DArrayShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 428 $gvec4 textureProjGrad($gsampler1D sampler, vec2 P, float dPdx, float dPdy); 429 $gvec4 textureProjGrad($gsampler1D sampler, vec4 P, float dPdx, float dPdy); 430 $gvec4 textureProjGrad($gsampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy); 431 $gvec4 textureProjGrad($gsampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy); 432 $gvec4 textureProjGrad($gsampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy); 433 $gvec4 textureProjGrad($gsampler2DRect sampler, vec3 P, vec2 dPdx, vec2 dPdy); 434 $gvec4 textureProjGrad($gsampler2DRect sampler, vec4 P, vec2 dPdx, vec2 dPdy); 435 float textureProjGrad(sampler2DRectShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); 436 float textureProjGrad(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy); 437 float textureProjGrad(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); 438 $gvec4 textureProjGradOffset($gsampler1D sampler, vec2 P, float dPdx, float dPdy, int offset); 439 $gvec4 textureProjGradOffset($gsampler1D sampler, vec4 P, float dPdx, float dPdy, int offset); 440 $gvec4 textureProjGradOffset($gsampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 441 $gvec4 textureProjGradOffset($gsampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 442 $gvec4 textureProjGradOffset($gsampler2DRect sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 443 $gvec4 textureProjGradOffset($gsampler2DRect sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 444 float textureProjGradOffset(sampler2DRectShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 445 $gvec4 textureProjGradOffset($gsampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset); 446 float textureProjGradOffset(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy, int offset); 447 float textureProjGradOffset(sampler2DShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 448 $gvec4 textureGather($gsampler2D sampler, vec2 P); 449 $gvec4 textureGather($gsampler2D sampler, vec2 P, int comp); 450 $gvec4 textureGather($gsampler2DArray sampler, vec3 P); 451 $gvec4 textureGather($gsampler2DArray sampler, vec3 P, int comp); 452 $gvec4 textureGather($gsamplerCube sampler, vec3 P); 453 $gvec4 textureGather($gsamplerCube sampler, vec3 P, int comp); 454 $gvec4 textureGather($gsamplerCubeArray sampler, vec4 P); 455 $gvec4 textureGather($gsamplerCubeArray sampler, vec4 P, int comp); 456 $gvec4 textureGather($gsampler2DRect sampler, vec2 P); 457 $gvec4 textureGather($gsampler2DRect sampler, vec2 P, int comp); 458 vec4 textureGather(sampler2DShadow sampler, vec2 P, float refZ); 459 vec4 textureGather(sampler2DArrayShadow sampler, vec3 P, float refZ); 460 vec4 textureGather(samplerCubeShadow sampler, vec3 P, float refZ); 461 vec4 textureGather(samplerCubeArrayShadow sampler, vec4 P, float refZ); 462 vec4 textureGather(sampler2DRectShadow sampler, vec2 P, float refZ); 463 $gvec4 textureGatherOffset($gsampler2D sampler, vec2 P, ivec2 offset); 464 $gvec4 textureGatherOffset($gsampler2D sampler, vec2 P, ivec2 offset, int comp); 465 $gvec4 textureGatherOffset($gsampler2DArray sampler, vec3 P, ivec2 offset); 466 $gvec4 textureGatherOffset($gsampler2DArray sampler, vec3 P, ivec2 offset, int comp); 467 $gvec4 textureGatherOffset($gsampler2DRect sampler, vec2 P, ivec2 offset); 468 $gvec4 textureGatherOffset($gsampler2DRect sampler, vec2 P, ivec2 offset, int comp); 469 vec4 textureGatherOffset(sampler2DShadow sampler, vec2 P, float refZ, ivec2 offset); 470 vec4 textureGatherOffset(sampler2DArrayShadow sampler, vec3 P, float refZ, ivec2 offset); 471 vec4 textureGatherOffset(sampler2DRectShadow sampler, vec2 P, float refZ, ivec2 offset); 472 $gvec4 textureGatherOffsets($gsampler2D sampler, vec2 P, ivec2 offsets[4]); 473 $gvec4 textureGatherOffsets($gsampler2D sampler, vec2 P, ivec2 offsets[4], int comp); 474 $gvec4 textureGatherOffsets($gsampler2DArray sampler, vec3 P, ivec2 offsets[4]); 475 $gvec4 textureGatherOffsets($gsampler2DArray sampler, vec3 P, ivec2 offsets[4], int comp); 476 $gvec4 textureGatherOffsets($gsampler2DRect sampler, vec2 P, ivec2 offsets[4]); 477 $gvec4 textureGatherOffsets($gsampler2DRect sampler, vec2 P, ivec2 offsets[4], int comp); 478 vec4 textureGatherOffsets(sampler2DShadow sampler, vec2 P, float refZ, ivec2 offsets[4]); 479 vec4 textureGatherOffsets(sampler2DArrayShadow sampler, vec3 P, float refZ, ivec2 offsets[4]); 480 vec4 textureGatherOffsets(sampler2DRectShadow sampler, vec2 P, float refZ, ivec2 offsets[4]); 481 uint atomicCounterIncrement(atomic_uint c); 482 uint atomicCounter(atomic_uint c); 483 uint atomicAdd(inout uint mem, uint data); 484 int atomicAdd(inout int mem, int data); 485 uint atomicMin(inout uint mem, uint data); 486 int atomicMin(inout int mem, int data); 487 uint atomicMax(inout uint mem, uint data); 488 int atomicMax(inout int mem, int data); 489 uint atomicAnd(inout uint mem, uint data); 490 int atomicAnd(inout int mem, int data); 491 uint atomicOr(inout uint mem, uint data); 492 int atomicOr(inout int mem, int data); 493 uint atomicXor(inout uint mem, uint data); 494 int atomicXor(inout int mem, int data); 495 uint atomicExchange(inout uint mem, uint data); 496 int atomicExchange(inout int mem, int data); 497 uint atomicCompSwap(inout uint mem, uint compare, uint data); 498 int atomicCompSwap(inout int mem, int compare, int data); 499 */ 500 // section 8.12 Additional Image Functions will go here if and when we add 501 // support for them 502 vec4 imageLoad(image2D image, ivec2 P); 503 ivec4 imageLoad(iimage2D image, ivec2 P); 504 $genType dFdx($genType p); 505 $genType dFdy($genType p); 506 float interpolateAtSample(float interpolant, int sample); 507 vec2 interpolateAtSample(vec2 interpolant, int sample); 508 vec3 interpolateAtSample(vec3 interpolant, int sample); 509 vec4 interpolateAtSample(vec4 interpolant, int sample); 510 float interpolateAtOffset(float interpolant, vec2 offset); 511 vec2 interpolateAtOffset(vec2 interpolant, vec2 offset); 512 vec3 interpolateAtOffset(vec3 interpolant, vec2 offset); 513 vec4 interpolateAtOffset(vec4 interpolant, vec2 offset); 514 515 /* 516 $genType fwidth($genType p); 517 $genType fwidthCoarse($genType p); 518 $genType fwidthFine($genType p); 519 void barrier(); 520 void memoryBarrier(); 521 void memoryBarrierAtomicCounter(); 522 void memoryBarrierBuffer(); 523 void memoryBarrierShared(); 524 void memoryBarrierImage(); 525 void groupMemoryBarrier(); 526 */ 527 528 ) 529 530