1STRINGIFY( 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); 107uint packUnorm2x16(vec2 v); 108uint packSnorm2x16(vec2 v); 109uint packUnorm4x8(vec4 v); 110uint packSnorm4x8(vec4 v); 111vec2 unpackUnorm2x16(uint p); 112vec2 unpackSnorm2x16(uint p); 113vec4 unpackUnorm4x8(uint p); 114vec4 unpackSnorm4x8(uint p); 115//double packDouble2x32(uvec2 v); 116uvec2 unpackDouble2x32(double v); 117uint packHalf2x16(vec2 v); 118vec2 unpackHalf2x16(uint v); 119float length($genType x); 120//double length($genDType x); 121float distance($genType p0, $genType p1); 122//double distance($genDType p0, $genDType p1); 123float dot($genType x, $genType y); 124//double dot($genDType x, $genDType y); 125vec3 cross(vec3 x, vec3 y); 126//dvec3 cross(dvec3 x, dvec3 y); 127$genType normalize($genType x); 128//$genDType normalize($genDType x); 129vec4 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); 137mat2 outerProduct(vec2 c, vec2 r); 138mat3 outerProduct(vec3 c, vec3 r); 139mat4 outerProduct(vec4 c, vec4 r); 140mat2x3 outerProduct(vec3 c, vec2 r); 141mat3x2 outerProduct(vec2 c, vec3 r); 142mat2x4 outerProduct(vec4 c, vec2 r); 143mat4x2 outerProduct(vec2 c, vec4 r); 144mat3x4 outerProduct(vec4 c, vec3 r); 145mat4x3 outerProduct(vec3 c, vec4 r); 146mat2 transpose(mat2 m); 147mat3 transpose(mat3 m); 148mat4 transpose(mat4 m); 149mat2x3 transpose(mat3x2 m); 150mat3x2 transpose(mat2x3 m); 151mat2x4 transpose(mat4x2 m); 152mat4x2 transpose(mat2x4 m); 153mat3x4 transpose(mat4x3 m); 154mat4x3 transpose(mat3x4 m); 155float determinant(mat2 m); 156float determinant(mat3 m); 157float determinant(mat4 m); 158mat2 inverse(mat2 m); 159mat3 inverse(mat3 m); 160mat4 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); 181bool any($bvec x); 182bool 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); 195void umulExtended($genUType x, $genUType y, out $genUType msb, out $genUType lsb); 196void 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); 203int textureSize($gsampler1D sampler, int lod); 204ivec2 textureSize($gsampler2D sampler, int lod); 205ivec3 textureSize($gsampler3D sampler, int lod); 206ivec2 textureSize($gsamplerCube sampler, int lod); 207int textureSize(sampler1DShadow sampler, int lod); 208ivec2 textureSize(sampler2DShadow sampler, int lod); 209ivec2 textureSize(samplerCubeShadow sampler, int lod); 210ivec3 textureSize($gsamplerCubeArray sampler, int lod); 211ivec3 textureSize(samplerCubeArrayShadow sampler, int lod); 212*/ 213ivec2 textureSize($gsampler2DRect sampler); 214/* 215ivec2 textureSize(sampler2DRectShadow sampler); 216ivec2 textureSize($gsampler1DArray sampler, int lod); 217ivec3 textureSize($gsampler2DArray sampler, int lod); 218ivec2 textureSize(sampler1DArrayShadow sampler, int lod); 219ivec3 textureSize(sampler2DArrayShadow sampler, int lod); 220int textureSize($gsamplerBuffer sampler); 221ivec2 textureSize($gsampler2DMS sampler); 222ivec3 textureSize($gsampler2DMSArray sampler); 223vec2 textureQueryLod($gsampler1D sampler, float P); 224vec2 textureQueryLod($gsampler2D sampler, vec2 P); 225vec2 textureQueryLod($gsampler3D sampler, vec3 P); 226vec2 textureQueryLod($gsamplerCube sampler, vec3 P); 227vec2 textureQueryLod($gsampler1DArray sampler, float P); 228vec2 textureQueryLod($gsampler2DArray sampler, vec2 P); 229vec2 textureQueryLod($gsamplerCubeArray sampler, vec3 P); 230vec2 textureQueryLod(sampler1DShadow sampler, float P); 231vec2 textureQueryLod(sampler2DShadow sampler, vec2 P); 232vec2 textureQueryLod(samplerCubeShadow sampler, vec3 P); 233vec2 textureQueryLod(sampler1DArrayShadow sampler, float P); 234vec2 textureQueryLod(sampler2DArrayShadow sampler, vec2 P); 235vec2 textureQueryLod(samplerCubeArrayShadow sampler, vec3 P); 236int textureQueryLevels($gsampler1D sampler); 237int textureQueryLevels($gsampler2D sampler); 238int textureQueryLevels($gsampler3D sampler); 239int textureQueryLevels($gsamplerCube sampler); 240int textureQueryLevels($gsampler1DArray sampler); 241int textureQueryLevels($gsampler2DArray sampler); 242int textureQueryLevels($gsamplerCubeArray sampler); 243int textureQueryLevels(sampler1DShadow sampler); 244int textureQueryLevels(sampler2DShadow sampler); 245int textureQueryLevels(samplerCubeShadow sampler); 246int textureQueryLevels(sampler1DArrayShadow sampler); 247int textureQueryLevels(sampler2DArrayShadow sampler); 248int 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(). 256ivec4 texture(isampler2D sampler, vec2 P); 257vec4 texture(samplerExternalOES sampler, vec2 P, float bias); 258vec4 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); 266float texture(sampler1DShadow sampler, vec3 P); 267float texture(sampler1DShadow sampler, vec3 P, float bias); 268float texture(sampler2DShadow sampler, vec3 P); 269float texture(sampler2DShadow sampler, vec3 P, float bias); 270float texture(samplerCubeShadow sampler, vec4 P); 271float 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); 278float texture(sampler1DArrayShadow sampler, vec3 P); 279float texture(sampler1DArrayShadow sampler, vec3 P, float bias); 280float texture(sampler2DArrayShadow sampler, vec4 P); 281*/ 282 283$gvec4 texture($gsampler2DRect sampler, vec2 P); 284 285/* 286float texture(sampler2DRectShadow sampler, vec3 P); 287float 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 292vec4 subpassLoad(subpassInput subpass); 293vec4 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 302STRINGIFY( 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); 311float textureProj(sampler1DShadow sampler, vec4 P); 312float textureProj(sampler1DShadow sampler, vec4 P, float bias); 313float textureProj(sampler2DShadow sampler, vec4 P); 314float textureProj(sampler2DShadow sampler, vec4 P, float bias); 315$gvec4 textureProj($gsampler2DRect sampler, vec3 P); 316$gvec4 textureProj($gsampler2DRect sampler, vec4 P); 317float 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); 322float textureLod(sampler1DShadow sampler, vec3 P, float lod); 323float 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); 326float 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); 335float textureOffset(sampler2DRectShadow sampler, vec3 P, ivec2 offset); 336float textureOffset(sampler1DShadow sampler, vec3 P, int offset); 337float textureOffset(sampler1DShadow sampler, vec3 P, int offset, float bias); 338float textureOffset(sampler2DShadow sampler, vec3 P, ivec2 offset); 339float 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); 344float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset); 345float textureOffset(sampler1DArrayShadow sampler, vec3 P, int offset, float bias); 346float 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); 376float textureProjOffset(sampler2DRectShadow sampler, vec4 P, ivec2 offset); 377float textureProjOffset(sampler1DShadow sampler, vec4 P, int offset); 378float textureProjOffset(sampler1DShadow sampler, vec4 P, int offset, float bias); 379float textureProjOffset(sampler2DShadow sampler, vec4 P, ivec2 offset); 380float 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); 384float textureLodOffset(sampler1DShadow sampler, vec3 P, float lod, int offset); 385float 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); 388float 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); 394float textureProjLod(sampler1DShadow sampler, vec4 P, float lod); 395float 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); 401float textureProjLodOffset(sampler1DShadow sampler, vec4 P, float lod, int offset); 402float 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); 408float textureGrad(sampler2DRectShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); 409float textureGrad(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy); 410float textureGrad(sampler2DShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy); 411float 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); 414float textureGrad(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy); 415float 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); 421float textureGradOffset(sampler2DRectShadow sampler, vec3 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 422float textureGradOffset(sampler1DShadow sampler, vec3 P, float dPdx, float dPdy, int offset ); 423float 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); 426float textureGradOffset(sampler1DArrayShadow sampler, vec3 P, float dPdx, float dPdy, int offset); 427float 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); 435float textureProjGrad(sampler2DRectShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy); 436float textureProjGrad(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy); 437float 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); 444float textureProjGradOffset(sampler2DRectShadow sampler, vec4 P, vec2 dPdx, vec2 dPdy, ivec2 offset); 445$gvec4 textureProjGradOffset($gsampler3D sampler, vec4 P, vec3 dPdx, vec3 dPdy, ivec3 offset); 446float textureProjGradOffset(sampler1DShadow sampler, vec4 P, float dPdx, float dPdy, int offset); 447float 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); 458vec4 textureGather(sampler2DShadow sampler, vec2 P, float refZ); 459vec4 textureGather(sampler2DArrayShadow sampler, vec3 P, float refZ); 460vec4 textureGather(samplerCubeShadow sampler, vec3 P, float refZ); 461vec4 textureGather(samplerCubeArrayShadow sampler, vec4 P, float refZ); 462vec4 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); 469vec4 textureGatherOffset(sampler2DShadow sampler, vec2 P, float refZ, ivec2 offset); 470vec4 textureGatherOffset(sampler2DArrayShadow sampler, vec3 P, float refZ, ivec2 offset); 471vec4 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); 478vec4 textureGatherOffsets(sampler2DShadow sampler, vec2 P, float refZ, ivec2 offsets[4]); 479vec4 textureGatherOffsets(sampler2DArrayShadow sampler, vec3 P, float refZ, ivec2 offsets[4]); 480vec4 textureGatherOffsets(sampler2DRectShadow sampler, vec2 P, float refZ, ivec2 offsets[4]); 481uint atomicCounterIncrement(atomic_uint c); 482uint atomicCounter(atomic_uint c); 483uint atomicAdd(inout uint mem, uint data); 484int atomicAdd(inout int mem, int data); 485uint atomicMin(inout uint mem, uint data); 486int atomicMin(inout int mem, int data); 487uint atomicMax(inout uint mem, uint data); 488int atomicMax(inout int mem, int data); 489uint atomicAnd(inout uint mem, uint data); 490int atomicAnd(inout int mem, int data); 491uint atomicOr(inout uint mem, uint data); 492int atomicOr(inout int mem, int data); 493uint atomicXor(inout uint mem, uint data); 494int atomicXor(inout int mem, int data); 495uint atomicExchange(inout uint mem, uint data); 496int atomicExchange(inout int mem, int data); 497uint atomicCompSwap(inout uint mem, uint compare, uint data); 498int 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 502vec4 imageLoad(image2D image, ivec2 P); 503ivec4 imageLoad(iimage2D image, ivec2 P); 504$genType dFdx($genType p); 505$genType dFdy($genType p); 506float interpolateAtSample(float interpolant, int sample); 507vec2 interpolateAtSample(vec2 interpolant, int sample); 508vec3 interpolateAtSample(vec3 interpolant, int sample); 509vec4 interpolateAtSample(vec4 interpolant, int sample); 510float interpolateAtOffset(float interpolant, vec2 offset); 511vec2 interpolateAtOffset(vec2 interpolant, vec2 offset); 512vec3 interpolateAtOffset(vec3 interpolant, vec2 offset); 513vec4 interpolateAtOffset(vec4 interpolant, vec2 offset); 514 515/* 516$genType fwidth($genType p); 517$genType fwidthCoarse($genType p); 518$genType fwidthFine($genType p); 519void barrier(); 520void memoryBarrier(); 521void memoryBarrierAtomicCounter(); 522void memoryBarrierBuffer(); 523void memoryBarrierShared(); 524void memoryBarrierImage(); 525void groupMemoryBarrier(); 526*/ 527 528) 529 530