aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/sksl.inc
blob: 3d7b53a94d2f55350a3e4f33e14f985430254be6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
STRINGIFY(

// defines built-in functions supported by SkiaSL

$genType radians($genType degrees);
$genType sin($genType angle);
$genType cos($genType angle);
$genType tan($genType angle);
$genType asin($genType x);
$genType acos($genType x);
$genType atan($genType y, $genType x);
$genType atan($genType y_over_x);
$genType sinh($genType x);
$genType cosh($genType x);
$genType tanh($genType x);
$genType asinh($genType x);
$genType acosh($genType x);
$genType atanh($genType x);
$genType pow($genType x, $genType y);
$genType exp($genType x);
$genType log($genType x);
$genType exp2($genType x);
$genType log2($genType x);
$genType sqrt($genType x);
//$genDType sqrt($genDType x);
$genType inversesqrt($genType x);
//$genDType inversesqrt($genDType x);
$genType abs($genType x);
$genIType abs($genIType x);
//$genDType abs($genDType x);
$genType sign($genType x);
$genIType sign($genIType x);
//$genDType sign($genDType x);
$genType floor($genType x);
//$genDType floor($genDType x);
$genType trunc($genType x);
//$genDType trunc($genDType x);
$genType round($genType x);
//$genDType round($genDType x);
$genType roundEven($genType x);
//$genDType roundEven($genDType x);
$genType ceil($genType x);
//$genDType ceil($genDType x);
$genType fract($genType x);
//$genDType fract($genDType x);
$genType mod($genType x, float y);
$genType mod($genType x, $genType y);
//$genDType mod($genDType x, double y);
//$genDType mod($genDType x, $genDType y);
$genType modf($genType x, out $genType i);
//$genDType modf($genDType x, out $genDType i);
$genType min($genType x, $genType y);
$genType min($genType x, float y);
//$genDType min($genDType x, $genDType y);
//$genDType min($genDType x, double y);
$genIType min($genIType x, $genIType y);
$genIType min($genIType x, int y);
//$genUType min($genUType x, $genUType y);
//$genUType min($genUType x, uint y);
$genType max($genType x, $genType y);
$genType max($genType x, float y);
//$genDType max($genDType x, $genDType y);
//$genDType max($genDType x, double y);
$genIType max($genIType x, $genIType y);
$genIType max($genIType x, int y);
//$genUType max($genUType x, $genUType y);
//$genUType max($genUType x, uint y);
$genType clamp($genType x, $genType minVal, $genType maxVal);
$genType clamp($genType x, float minVal, float maxVal);
//$genDType clamp($genDType x, $genDType minVal, $genDType maxVal);
//$genDType clamp($genDType x, double minVal, double maxVal);
$genIType clamp($genIType x, $genIType minVal, $genIType maxVal);
$genIType clamp($genIType x, int minVal, int maxVal);
//$genUType clamp($genUType x, $genUType minVal, $genUType maxVal);
//$genUType clamp($genUType x, uint minVal, uint maxVal);
$genType mix($genType x, $genType y, $genType a);
$genType mix($genType x, $genType y, float a);
//$genDType mix($genDType x, $genDType y, $genDType a);
//$genDType mix($genDType x, $genDType y, double a);
$genType mix($genType x, $genType y, $genBType a);
//$genDType mix($genDType x, $genDType y, $genBType a);
$genIType mix($genIType x, $genIType y, $genBType a);
//$genUType mix($genUType x, $genUType y, $genBType a);
$genBType mix($genBType x, $genBType y, $genBType a);
$genType step($genType edge, $genType x);
$genType step(float edge, $genType x);
//$genDType step($genDType edge, $genDType x);
//$genDType step(double edge, $genDType x);
$genType smoothstep($genType edge0, $genType edge1, $genType x);
$genType smoothstep(float edge0, float edge1, $genType x);
//$genDType smoothstep($genDType edge0, $genDType edge1, $genDType x);
//$genDType smoothstep(double edge0, double edge1, $genDType x);
$genBType isnan($genType x);
$genBType isnan($genDType x);
$genBType isinf($genType x);
$genBType isinf($genDType x);
$genIType floatBitsToInt($genType value);
//$genUType floatBitsToUint($genType value);
$genType intBitsTofloat($genIType value);
$genType uintBitsTofloat($genUType value);
$genType fma($genType a, $genType b, $genType c);
$genHType fma($genHType a, $genHType b, $genHType c);
$genDType fma($genDType a, $genDType b, $genDType c);
//$genDType fma($genDType a, $genDType b, $genDType c);
sk_has_side_effects $genType frexp($genType x, out $genIType exp);
//$genDType frexp($genDType x, out $genIType exp);
$genType ldexp($genType x, in $genIType exp);
//$genDType ldexp($genDType x, in $genIType exp);
uint packUnorm2x16(float2 v);
uint packSnorm2x16(float2 v);
uint packUnorm4x8(float4 v);
uint packSnorm4x8(float4 v);
float2 unpackUnorm2x16(uint p);
float2 unpackSnorm2x16(uint p);
float4 unpackUnorm4x8(uint p);
float4 unpackSnorm4x8(uint p);
//double packDouble2x32(uint2 v);
uint2 unpackDouble2x32(double v);
uint packHalf2x16(float2 v);
float2 unpackHalf2x16(uint v);
float length($genType x);
half length($genHType x);
double length($genDType x);
float distance($genType p0, $genType p1);
half distance($genHType p0, $genHType p1);
double distance($genDType p0, $genDType p1);
float dot($genType x, $genType y);
half dot($genHType x, $genHType y);
double dot($genDType x, $genDType y);
float3 cross(float3 x, float3 y);
half3 cross(half3 x, half3 y);
double3 cross(double3 x, double3 y);
$genType normalize($genType x);
$genHType normalize($genHType x);
$genDType normalize($genDType x);
float4 ftransform();
$genType faceforward($genType N, $genType I, $genType Nref);
$genHType faceforward($genHType N, $genHType I, $genHType Nref);
$genDType faceforward($genDType N, $genDType I, $genDType Nref);
$genType reflect($genType I, $genType N);
$genHType reflect($genHType I, $genHType N);
$genDType reflect($genDType I, $genDType N);
$genType refract($genType I, $genType N, float eta);
$genHType refract($genHType I, $genHType N, float eta);
$genDType refract($genDType I, $genDType N, float eta);
$mat matrixCompMult($mat x, $mat y);
float2x2 outerProduct(float2 c, float2 r);
float3x3 outerProduct(float3 c, float3 r);
float4x3 outerProduct(float4 c, float4 r);
float2x3 outerProduct(float3 c, float2 r);
float3x2 outerProduct(float2 c, float3 r);
float2x4 outerProduct(float4 c, float2 r);
float4x2 outerProduct(float2 c, float4 r);
float3x4 outerProduct(float4 c, float3 r);
float4x3 outerProduct(float3 c, float4 r);
float2x2 transpose(float2x2 m);
float3x3 transpose(float3x3 m);
float4x4 transpose(float4x4 m);
float2x3 transpose(float3x2 m);
float3x2 transpose(float2x3 m);
float2x4 transpose(float4x2 m);
float4x2 transpose(float2x4 m);
float3x4 transpose(float4x3 m);
float4x3 transpose(float3x4 m);
float determinant(float2x2 m);
float determinant(float3x3 m);
float determinant(float4x4 m);
float2x2 inverse(float2x2 m);
float3x3 inverse(float3x3 m);
float4x4 inverse(float4x4 m);
$bvec lessThan($vec x, $vec y);
$bvec lessThan($hvec x, $hvec y);
$bvec lessThan($dvec x, $dvec y);
$bvec lessThan($ivec x, $ivec y);
$bvec lessThan($svec x, $svec y);
$bvec lessThan($usvec x, $usvec y);
$bvec lessThan($uvec x, $uvec y);
$bvec lessThanEqual($vec x, $vec y);
$bvec lessThanEqual($hvec x, $hvec y);
$bvec lessThanEqual($dvec x, $dvec y);
$bvec lessThanEqual($ivec x, $ivec y);
$bvec lessThanEqual($uvec x, $uvec y);
$bvec lessThanEqual($svec x, $svec y);
$bvec lessThanEqual($usvec x, $usvec y);
$bvec greaterThan($vec x, $vec y);
$bvec greaterThan($hvec x, $hvec y);
$bvec greaterThan($dvec x, $dvec y);
$bvec greaterThan($ivec x, $ivec y);
$bvec greaterThan($uvec x, $uvec y);
$bvec greaterThan($svec x, $svec y);
$bvec greaterThan($usvec x, $usvec y);
$bvec greaterThanEqual($vec x, $vec y);
$bvec greaterThanEqual($hvec x, $hvec y);
$bvec greaterThanEqual($dvec x, $dvec y);
$bvec greaterThanEqual($ivec x, $ivec y);
$bvec greaterThanEqual($uvec x, $uvec y);
$bvec greaterThanEqual($svec x, $svec y);
$bvec greaterThanEqual($usvec x, $usvec y);
$bvec equal($vec x, $vec y);
$bvec equal($hvec x, $hvec y);
$bvec equal($dvec x, $dvec y);
$bvec equal($ivec x, $ivec y);
$bvec equal($uvec x, $uvec y);
$bvec equal($svec x, $svec y);
$bvec equal($usvec x, $usvec y);
$bvec equal($bvec x, $bvec y);
$bvec notEqual($vec x, $vec y);
$bvec notEqual($hvec x, $hvec y);
$bvec notEqual($dvec x, $dvec y);
$bvec notEqual($ivec x, $ivec y);
$bvec notEqual($uvec x, $uvec y);
$bvec notEqual($svec x, $svec y);
$bvec notEqual($usvec x, $usvec y);
$bvec notEqual($bvec x, $bvec y);
bool any($bvec x);
bool all($bvec x);
$bvec not($bvec x);

$genIType bitCount($genIType value);
$genIType bitCount($genUType value);
$genIType findLSB($genIType value);
$genIType findLSB($genUType value);
$genIType findMSB($genIType value);
$genIType findMSB($genUType value);

/*
//$genUType uaddCarry($genUType x, $genUType y, out $genUType carry);
//$genUType usubBorrow($genUType x, $genUType y, out $genUType borrow);
void umulExtended($genUType x, $genUType y, out $genUType msb, out $genUType lsb);
void imulExtended($genIType x, $genIType y, out $genIType msb, out $genIType lsb);
$genIType bitfieldExtract($genIType value, int offset, int bits);
//$genUType bitfieldExtract($genUType value, int offset, int bits);
$genIType bitfieldInsert($genIType base, $genIType insert, int offset, int bits);
//$genUType bitfieldInsert($genUType base, $genUType insert, int offset, int bits);
$genIType bitfieldReverse($genIType value);
//$genUType bitfieldReverse($genUType value);
int textureSize($gsampler1D sampler, int lod);
int2 textureSize($gsampler2D sampler, int lod);
int3 textureSize($gsampler3D sampler, int lod);
int2 textureSize($gsamplerCube sampler, int lod);
int textureSize(sampler1DShadow sampler, int lod);
int2 textureSize(sampler2DShadow sampler, int lod);
int2 textureSize(samplerCubeShadow sampler, int lod);
int3 textureSize($gsamplerCubeArray sampler, int lod);
int3 textureSize(samplerCubeArrayShadow sampler, int lod);
*/
int2 textureSize($gsampler2DRect sampler);
/*
int2 textureSize(sampler2DRectShadow sampler);
int2 textureSize($gsampler1DArray sampler, int lod);
int3 textureSize($gsampler2DArray sampler, int lod);
int2 textureSize(sampler1DArrayShadow sampler, int lod);
int3 textureSize(sampler2DArrayShadow sampler, int lod);
int textureSize($gsamplerBuffer sampler);
int2 textureSize($gsampler2DMS sampler);
int3 textureSize($gsampler2DMSArray sampler);
float2 textureQueryLod($gsampler1D sampler, float P);
float2 textureQueryLod($gsampler2D sampler, float2 P);
float2 textureQueryLod($gsampler3D sampler, float3 P);
float2 textureQueryLod($gsamplerCube sampler, float3 P);
float2 textureQueryLod($gsampler1DArray sampler, float P);
float2 textureQueryLod($gsampler2DArray sampler, float2 P);
float2 textureQueryLod($gsamplerCubeArray sampler, float3 P);
float2 textureQueryLod(sampler1DShadow sampler, float P);
float2 textureQueryLod(sampler2DShadow sampler, float2 P);
float2 textureQueryLod(samplerCubeShadow sampler, float3 P);
float2 textureQueryLod(sampler1DArrayShadow sampler, float P);
float2 textureQueryLod(sampler2DArrayShadow sampler, float2 P);
float2 textureQueryLod(samplerCubeArrayShadow sampler, float3 P);
int textureQueryLevels($gsampler1D sampler);
int textureQueryLevels($gsampler2D sampler);
int textureQueryLevels($gsampler3D sampler);
int textureQueryLevels($gsamplerCube sampler);
int textureQueryLevels($gsampler1DArray sampler);
int textureQueryLevels($gsampler2DArray sampler);
int textureQueryLevels($gsamplerCubeArray sampler);
int textureQueryLevels(sampler1DShadow sampler);
int textureQueryLevels(sampler2DShadow sampler);
int textureQueryLevels(samplerCubeShadow sampler);
int textureQueryLevels(sampler1DArrayShadow sampler);
int textureQueryLevels(sampler2DArrayShadow sampler);
int textureQueryLevels(samplerCubeArrayShadow sampler);
*/

half4 texture($gsampler1D sampler, float P);
half4 texture($gsampler1D sampler, float P, float bias);
half4 texture($gsampler2D sampler, float2 P);
// The above currently only expand to handle the float/fixed case. So we also declare this integer
// version of texture().
int4 texture(isampler2D sampler, float2 P);
half4 texture(samplerExternalOES sampler, float2 P, float bias);
half4 texture(samplerExternalOES sampler, float2 P);

/*
$gfloat4 texture($gsampler2D sampler, float2 P, float bias);
$gfloat4 texture($gsampler3D sampler, float3 P);
$gfloat4 texture($gsampler3D sampler, float3 P, float bias);
$gfloat4 texture($gsamplerCube sampler, float3 P);
$gfloat4 texture($gsamplerCube sampler, float3 P, float bias);
float texture(sampler1DShadow sampler, float3 P);
float texture(sampler1DShadow sampler, float3 P, float bias);
float texture(sampler2DShadow sampler, float3 P);
float texture(sampler2DShadow sampler, float3 P, float bias);
float texture(samplerCubeShadow sampler, float4 P);
float texture(samplerCubeShadow sampler, float4 P, float bias);
$gfloat4 texture($gsampler1DArray sampler, float2 P);
$gfloat4 texture($gsampler1DArray sampler, float2 P, float bias);
$gfloat4 texture($gsampler2DArray sampler, float3 P);
$gfloat4 texture($gsampler2DArray sampler, float3 P, float bias);
$gfloat4 texture($gsamplerCubeArray sampler, float4 P);
$gfloat4 texture($gsamplerCubeArray sampler, float4 P, float bias);
float texture(sampler1DArrayShadow sampler, float3 P);
float texture(sampler1DArrayShadow sampler, float3 P, float bias);
float texture(sampler2DArrayShadow sampler, float4 P);
*/

half4 texture($gsampler2DRect sampler, float2 P);
half4 texture($gsampler2DRect sampler, float3 P);

/*
float texture(sampler2DRectShadow sampler, float3 P);
float texture($gsamplerCubeArrayShadow sampler, float4 P, float compare);
*/

// Currently we do not support the generic types of loading subpassInput so we have some explicit
// versions that we currently use
float4 subpassLoad(subpassInput subpass);
float4 subpassLoad(subpassInputMS subpass, int sample);
/*
$gfloat4subpassLoad(gsubpassInput subpass);
$gfloat4subpassLoad(gsubpassInputMS subpass, int sample);
*/
)

// split into multiple chunks, as MSVC++ complains if a single string is too long

STRINGIFY(

half4 texture($gsampler1D sampler, float2 P);
half4 texture($gsampler1D sampler, float2 P, float bias);
half4 texture($gsampler2D sampler, float3 P);
half4 texture($gsampler2D sampler, float3 P, float bias);
/*
$gfloat4 textureProj($gsampler3D sampler, float4 P);
$gfloat4 textureProj($gsampler3D sampler, float4 P, float bias);
float textureProj(sampler1DShadow sampler, float4 P);
float textureProj(sampler1DShadow sampler, float4 P, float bias);
float textureProj(sampler2DShadow sampler, float4 P);
float textureProj(sampler2DShadow sampler, float4 P, float bias);
$gfloat4 textureProj($gsampler2DRect sampler, float4 P);
float textureProj(sampler2DRectShadow sampler, float4 P);
$gfloat4 textureLod($gsampler1D sampler, float P, float lod);
$gfloat4 textureLod($gsampler2D sampler, float2 P, float lod);
$gfloat4 textureLod($gsampler3D sampler, float3 P, float lod);
$gfloat4 textureLod($gsamplerCube sampler, float3 P, float lod);
float textureLod(sampler1DShadow sampler, float3 P, float lod);
float textureLod(sampler2DShadow sampler, float3 P, float lod);
$gfloat4 textureLod($gsampler1DArray sampler, float2 P, float lod);
$gfloat4 textureLod($gsampler2DArray sampler, float3 P, float lod);
float textureLod(sampler1DArrayShadow sampler, float3 P, float lod);
$gfloat4 textureLod($gsamplerCubeArray sampler, float4 P, float lod);
$gfloat4 textureOffset($gsampler1D sampler, float P, int offset);
$gfloat4 textureOffset($gsampler1D sampler, float P, int offset, float bias);
$gfloat4 textureOffset($gsampler2D sampler, float2 P, int2 offset);
$gfloat4 textureOffset($gsampler2D sampler, float2 P, int2 offset, float bias);
$gfloat4 textureOffset($gsampler3D sampler, float3 P, int3 offset);
$gfloat4 textureOffset($gsampler3D sampler, float3 P, int3 offset, float bias);
$gfloat4 textureOffset($gsampler2DRect sampler, float2 P, int2 offset);
float textureOffset(sampler2DRectShadow sampler, float3 P, int2 offset);
float textureOffset(sampler1DShadow sampler, float3 P, int offset);
float textureOffset(sampler1DShadow sampler, float3 P, int offset, float bias);
float textureOffset(sampler2DShadow sampler, float3 P, int2 offset);
float textureOffset(sampler2DShadow sampler, float3 P, int2 offset, float bias);
$gfloat4 textureOffset($gsampler1DArray sampler, float2 P, int offset);
$gfloat4 textureOffset($gsampler1DArray sampler, float2 P, int offset, float bias);
$gfloat4 textureOffset($gsampler2DArray sampler, float3 P, int2 offset);
$gfloat4 textureOffset($gsampler2DArray sampler, float3 P, int2 offset, float bias);
float textureOffset(sampler1DArrayShadow sampler, float3 P, int offset);
float textureOffset(sampler1DArrayShadow sampler, float3 P, int offset, float bias);
float textureOffset(sampler2DArrayShadow sampler, float4 P, int2 offset);
float4 texelFetch(samplerBuffer sampler, int P);
$gfloat4 texelFetch($gsampler1D sampler, int P, int lod);
$gfloat4 texelFetch($gsampler2D sampler, int2 P, int lod);
$gfloat4 texelFetch($gsampler2DRect sampler, int2 P);
$gfloat4 texelFetch($gsampler3D sampler, int3 P, int lod);
$gfloat4 texelFetch($gsampler1DArray sampler, int2 P, int lod);
$gfloat4 texelFetch($gsampler2DArray sampler, int3 P, int lod);
$gfloat4 texelFetch($gsampler2DMS sampler, int2 P, int sample);
$gfloat4 texelFetch($gsampler2DMSArray sampler, int3 P, int sample);
$gfloat4 texelFetchOffset($gsampler1D sampler, int P, int lod, int offset);
$gfloat4 texelFetchOffset($gsampler2D sampler, int2 P, int lod, int2 offset);
$gfloat4 texelFetchOffset($gsampler3D sampler, int3 P, int lod, int3 offset);
$gfloat4 texelFetchOffset($gsampler2DRect sampler, int2 P, int2 offset);
$gfloat4 texelFetchOffset($gsampler1DArray sampler, int2 P, int lod, int offset);
$gfloat4 texelFetchOffset($gsampler2DArray sampler, int3 P, int lod, int2 offset);
$gfloat4 textureProjOffset($gsampler1D sampler, float2 P, int offset);
$gfloat4 textureProjOffset($gsampler1D sampler, float2 P, int offset, float bias);
$gfloat4 textureProjOffset($gsampler1D sampler, float4 P, int offset);
$gfloat4 textureProjOffset($gsampler1D sampler, float4 P, int offset, float bias);
$gfloat4 textureProjOffset($gsampler2D sampler, float3 P, int2 offset);
$gfloat4 textureProjOffset($gsampler2D sampler, float3 P, int2 offset, float bias);
$gfloat4 textureProjOffset($gsampler2D sampler, float4 P, int2 offset);
$gfloat4 textureProjOffset($gsampler2D sampler, float4 P, int2 offset, float bias);
$gfloat4 textureProjOffset($gsampler3D sampler, float4 P, int3 offset);
$gfloat4 textureProjOffset($gsampler3D sampler, float4 P, int3 offset, float bias);
$gfloat4 textureProjOffset($gsampler2DRect sampler, float3 P, int2 offset);
$gfloat4 textureProjOffset($gsampler2DRect sampler, float4 P, int2 offset);
float textureProjOffset(sampler2DRectShadow sampler, float4 P, int2 offset);
float textureProjOffset(sampler1DShadow sampler, float4 P, int offset);
float textureProjOffset(sampler1DShadow sampler, float4 P, int offset, float bias);
float textureProjOffset(sampler2DShadow sampler, float4 P, int2 offset);
float textureProjOffset(sampler2DShadow sampler, float4 P, int2 offset, float bias);
$gfloat4 textureLodOffset($gsampler1D sampler, float P, float lod, int offset);
$gfloat4 textureLodOffset($gsampler2D sampler, float2 P, float lod, int2 offset);
$gfloat4 textureLodOffset($gsampler3D sampler, float3 P, float lod, int3 offset);
float textureLodOffset(sampler1DShadow sampler, float3 P, float lod, int offset);
float textureLodOffset(sampler2DShadow sampler, float3 P, float lod, int2 offset);
$gfloat4 textureLodOffset($gsampler1DArray sampler, float2 P, float lod, int offset);
$gfloat4 textureLodOffset($gsampler2DArray sampler, float3 P, float lod, int2 offset);
float textureLodOffset(sampler1DArrayShadow sampler, float3 P, float lod, int offset);
$gfloat4 textureProjLod($gsampler1D sampler, float2 P, float lod);
$gfloat4 textureProjLod($gsampler1D sampler, float4 P, float lod);
$gfloat4 textureProjLod($gsampler2D sampler, float3 P, float lod);
$gfloat4 textureProjLod($gsampler2D sampler, float4 P, float lod);
$gfloat4 textureProjLod($gsampler3D sampler, float4 P, float lod);
float textureProjLod(sampler1DShadow sampler, float4 P, float lod);
float textureProjLod(sampler2DShadow sampler, float4 P, float lod);
$gfloat4 textureProjLodOffset($gsampler1D sampler, float2 P, float lod, int offset);
$gfloat4 textureProjLodOffset($gsampler1D sampler, float4 P, float lod, int offset);
$gfloat4 textureProjLodOffset($gsampler2D sampler, float3 P, float lod, int2 offset);
$gfloat4 textureProjLodOffset($gsampler2D sampler, float4 P, float lod, int2 offset);
$gfloat4 textureProjLodOffset($gsampler3D sampler, float4 P, float lod, int3 offset);
float textureProjLodOffset(sampler1DShadow sampler, float4 P, float lod, int offset);
float textureProjLodOffset(sampler2DShadow sampler, float4 P, float lod, int2 offset);
$gfloat4 textureGrad($gsampler1D sampler, float P, float dPdx, float dPdy);
$gfloat4 textureGrad($gsampler2D sampler, float2 P, float2 dPdx, float2 dPdy);
$gfloat4 textureGrad($gsampler3D sampler, float3 P, float3 dPdx, float3 dPdy);
$gfloat4 textureGrad($gsamplerCube sampler, float3 P, float3 dPdx, float3 dPdy);
$gfloat4 textureGrad($gsampler2DRect sampler, float2 P, float2 dPdx, float2 dPdy);
float textureGrad(sampler2DRectShadow sampler, float3 P, float2 dPdx, float2 dPdy);
float textureGrad(sampler1DShadow sampler, float3 P, float dPdx, float dPdy);
float textureGrad(sampler2DShadow sampler, float3 P, float2 dPdx, float2 dPdy);
float textureGrad(samplerCubeShadow sampler, float4 P, float3 dPdx, float3 dPdy);
$gfloat4 textureGrad($gsampler1DArray sampler, float2 P, float dPdx, float dPdy);
$gfloat4 textureGrad($gsampler2DArray sampler, float3 P, float2 dPdx, float2 dPdy);
float textureGrad(sampler1DArrayShadow sampler, float3 P, float dPdx, float dPdy);
float textureGrad(sampler2DArrayShadow sampler, float4 P, float2 dPdx, float2 dPdy);
$gfloat4 textureGrad($gsamplerCubeArray sampler, float4 P, float3 dPdx, float3 dPdy);
$gfloat4 textureGradOffset($gsampler1D sampler, float P, float dPdx, float dPdy, int offset);
$gfloat4 textureGradOffset($gsampler2D sampler, float2 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureGradOffset($gsampler3D sampler, float3 P, float3 dPdx, float3 dPdy, int3 offset);
$gfloat4 textureGradOffset($gsampler2DRect sampler, float2 P, float2 dPdx, float2 dPdy, int2 offset);
float textureGradOffset(sampler2DRectShadow sampler, float3 P, float2 dPdx, float2 dPdy, int2 offset);
float textureGradOffset(sampler1DShadow sampler, float3 P, float dPdx, float dPdy, int offset );
float textureGradOffset(sampler2DShadow sampler, float3 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureGradOffset($gsampler1DArray sampler, float2 P, float dPdx, float dPdy, int offset);
$gfloat4 textureGradOffset($gsampler2DArray sampler, float3 P, float2 dPdx, float2 dPdy, int2 offset);
float textureGradOffset(sampler1DArrayShadow sampler, float3 P, float dPdx, float dPdy, int offset);
float textureGradOffset(sampler2DArrayShadow sampler, float4 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureProjGrad($gsampler1D sampler, float2 P, float dPdx, float dPdy);
$gfloat4 textureProjGrad($gsampler1D sampler, float4 P, float dPdx, float dPdy);
$gfloat4 textureProjGrad($gsampler2D sampler, float3 P, float2 dPdx, float2 dPdy);
$gfloat4 textureProjGrad($gsampler2D sampler, float4 P, float2 dPdx, float2 dPdy);
$gfloat4 textureProjGrad($gsampler3D sampler, float4 P, float3 dPdx, float3 dPdy);
$gfloat4 textureProjGrad($gsampler2DRect sampler, float3 P, float2 dPdx, float2 dPdy);
$gfloat4 textureProjGrad($gsampler2DRect sampler, float4 P, float2 dPdx, float2 dPdy);
float textureProjGrad(sampler2DRectShadow sampler, float4 P, float2 dPdx, float2 dPdy);
float textureProjGrad(sampler1DShadow sampler, float4 P, float dPdx, float dPdy);
float textureProjGrad(sampler2DShadow sampler, float4 P, float2 dPdx, float2 dPdy);
$gfloat4 textureProjGradOffset($gsampler1D sampler, float2 P, float dPdx, float dPdy, int offset);
$gfloat4 textureProjGradOffset($gsampler1D sampler, float4 P, float dPdx, float dPdy, int offset);
$gfloat4 textureProjGradOffset($gsampler2D sampler, float3 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureProjGradOffset($gsampler2D sampler, float4 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureProjGradOffset($gsampler2DRect sampler, float3 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureProjGradOffset($gsampler2DRect sampler, float4 P, float2 dPdx, float2 dPdy, int2 offset);
float textureProjGradOffset(sampler2DRectShadow sampler, float4 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureProjGradOffset($gsampler3D sampler, float4 P, float3 dPdx, float3 dPdy, int3 offset);
float textureProjGradOffset(sampler1DShadow sampler, float4 P, float dPdx, float dPdy, int offset);
float textureProjGradOffset(sampler2DShadow sampler, float4 P, float2 dPdx, float2 dPdy, int2 offset);
$gfloat4 textureGather($gsampler2D sampler, float2 P);
$gfloat4 textureGather($gsampler2D sampler, float2 P, int comp);
$gfloat4 textureGather($gsampler2DArray sampler, float3 P);
$gfloat4 textureGather($gsampler2DArray sampler, float3 P, int comp);
$gfloat4 textureGather($gsamplerCube sampler, float3 P);
$gfloat4 textureGather($gsamplerCube sampler, float3 P, int comp);
$gfloat4 textureGather($gsamplerCubeArray sampler, float4 P);
$gfloat4 textureGather($gsamplerCubeArray sampler, float4 P, int comp);
$gfloat4 textureGather($gsampler2DRect sampler, float2 P);
$gfloat4 textureGather($gsampler2DRect sampler, float2 P, int comp);
float4 textureGather(sampler2DShadow sampler, float2 P, float refZ);
float4 textureGather(sampler2DArrayShadow sampler, float3 P, float refZ);
float4 textureGather(samplerCubeShadow sampler, float3 P, float refZ);
float4 textureGather(samplerCubeArrayShadow sampler, float4 P, float refZ);
float4 textureGather(sampler2DRectShadow sampler, float2 P, float refZ);
$gfloat4 textureGatherOffset($gsampler2D sampler, float2 P, int2 offset);
$gfloat4 textureGatherOffset($gsampler2D sampler, float2 P, int2 offset, int comp);
$gfloat4 textureGatherOffset($gsampler2DArray sampler, float3 P, int2 offset);
$gfloat4 textureGatherOffset($gsampler2DArray sampler, float3 P, int2 offset, int comp);
$gfloat4 textureGatherOffset($gsampler2DRect sampler, float2 P, int2 offset);
$gfloat4 textureGatherOffset($gsampler2DRect sampler, float2 P, int2 offset, int comp);
float4 textureGatherOffset(sampler2DShadow sampler, float2 P, float refZ, int2 offset);
float4 textureGatherOffset(sampler2DArrayShadow sampler, float3 P, float refZ, int2 offset);
float4 textureGatherOffset(sampler2DRectShadow sampler, float2 P, float refZ, int2 offset);
$gfloat4 textureGatherOffsets($gsampler2D sampler, float2 P, int2 offsets[4]);
$gfloat4 textureGatherOffsets($gsampler2D sampler, float2 P, int2 offsets[4], int comp);
$gfloat4 textureGatherOffsets($gsampler2DArray sampler, float3 P, int2 offsets[4]);
$gfloat4 textureGatherOffsets($gsampler2DArray sampler, float3 P, int2 offsets[4], int comp);
$gfloat4 textureGatherOffsets($gsampler2DRect sampler, float2 P, int2 offsets[4]);
$gfloat4 textureGatherOffsets($gsampler2DRect sampler, float2 P, int2 offsets[4], int comp);
float4 textureGatherOffsets(sampler2DShadow sampler, float2 P, float refZ, int2 offsets[4]);
float4 textureGatherOffsets(sampler2DArrayShadow sampler, float3 P, float refZ, int2 offsets[4]);
float4 textureGatherOffsets(sampler2DRectShadow sampler, float2 P, float refZ, int2 offsets[4]);
uint atomicCounterIncrement(atomic_uint c);
uint atomicCounter(atomic_uint c);
uint atomicAdd(inout uint mem, uint data);
int atomicAdd(inout int mem, int data);
uint atomicMin(inout uint mem, uint data);
int atomicMin(inout int mem, int data);
uint atomicMax(inout uint mem, uint data);
int atomicMax(inout int mem, int data);
uint atomicAnd(inout uint mem, uint data);
int atomicAnd(inout int mem, int data);
uint atomicOr(inout uint mem, uint data);
int atomicOr(inout int mem, int data);
uint atomicXor(inout uint mem, uint data);
int atomicXor(inout int mem, int data);
uint atomicExchange(inout uint mem, uint data);
int atomicExchange(inout int mem, int data);
uint atomicCompSwap(inout uint mem, uint compare, uint data);
int atomicCompSwap(inout int mem, int compare, int data);
*/
// section 8.12 Additional Image Functions will go here if and when we add
// support for them
float4 imageLoad(image2D image, int2 P);
int4 imageLoad(iimage2D image, int2 P);
$genType dFdx($genType p);
$genType dFdy($genType p);
float interpolateAtSample(float interpolant, int sample);
float2 interpolateAtSample(float2 interpolant, int sample);
float3 interpolateAtSample(float3 interpolant, int sample);
float4 interpolateAtSample(float4 interpolant, int sample);
float interpolateAtOffset(float interpolant, float2 offset);
float2 interpolateAtOffset(float2 interpolant, float2 offset);
float3 interpolateAtOffset(float3 interpolant, float2 offset);
float4 interpolateAtOffset(float4 interpolant, float2 offset);

/*
$genType fwidth($genType p);
$genType fwidthCoarse($genType p);
$genType fwidthFine($genType p);
void barrier();
void memoryBarrier();
void memoryBarrierAtomicCounter();
void memoryBarrierBuffer();
void memoryBarrierShared();
void memoryBarrierImage();
void groupMemoryBarrier();
*/

)