xref: /aosp_15_r20/external/angle/third_party/glslang/src/Test/spv.floatFetch.frag (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1#version 450 core
2
3#extension GL_ARB_sparse_texture2: enable
4#extension GL_ARB_sparse_texture_clamp: enable
5#extension GL_AMD_texture_gather_bias_lod: enable
6
7layout(set = 0, binding =  0) uniform sampler1D            s1D;
8layout(set = 0, binding =  1) uniform sampler2D            s2D;
9layout(set = 0, binding =  2) uniform sampler3D            s3D;
10layout(set = 0, binding =  3) uniform sampler2DRect        s2DRect;
11layout(set = 0, binding =  4) uniform samplerCube          sCube;
12layout(set = 0, binding =  5) uniform samplerBuffer        sBuffer;
13layout(set = 0, binding =  6) uniform sampler2DMS          s2DMS;
14layout(set = 0, binding =  7) uniform sampler1DArray       s1DArray;
15layout(set = 0, binding =  8) uniform sampler2DArray       s2DArray;
16layout(set = 0, binding =  9) uniform samplerCubeArray     sCubeArray;
17layout(set = 0, binding = 10) uniform sampler2DMSArray     s2DMSArray;
18
19layout(set = 0, binding = 11) uniform sampler1DShadow          s1DShadow;
20layout(set = 0, binding = 12) uniform sampler2DShadow          s2DShadow;
21layout(set = 0, binding = 13) uniform sampler2DRectShadow      s2DRectShadow;
22layout(set = 0, binding = 14) uniform samplerCubeShadow        sCubeShadow;
23layout(set = 0, binding = 15) uniform sampler1DArrayShadow     s1DArrayShadow;
24layout(set = 0, binding = 16) uniform sampler2DArrayShadow     s2DArrayShadow;
25layout(set = 0, binding = 17) uniform samplerCubeArrayShadow   sCubeArrayShadow;
26
27layout(set = 1, binding =  0) layout(rgba16f) uniform image1D          i1D;
28layout(set = 1, binding =  1) layout(rgba16f) uniform image2D          i2D;
29layout(set = 1, binding =  2) layout(rgba16f) uniform image3D          i3D;
30layout(set = 1, binding =  3) layout(rgba16f) uniform image2DRect      i2DRect;
31layout(set = 1, binding =  4) layout(rgba16f) uniform imageCube        iCube;
32layout(set = 1, binding =  5) layout(rgba16f) uniform image1DArray     i1DArray;
33layout(set = 1, binding =  6) layout(rgba16f) uniform image2DArray     i2DArray;
34layout(set = 1, binding =  7) layout(rgba16f) uniform imageCubeArray   iCubeArray;
35layout(set = 1, binding =  8) layout(rgba16f) uniform imageBuffer      iBuffer;
36layout(set = 1, binding =  9) layout(rgba16f) uniform image2DMS        i2DMS;
37layout(set = 1, binding = 10) layout(rgba16f) uniform image2DMSArray   i2DMSArray;
38
39layout(set = 2, binding =  0) uniform texture1D           t1D;
40layout(set = 2, binding =  1) uniform texture2D           t2D;
41layout(set = 2, binding =  2) uniform texture3D           t3D;
42layout(set = 2, binding =  3) uniform texture2DRect       t2DRect;
43layout(set = 2, binding =  4) uniform textureCube         tCube;
44layout(set = 2, binding =  5) uniform texture1DArray      t1DArray;
45layout(set = 2, binding =  6) uniform texture2DArray      t2DArray;
46layout(set = 2, binding =  7) uniform textureCubeArray    tCubeArray;
47layout(set = 2, binding =  8) uniform textureBuffer       tBuffer;
48layout(set = 2, binding =  9) uniform texture2DMS         t2DMS;
49layout(set = 2, binding = 10) uniform texture2DMSArray    t2DMSArray;
50
51layout(set = 2, binding = 11) uniform sampler s;
52layout(set = 2, binding = 12) uniform samplerShadow sShadow;
53
54layout(set = 3, binding = 0, input_attachment_index = 0) uniform subpassInput   subpass;
55layout(set = 3, binding = 1, input_attachment_index = 0) uniform subpassInputMS subpassMS;
56
57layout(location =  0) in float c1;
58layout(location =  1) in vec2  c2;
59layout(location =  2) in vec3  c3;
60layout(location =  3) in vec4  c4;
61
62layout(location =  4) in float compare;
63layout(location =  5) in float lod;
64layout(location =  6) in float bias;
65layout(location =  7) in float lodClamp;
66
67layout(location =  8) in float dPdxy1;
68layout(location =  9) in vec2  dPdxy2;
69layout(location = 10) in vec3  dPdxy3;
70
71const int   offset1 = 1;
72const ivec2 offset2 = ivec2(1);
73const ivec3 offset3 = ivec3(1);
74const ivec2 offsets[4] = { offset2, offset2, offset2, offset2 };
75
76layout(location = 0) out vec4 fragColor;
77
78vec4 testTexture()
79{
80    vec4 texel = vec4(0.0);
81
82    texel   += texture(s1D, c1);
83    texel   += texture(s2D, c2);
84    texel   += texture(s3D, c3);
85    texel   += texture(sCube, c3);
86    texel.x += texture(s1DShadow, c3);
87    texel.x += texture(s2DShadow, c3);
88    texel.x += texture(sCubeShadow, c4);
89    texel   += texture(s1DArray, c2);
90    texel   += texture(s2DArray, c3);
91    texel   += texture(sCubeArray, c4);
92    texel.x += texture(s1DArrayShadow, c3);
93    texel.x += texture(s2DArrayShadow, c4);
94    texel   += texture(s2DRect, c2);
95    texel.x += texture(s2DRectShadow, c3);
96    texel.x += texture(sCubeArrayShadow, c4, compare);
97
98    return texel;
99}
100
101vec4 testTextureProj()
102{
103    vec4 texel = vec4(0.0);
104
105    texel   += textureProj(s1D, c2);
106    texel   += textureProj(s1D, c4);
107    texel   += textureProj(s2D, c3);
108    texel   += textureProj(s2D, c4);
109    texel   += textureProj(s3D, c4);
110    texel.x += textureProj(s1DShadow, c4);
111    texel.x += textureProj(s2DShadow, c4);
112    texel   += textureProj(s2DRect, c3);
113    texel   += textureProj(s2DRect, c4);
114    texel.x += textureProj(s2DRectShadow, c4);
115
116    return texel;
117}
118
119vec4 testTextureLod()
120{
121    vec4 texel = vec4(0.0);
122
123    texel   += textureLod(s1D, c1, lod);
124    texel   += textureLod(s2D, c2, lod);
125    texel   += textureLod(s3D, c3, lod);
126    texel   += textureLod(sCube, c3, lod);
127    texel.x += textureLod(s1DShadow, c3, lod);
128    texel.x += textureLod(s2DShadow, c3, lod);
129    texel   += textureLod(s1DArray, c2, lod);
130    texel   += textureLod(s2DArray, c3, lod);
131    texel.x += textureLod(s1DArrayShadow, c3, lod);
132    texel   += textureLod(sCubeArray, c4, lod);
133
134    return texel;
135}
136
137vec4 testTextureOffset()
138{
139    vec4 texel = vec4(0.0);
140
141    texel   += textureOffset(s1D, c1, offset1);
142    texel   += textureOffset(s2D, c2, offset2);
143    texel   += textureOffset(s3D, c3, offset3);
144    texel   += textureOffset(s2DRect, c2, offset2);
145    texel.x += textureOffset(s2DRectShadow, c3, offset2);
146    texel.x += textureOffset(s1DShadow, c3, offset1);
147    texel.x += textureOffset(s2DShadow, c3, offset2);
148    texel   += textureOffset(s1DArray, c2, offset1);
149    texel   += textureOffset(s2DArray, c3, offset2);
150    texel.x += textureOffset(s1DArrayShadow, c3, offset1);
151    texel.x += textureOffset(s2DArrayShadow, c4, offset2);
152
153    return texel;
154}
155
156vec4 testTextureProjOffset()
157{
158    vec4 texel = vec4(0.0);
159
160    texel   += textureProjOffset(s1D, c2, offset1);
161    texel   += textureProjOffset(s1D, c4, offset1);
162    texel   += textureProjOffset(s2D, c3, offset2);
163    texel   += textureProjOffset(s2D, c4, offset2);
164    texel   += textureProjOffset(s3D, c4, offset3);
165    texel   += textureProjOffset(s2DRect, c3, offset2);
166    texel   += textureProjOffset(s2DRect, c4, offset2);
167    texel.x += textureProjOffset(s2DRectShadow, c4, offset2);
168    texel.x += textureProjOffset(s1DShadow, c4, offset1);
169    texel.x += textureProjOffset(s2DShadow, c4, offset2);
170
171    return texel;
172}
173
174vec4 testTextureLodOffset()
175{
176    vec4 texel = vec4(0.0);
177
178    texel   += textureLodOffset(s1D, c1, lod, offset1);
179    texel   += textureLodOffset(s2D, c2, lod, offset2);
180    texel   += textureLodOffset(s3D, c3, lod, offset3);
181    texel.x += textureLodOffset(s1DShadow, c3, lod, offset1);
182    texel.x += textureLodOffset(s2DShadow, c3, lod, offset2);
183    texel   += textureLodOffset(s1DArray, c2, lod, offset1);
184    texel   += textureLodOffset(s2DArray, c3, lod, offset2);
185    texel.x += textureLodOffset(s1DArrayShadow, c3, lod, offset1);
186
187    return texel;
188}
189
190vec4 testTextureProjLodOffset()
191{
192    vec4 texel = vec4(0.0);
193
194    texel   += textureProjLodOffset(s1D, c2, lod, offset1);
195    texel   += textureProjLodOffset(s1D, c4, lod, offset1);
196    texel   += textureProjLodOffset(s2D, c3, lod, offset2);
197    texel   += textureProjLodOffset(s2D, c4, lod, offset2);
198    texel   += textureProjLodOffset(s3D, c4, lod, offset3);
199    texel.x += textureProjLodOffset(s1DShadow, c4, lod, offset1);
200    texel.x += textureProjLodOffset(s2DShadow, c4, lod, offset2);
201
202    return texel;
203}
204
205vec4 testTexelFetch()
206{
207    vec4 texel = vec4(0.0);
208
209    texel   += texelFetch(s1D, int(c1), int(lod));
210    texel   += texelFetch(s2D, ivec2(c2), int(lod));
211    texel   += texelFetch(s3D, ivec3(c3), int(lod));
212    texel   += texelFetch(s2DRect, ivec2(c2));
213    texel   += texelFetch(s1DArray, ivec2(c2), int(lod));
214    texel   += texelFetch(s2DArray, ivec3(c3), int(lod));
215    texel   += texelFetch(sBuffer, int(c1));
216    texel   += texelFetch(s2DMS, ivec2(c2), 1);
217    texel   += texelFetch(s2DMSArray, ivec3(c3), 2);
218
219    return texel;
220}
221
222vec4 testTexelFetchOffset()
223{
224    vec4 texel = vec4(0.0);
225
226    texel   += texelFetchOffset(s1D, int(c1), int(lod), offset1);
227    texel   += texelFetchOffset(s2D, ivec2(c2), int(lod), offset2);
228    texel   += texelFetchOffset(s3D, ivec3(c3), int(lod), offset3);
229    texel   += texelFetchOffset(s2DRect, ivec2(c2), offset2);
230    texel   += texelFetchOffset(s1DArray, ivec2(c2), int(lod), offset1);
231    texel   += texelFetchOffset(s2DArray, ivec3(c3), int(lod), offset2);
232
233    return texel;
234}
235
236vec4 testTextureGrad()
237{
238    vec4 texel = vec4(0.0);
239
240    texel   += textureGrad(s1D, c1, dPdxy1, dPdxy1);
241    texel   += textureGrad(s2D, c2, dPdxy2, dPdxy2);
242    texel   += textureGrad(s3D, c3, dPdxy3, dPdxy3);
243    texel   += textureGrad(sCube, c3, dPdxy3, dPdxy3);
244    texel   += textureGrad(s2DRect, c2, dPdxy2, dPdxy2);
245    texel.x += textureGrad(s2DRectShadow, c3, dPdxy2, dPdxy2);
246    texel.x += textureGrad(s1DShadow, c3, dPdxy1, dPdxy1);
247    texel.x += textureGrad(s2DShadow, c3, dPdxy2, dPdxy2);
248    texel.x += textureGrad(sCubeShadow, c4, dPdxy3, dPdxy3);
249    texel   += textureGrad(s1DArray, c2, dPdxy1, dPdxy1);
250    texel   += textureGrad(s2DArray, c3, dPdxy2, dPdxy2);
251    texel.x += textureGrad(s1DArrayShadow, c3, dPdxy1, dPdxy1);
252    texel.x += textureGrad(s2DArrayShadow, c4, dPdxy2, dPdxy2);
253    texel   += textureGrad(sCubeArray, c4, dPdxy3, dPdxy3);
254
255    return texel;
256}
257
258vec4 testTextureGradOffset()
259{
260    vec4 texel = vec4(0.0);
261
262    texel   += textureGradOffset(s1D, c1, dPdxy1, dPdxy1, offset1);
263    texel   += textureGradOffset(s2D, c2, dPdxy2, dPdxy2, offset2);
264    texel   += textureGradOffset(s3D, c3, dPdxy3, dPdxy3, offset3);
265    texel   += textureGradOffset(s2DRect, c2, dPdxy2, dPdxy2, offset2);
266    texel.x += textureGradOffset(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2);
267    texel.x += textureGradOffset(s1DShadow, c3, dPdxy1, dPdxy1, offset1);
268    texel.x += textureGradOffset(s2DShadow, c3, dPdxy2, dPdxy2, offset2);
269    texel   += textureGradOffset(s1DArray, c2, dPdxy1, dPdxy1, offset1);
270    texel   += textureGradOffset(s2DArray, c3, dPdxy2, dPdxy2, offset2);
271    texel.x += textureGradOffset(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1);
272    texel.x += textureGradOffset(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2);
273
274    return texel;
275}
276
277vec4 testTextureProjGrad()
278{
279    vec4 texel = vec4(0.0);
280
281    texel   += textureProjGrad(s1D, c2, dPdxy1, dPdxy1);
282    texel   += textureProjGrad(s1D, c4, dPdxy1, dPdxy1);
283    texel   += textureProjGrad(s2D, c3, dPdxy2, dPdxy2);
284    texel   += textureProjGrad(s2D, c4, dPdxy2, dPdxy2);
285    texel   += textureProjGrad(s3D, c4, dPdxy3, dPdxy3);
286    texel   += textureProjGrad(s2DRect, c3, dPdxy2, dPdxy2);
287    texel   += textureProjGrad(s2DRect, c4, dPdxy2, dPdxy2);
288    texel.x += textureProjGrad(s2DRectShadow, c4, dPdxy2, dPdxy2);
289    texel.x += textureProjGrad(s1DShadow, c4, dPdxy1, dPdxy1);
290    texel.x += textureProjGrad(s2DShadow, c4, dPdxy2, dPdxy2);
291
292    return texel;
293}
294
295vec4 testTextureProjGradoffset()
296{
297    vec4 texel = vec4(0.0);
298
299    texel   += textureProjGradOffset(s1D, c2, dPdxy1, dPdxy1, offset1);
300    texel   += textureProjGradOffset(s1D, c4, dPdxy1, dPdxy1, offset1);
301    texel   += textureProjGradOffset(s2D, c3, dPdxy2, dPdxy2, offset2);
302    texel   += textureProjGradOffset(s2D, c4, dPdxy2, dPdxy2, offset2);
303    texel   += textureProjGradOffset(s2DRect, c3, dPdxy2, dPdxy2, offset2);
304    texel   += textureProjGradOffset(s2DRect, c4, dPdxy2, dPdxy2, offset2);
305    texel.x += textureProjGradOffset(s2DRectShadow, c4, dPdxy2, dPdxy2, offset2);
306    texel   += textureProjGradOffset(s3D, c4, dPdxy3, dPdxy3, offset3);
307    texel.x += textureProjGradOffset(s1DShadow, c4, dPdxy1, dPdxy1, offset1);
308    texel.x += textureProjGradOffset(s2DShadow, c4, dPdxy2, dPdxy2, offset2);
309
310    return texel;
311}
312
313vec4 testTextureGather()
314{
315    vec4 texel = vec4(0.0);
316
317    texel   += textureGather(s2D, c2, 0);
318    texel   += textureGather(s2DArray, c3, 0);
319    texel   += textureGather(sCube, c3, 0);
320    texel   += textureGather(sCubeArray, c4, 0);
321    texel   += textureGather(s2DRect, c2, 0);
322    texel   += textureGather(s2DShadow, c2, compare);
323    texel   += textureGather(s2DArrayShadow, c3, compare);
324    texel   += textureGather(sCubeShadow, c3, compare);
325    texel   += textureGather(sCubeArrayShadow, c4, compare);
326    texel   += textureGather(s2DRectShadow, c2, compare);
327
328    return texel;
329}
330
331vec4 testTextureGatherOffset()
332{
333    vec4 texel = vec4(0.0);
334
335    texel   += textureGatherOffset(s2D, c2, offset2, 0);
336    texel   += textureGatherOffset(s2DArray, c3, offset2, 0);
337    texel   += textureGatherOffset(s2DRect, c2, offset2, 0);
338    texel   += textureGatherOffset(s2DShadow, c2, compare, offset2);
339    texel   += textureGatherOffset(s2DArrayShadow, c3, compare, offset2);
340    texel   += textureGatherOffset(s2DRectShadow, c2, compare, offset2);
341
342    return texel;
343}
344
345vec4 testTextureGatherOffsets()
346{
347    vec4 texel = vec4(0.0);
348
349    texel   += textureGatherOffsets(s2D, c2, offsets, 0);
350    texel   += textureGatherOffsets(s2DArray, c3, offsets, 0);
351    texel   += textureGatherOffsets(s2DRect, c2, offsets, 0);
352    texel   += textureGatherOffsets(s2DShadow, c2, compare, offsets);
353    texel   += textureGatherOffsets(s2DArrayShadow, c3, compare, offsets);
354    texel   += textureGatherOffsets(s2DRectShadow, c2, compare, offsets);
355
356    return texel;
357}
358
359vec4 testTextureGatherLod()
360{
361    vec4 texel = vec4(0.0);
362
363    texel   += textureGatherLodAMD(s2D, c2, lod, 0);
364    texel   += textureGatherLodAMD(s2DArray, c3, lod, 0);
365    texel   += textureGatherLodAMD(sCube, c3, lod, 0);
366    texel   += textureGatherLodAMD(sCubeArray, c4, lod, 0);
367
368    return texel;
369}
370
371vec4 testTextureGatherLodOffset()
372{
373    vec4 texel = vec4(0.0);
374
375    texel   += textureGatherLodOffsetAMD(s2D, c2, lod, offset2, 0);
376    texel   += textureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, 0);
377
378    return texel;
379}
380
381vec4 testTextureGatherLodOffsets()
382{
383    vec4 texel = vec4(0.0);
384
385    texel   += textureGatherLodOffsetsAMD(s2D, c2, lod, offsets, 0);
386    texel   += textureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, 0);
387
388    return texel;
389}
390
391ivec4 testTextureSize()
392{
393    ivec4 size = ivec4(0);
394
395    size.x      += textureSize(s1D, int(lod));
396    size.xy     += textureSize(s2D, int(lod));
397    size.xyz    += textureSize(s3D, int(lod));
398    size.xy     += textureSize(sCube, int(lod));
399    size.x      += textureSize(s1DShadow, int(lod));
400    size.xy     += textureSize(s2DShadow, int(lod));
401    size.xy     += textureSize(sCubeShadow, int(lod));
402    size.xyz    += textureSize(sCubeArray, int(lod));
403    size.xyz    += textureSize(sCubeArrayShadow, int(lod));
404    size.xy     += textureSize(s2DRect);
405    size.xy     += textureSize(s2DRectShadow);
406    size.xy     += textureSize(s1DArray, int(lod));
407    size.xyz    += textureSize(s2DArray, int(lod));
408    size.xy     += textureSize(s1DArrayShadow, int(lod));
409    size.xyz    += textureSize(s2DArrayShadow, int(lod));
410    size.x      += textureSize(sBuffer);
411    size.xy     += textureSize(s2DMS);
412    size.xyz    += textureSize(s2DMSArray);
413
414    return size;
415}
416
417vec2 testTextureQueryLod()
418{
419    vec2 lod = vec2(0.0);
420
421    lod  += textureQueryLod(s1D, c1);
422    lod  += textureQueryLod(s2D, c2);
423    lod  += textureQueryLod(s3D, c3);
424    lod  += textureQueryLod(sCube, c3);
425    lod  += textureQueryLod(s1DArray, c1);
426    lod  += textureQueryLod(s2DArray, c2);
427    lod  += textureQueryLod(sCubeArray, c3);
428    lod  += textureQueryLod(s1DShadow, c1);
429    lod  += textureQueryLod(s2DShadow, c2);
430    lod  += textureQueryLod(sCubeArrayShadow, c3);
431    lod  += textureQueryLod(s1DArrayShadow, c1);
432    lod  += textureQueryLod(s2DArrayShadow, c2);
433    lod  += textureQueryLod(sCubeArrayShadow, c3);
434
435    return lod;
436}
437
438int testTextureQueryLevels()
439{
440    int levels = 0;
441
442    levels  += textureQueryLevels(s1D);
443    levels  += textureQueryLevels(s2D);
444    levels  += textureQueryLevels(s3D);
445    levels  += textureQueryLevels(sCube);
446    levels  += textureQueryLevels(s1DShadow);
447    levels  += textureQueryLevels(s2DShadow);
448    levels  += textureQueryLevels(sCubeShadow);
449    levels  += textureQueryLevels(sCubeArray);
450    levels  += textureQueryLevels(sCubeArrayShadow);
451    levels  += textureQueryLevels(s1DArray);
452    levels  += textureQueryLevels(s2DArray);
453    levels  += textureQueryLevels(s1DArrayShadow);
454    levels  += textureQueryLevels(s2DArrayShadow);
455
456    return levels;
457}
458
459int testTextureSamples()
460{
461    int samples = 0;
462
463    samples += textureSamples(s2DMS);
464    samples += textureSamples(s2DMSArray);
465
466    return samples;
467}
468
469vec4 testImageLoad()
470{
471    vec4 texel = vec4(0.0);
472
473    texel += imageLoad(i1D, int(c1));
474    texel += imageLoad(i2D, ivec2(c2));
475    texel += imageLoad(i3D, ivec3(c3));
476    texel += imageLoad(i2DRect, ivec2(c2));
477    texel += imageLoad(iCube, ivec3(c3));
478    texel += imageLoad(iBuffer, int(c1));
479    texel += imageLoad(i1DArray, ivec2(c2));
480    texel += imageLoad(i2DArray, ivec3(c3));
481    texel += imageLoad(iCubeArray, ivec3(c3));
482    texel += imageLoad(i2DMS, ivec2(c2), 1);
483    texel += imageLoad(i2DMSArray, ivec3(c3), 1);
484
485    return texel;
486}
487
488void testImageStore(vec4 data)
489{
490    imageStore(i1D, int(c1), data);
491    imageStore(i2D, ivec2(c2), data);
492    imageStore(i3D, ivec3(c3), data);
493    imageStore(i2DRect, ivec2(c2), data);
494    imageStore(iCube, ivec3(c3), data);
495    imageStore(iBuffer, int(c1), data);
496    imageStore(i1DArray, ivec2(c2), data);
497    imageStore(i2DArray, ivec3(c3), data);
498    imageStore(iCubeArray, ivec3(c3), data);
499    imageStore(i2DMS, ivec2(c2), 1, data);
500    imageStore(i2DMSArray, ivec3(c3), 1, data);
501}
502
503vec4 testSparseTexture()
504{
505    vec4 texel = vec4(0.0);
506
507    sparseTextureARB(s2D, c2, texel);
508    sparseTextureARB(s3D, c3, texel);
509    sparseTextureARB(sCube, c3, texel);
510    sparseTextureARB(s2DShadow, c3, texel.x);
511    sparseTextureARB(sCubeShadow, c4, texel.x);
512    sparseTextureARB(s2DArray, c3, texel);
513    sparseTextureARB(sCubeArray, c4, texel);
514    sparseTextureARB(s2DArrayShadow, c4, texel.x);
515    sparseTextureARB(s2DRect, c2, texel);
516    sparseTextureARB(s2DRectShadow, c3, texel.x);
517    sparseTextureARB(sCubeArrayShadow, c4, compare, texel.x);
518
519    return texel;
520}
521
522vec4 testSparseTextureLod()
523{
524    vec4 texel = vec4(0.0);
525
526    sparseTextureLodARB(s2D, c2, lod, texel);
527    sparseTextureLodARB(s3D, c3, lod, texel);
528    sparseTextureLodARB(sCube, c3, lod, texel);
529    sparseTextureLodARB(s2DShadow, c3, lod, texel.x);
530    sparseTextureLodARB(s2DArray, c3, lod, texel);
531    sparseTextureLodARB(sCubeArray, c4, lod, texel);
532
533    return texel;
534}
535
536vec4 testSparseTextureOffset()
537{
538    vec4 texel = vec4(0.0);
539
540    sparseTextureOffsetARB(s2D, c2, offset2, texel);
541    sparseTextureOffsetARB(s3D, c3, offset3, texel);
542    sparseTextureOffsetARB(s2DRect, c2, offset2, texel);
543    sparseTextureOffsetARB(s2DRectShadow, c3, offset2, texel.x);
544    sparseTextureOffsetARB(s2DShadow, c3, offset2, texel.x);
545    sparseTextureOffsetARB(s2DArray, c3, offset2, texel);
546    sparseTextureOffsetARB(s2DArrayShadow, c4, offset2, texel.x);
547
548    return texel;
549}
550
551vec4 testSparseTextureLodOffset()
552{
553    vec4 texel = vec4(0.0);
554
555    sparseTextureLodOffsetARB(s2D, c2, lod, offset2, texel);
556    sparseTextureLodOffsetARB(s3D, c3, lod, offset3, texel);
557    sparseTextureLodOffsetARB(s2DShadow, c3, lod, offset2, texel.x);
558    sparseTextureLodOffsetARB(s2DArray, c3, lod, offset2, texel);
559
560    return texel;
561}
562
563vec4 testSparseTextureGrad()
564{
565    vec4 texel = vec4(0.0);
566
567    sparseTextureGradARB(s2D, c2, dPdxy2, dPdxy2, texel);
568    sparseTextureGradARB(s3D, c3, dPdxy3, dPdxy3, texel);
569    sparseTextureGradARB(sCube, c3, dPdxy3, dPdxy3, texel);
570    sparseTextureGradARB(s2DRect, c2, dPdxy2, dPdxy2, texel);
571    sparseTextureGradARB(s2DRectShadow, c3, dPdxy2, dPdxy2, texel.x);
572    sparseTextureGradARB(s2DShadow, c3, dPdxy2, dPdxy2, texel.x);
573    sparseTextureGradARB(sCubeShadow, c4, dPdxy3, dPdxy3, texel.x);
574    sparseTextureGradARB(s2DArray, c3, dPdxy2, dPdxy2, texel);
575    sparseTextureGradARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, texel.x);
576    sparseTextureGradARB(sCubeArray, c4, dPdxy3, dPdxy3, texel);
577
578    return texel;
579}
580
581vec4 testSparseTextureGradOffset()
582{
583    vec4 texel = vec4(0.0);
584
585    sparseTextureGradOffsetARB(s2D, c2, dPdxy2, dPdxy2, offset2, texel);
586    sparseTextureGradOffsetARB(s3D, c3, dPdxy3, dPdxy3, offset3, texel);
587    sparseTextureGradOffsetARB(s2DRect, c2, dPdxy2, dPdxy2, offset2, texel);
588    sparseTextureGradOffsetARB(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);
589    sparseTextureGradOffsetARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);
590    sparseTextureGradOffsetARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, texel);
591    sparseTextureGradOffsetARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, texel.x);
592
593    return texel;
594}
595
596vec4 testSparseTexelFetch()
597{
598    vec4 texel = vec4(0.0);
599
600    sparseTexelFetchARB(s2D, ivec2(c2), int(lod), texel);
601    sparseTexelFetchARB(s3D, ivec3(c3), int(lod), texel);
602    sparseTexelFetchARB(s2DRect, ivec2(c2), texel);
603    sparseTexelFetchARB(s2DArray, ivec3(c3), int(lod), texel);
604    sparseTexelFetchARB(s2DMS, ivec2(c2), 1, texel);
605    sparseTexelFetchARB(s2DMSArray, ivec3(c3), 2, texel);
606
607    return texel;
608}
609
610vec4 testSparseTexelFetchOffset()
611{
612    vec4 texel = vec4(0.0);
613
614    sparseTexelFetchOffsetARB(s2D, ivec2(c2), int(lod), offset2, texel);
615    sparseTexelFetchOffsetARB(s3D, ivec3(c3), int(lod), offset3, texel);
616    sparseTexelFetchOffsetARB(s2DRect, ivec2(c2), offset2, texel);
617    sparseTexelFetchOffsetARB(s2DArray, ivec3(c3), int(lod), offset2, texel);
618
619    return texel;
620}
621
622vec4 testSparseTextureGather()
623{
624    vec4 texel = vec4(0.0);
625
626    sparseTextureGatherARB(s2D, c2, texel, 0);
627    sparseTextureGatherARB(s2DArray, c3, texel, 0);
628    sparseTextureGatherARB(sCube, c3, texel, 0);
629    sparseTextureGatherARB(sCubeArray, c4, texel, 0);
630    sparseTextureGatherARB(s2DRect, c2, texel, 0);
631    sparseTextureGatherARB(s2DShadow, c2, compare, texel);
632    sparseTextureGatherARB(s2DArrayShadow, c3, compare, texel);
633    sparseTextureGatherARB(sCubeShadow, c3, compare, texel);
634    sparseTextureGatherARB(sCubeArrayShadow, c4, compare, texel);
635    sparseTextureGatherARB(s2DRectShadow, c2, compare, texel);
636
637    return texel;
638}
639
640vec4 testSparseTextureGatherOffset()
641{
642    vec4 texel = vec4(0.0);
643
644    sparseTextureGatherOffsetARB(s2D, c2, offset2, texel, 0);
645    sparseTextureGatherOffsetARB(s2DArray, c3, offset2, texel, 0);
646    sparseTextureGatherOffsetARB(s2DRect, c2, offset2, texel, 0);
647    sparseTextureGatherOffsetARB(s2DShadow, c2, compare, offset2, texel);
648    sparseTextureGatherOffsetARB(s2DArrayShadow, c3, compare, offset2, texel);
649    sparseTextureGatherOffsetARB(s2DRectShadow, c2, compare, offset2, texel);
650
651    return texel;
652}
653
654vec4 testSparseTextureGatherOffsets()
655{
656    vec4 texel = vec4(0.0);
657    const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
658
659    sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel, 0);
660    sparseTextureGatherOffsetsARB(s2DArray, c3, constOffsets, texel, 0);
661    sparseTextureGatherOffsetsARB(s2DRect, c2, constOffsets, texel, 0);
662    sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, constOffsets, texel);
663    sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, constOffsets, texel);
664    sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, constOffsets, texel);
665
666    return texel;
667}
668
669vec4 testSparseTextureGatherLod()
670{
671    vec4 texel = vec4(0.0);
672
673    sparseTextureGatherLodAMD(s2D, c2, lod, texel, 0);
674    sparseTextureGatherLodAMD(s2DArray, c3, lod, texel, 0);
675    sparseTextureGatherLodAMD(sCube, c3, lod, texel, 0);
676    sparseTextureGatherLodAMD(sCubeArray, c4, lod, texel, 0);
677
678    return texel;
679}
680
681vec4 testSparseTextureGatherLodOffset()
682{
683    vec4 texel = vec4(0.0);
684
685    sparseTextureGatherLodOffsetAMD(s2D, c2, lod, offset2, texel, 0);
686    sparseTextureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, texel, 0);
687
688    return texel;
689}
690
691vec4 testSparseTextureGatherLodOffsets()
692{
693    vec4 texel = vec4(0.0);
694
695    sparseTextureGatherLodOffsetsAMD(s2D, c2, lod, offsets, texel, 0);
696    sparseTextureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, texel, 0);
697
698    return texel;
699}
700
701vec4 testSparseImageLoad()
702{
703    vec4 texel = vec4(0.0);
704
705    sparseImageLoadARB(i2D, ivec2(c2), texel);
706    sparseImageLoadARB(i3D, ivec3(c3), texel);
707    sparseImageLoadARB(i2DRect, ivec2(c2), texel);
708    sparseImageLoadARB(iCube, ivec3(c3), texel);
709    sparseImageLoadARB(i2DArray, ivec3(c3), texel);
710    sparseImageLoadARB(iCubeArray, ivec3(c3), texel);
711    sparseImageLoadARB(i2DMS, ivec2(c2), 1, texel);
712    sparseImageLoadARB(i2DMSArray, ivec3(c3), 2, texel);
713
714    return texel;
715}
716
717vec4 testSparseTextureClamp()
718{
719    vec4 texel = vec4(0.0);
720
721    sparseTextureClampARB(s2D, c2, lodClamp, texel);
722    sparseTextureClampARB(s3D, c3, lodClamp, texel);
723    sparseTextureClampARB(sCube, c3, lodClamp, texel);
724    sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x);
725    sparseTextureClampARB(sCubeShadow, c4, lodClamp, texel.x);
726    sparseTextureClampARB(s2DArray, c3, lodClamp, texel);
727    sparseTextureClampARB(sCubeArray, c4, lodClamp, texel);
728    sparseTextureClampARB(s2DArrayShadow, c4, lodClamp, texel.x);
729    sparseTextureClampARB(sCubeArrayShadow, c4, compare, lodClamp, texel.x);
730
731    return texel;
732}
733
734vec4 testTextureClamp()
735{
736    vec4 texel = vec4(0.0);
737
738    texel   += textureClampARB(s1D, c1, lodClamp);
739    texel   += textureClampARB(s2D, c2, lodClamp);
740    texel   += textureClampARB(s3D, c3, lodClamp);
741    texel   += textureClampARB(sCube, c3, lodClamp);
742    texel.x += textureClampARB(s1DShadow, c3, lodClamp);
743    texel.x += textureClampARB(s2DShadow, c3, lodClamp);
744    texel.x += textureClampARB(sCubeShadow, c4, lodClamp);
745    texel   += textureClampARB(s1DArray, c2, lodClamp);
746    texel   += textureClampARB(s2DArray, c3, lodClamp);
747    texel   += textureClampARB(sCubeArray, c4, lodClamp);
748    texel.x += textureClampARB(s1DArrayShadow, c3, lodClamp);
749    texel.x += textureClampARB(s2DArrayShadow, c4, lodClamp);
750    texel.x += textureClampARB(sCubeArrayShadow, c4, compare, lodClamp);
751
752    return texel;
753}
754
755vec4 testSparseTextureOffsetClamp()
756{
757    vec4 texel = vec4(0.0);
758
759    sparseTextureOffsetClampARB(s2D, c2, offset2, lodClamp, texel);
760    sparseTextureOffsetClampARB(s3D, c3, offset3, lodClamp, texel);
761    sparseTextureOffsetClampARB(s2DShadow, c3, offset2, lodClamp, texel.x);
762    sparseTextureOffsetClampARB(s2DArray, c3, offset2, lodClamp, texel);
763    sparseTextureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp, texel.x);
764
765    return texel;
766}
767
768vec4 testTextureOffsetClamp()
769{
770    vec4 texel = vec4(0.0);
771
772    texel   += textureOffsetClampARB(s1D, c1, offset1, lodClamp);
773    texel   += textureOffsetClampARB(s2D, c2, offset2, lodClamp);
774    texel   += textureOffsetClampARB(s3D, c3, offset3, lodClamp);
775    texel.x += textureOffsetClampARB(s1DShadow, c3, offset1, lodClamp);
776    texel.x += textureOffsetClampARB(s2DShadow, c3, offset2, lodClamp);
777    texel   += textureOffsetClampARB(s1DArray, c2, offset1, lodClamp);
778    texel   += textureOffsetClampARB(s2DArray, c3, offset2, lodClamp);
779    texel.x += textureOffsetClampARB(s1DArrayShadow, c3, offset1, lodClamp);
780    texel.x += textureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp);
781
782    return texel;
783}
784
785vec4 testSparseTextureGradClamp()
786{
787    vec4 texel = vec4(0.0);
788
789    sparseTextureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp, texel);
790    sparseTextureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp, texel);
791    sparseTextureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp, texel);
792    sparseTextureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp, texel.x);
793    sparseTextureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp, texel.x);
794    sparseTextureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp, texel);
795    sparseTextureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp, texel.x);
796    sparseTextureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp, texel);
797
798    return texel;
799}
800
801vec4 testTextureGradClamp()
802{
803    vec4 texel = vec4(0.0);
804
805    texel   += textureGradClampARB(s1D, c1, dPdxy1, dPdxy1, lodClamp);
806    texel   += textureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp);
807    texel   += textureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp);
808    texel   += textureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp);
809    texel.x += textureGradClampARB(s1DShadow, c3, dPdxy1, dPdxy1, lodClamp);
810    texel.x += textureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp);
811    texel.x += textureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp);
812    texel   += textureGradClampARB(s1DArray, c2, dPdxy1, dPdxy1, lodClamp);
813    texel   += textureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp);
814    texel.x += textureGradClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, lodClamp);
815    texel.x += textureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp);
816    texel   += textureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp);
817
818    return texel;
819}
820
821vec4 testSparseTextureGradOffsetClamp()
822{
823    vec4 texel = vec4(0.0);
824
825    sparseTextureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp, texel);
826    sparseTextureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp, texel);
827    sparseTextureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);
828    sparseTextureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel);
829    sparseTextureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);
830
831    return texel;
832}
833
834vec4 testTextureGradOffsetClamp()
835{
836    vec4 texel = vec4(0.0);
837
838    texel   += textureGradOffsetClampARB(s1D, c1, dPdxy1, dPdxy1, offset1, lodClamp);
839    texel   += textureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp);
840    texel   += textureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp);
841    texel.x += textureGradOffsetClampARB(s1DShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);
842    texel.x += textureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp);
843    texel   += textureGradOffsetClampARB(s1DArray, c2, dPdxy1, dPdxy1, offset1, lodClamp);
844    texel   += textureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp);
845    texel.x += textureGradOffsetClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);
846    texel.x += textureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp);
847
848    return texel;
849}
850
851vec4 testCombinedTextureSampler()
852{
853    vec4 texel = vec4(0.0);
854
855    texel   += texture(sampler1D(t1D, s), c1);
856    texel   += texture(sampler2D(t2D, s), c2);
857    texel   += texture(sampler3D(t3D, s), c3);
858    texel   += texture(samplerCube(tCube, s), c3);
859    texel.x += texture(sampler1DShadow(t1D, sShadow), c3);
860    texel.x += texture(sampler2DShadow(t2D, sShadow), c3);
861    texel.x += texture(samplerCubeShadow(tCube, sShadow), c4);
862    texel   += texture(sampler1DArray(t1DArray, s), c2);
863    texel   += texture(sampler2DArray(t2DArray, s), c3);
864    texel   += texture(samplerCubeArray(tCubeArray, s), c4);
865    texel.x += texture(sampler1DArrayShadow(t1DArray, sShadow), c3);
866    texel.x += texture(sampler2DArrayShadow(t2DArray, sShadow), c4);
867    texel   += texture(sampler2DRect(t2DRect, s), c2);
868    texel.x += texture(sampler2DRectShadow(t2DRect, sShadow), c3);
869    texel.x += texture(samplerCubeArrayShadow(tCubeArray, sShadow), c4, compare);
870
871    return texel;
872}
873
874vec4 testSubpassLoad()
875{
876    return subpassLoad(subpass) + subpassLoad(subpassMS, 2);
877}
878
879void main()
880{
881    vec4 result = vec4(0.0);
882
883    result  += testTexture();
884    result  += testTextureProj();
885    result  += testTextureLod();
886    result  += testTextureOffset();
887    result  += testTextureLodOffset();
888    result  += testTextureProjLodOffset();
889    result  += testTexelFetch();
890    result  += testTexelFetchOffset();
891    result  += testTextureGrad();
892    result  += testTextureGradOffset();
893    result  += testTextureProjGrad();
894    result  += testTextureProjGradoffset();
895    result  += testTextureGather();
896    result  += testTextureGatherOffset();
897    result  += testTextureGatherOffsets();
898    result  += testTextureGatherLod();
899    result  += testTextureGatherLodOffset();
900    result  += testTextureGatherLodOffsets();
901
902    result    += vec4(testTextureSize());
903    result.xy += vec2(testTextureQueryLod());
904    result.x  += testTextureQueryLevels();
905    result.x  += testTextureSamples();
906
907    result  += testImageLoad();
908    testImageStore(result);
909
910    result += testSparseTexture();
911    result += testSparseTextureLod();
912    result += testSparseTextureOffset();
913    result += testSparseTextureLodOffset();
914    result += testSparseTextureGrad();
915    result += testSparseTextureGradOffset();
916    result += testSparseTexelFetch();
917    result += testSparseTexelFetchOffset();
918    result += testSparseTextureGather();
919    result += testSparseTextureGatherOffset();
920    result += testSparseTextureGatherOffsets();
921    result += testSparseTextureGatherLod();
922    result += testSparseTextureGatherLodOffset();
923    result += testSparseTextureGatherLodOffsets();
924
925    result += testSparseImageLoad();
926
927    result += testSparseTextureClamp();
928    result += testTextureClamp();
929    result += testSparseTextureOffsetClamp();
930    result += testTextureOffsetClamp();
931    result += testSparseTextureGrad();
932    result += testTextureGrad();
933    result += testSparseTextureGradOffsetClamp();
934    result += testTextureGradOffsetClamp();
935
936    result += testCombinedTextureSampler();
937    result += testSubpassLoad();
938
939    fragColor = result;
940}
941
942