Merge pull request #2976 from jeremy-lunarg/hayes-fix-2975
[platform/upstream/glslang.git] / Test / spv.float16Fetch.frag
1 #version 450 core\r
2 \r
3 #extension GL_ARB_sparse_texture2: enable\r
4 #extension GL_ARB_sparse_texture_clamp: enable\r
5 #extension GL_AMD_gpu_shader_half_float: enable\r
6 #extension GL_AMD_gpu_shader_half_float_fetch: enable\r
7 #extension GL_AMD_texture_gather_bias_lod: enable\r
8 \r
9 layout(set = 0, binding =  0) uniform f16sampler1D            s1D;\r
10 layout(set = 0, binding =  1) uniform f16sampler2D            s2D;\r
11 layout(set = 0, binding =  2) uniform f16sampler3D            s3D;\r
12 layout(set = 0, binding =  3) uniform f16sampler2DRect        s2DRect;\r
13 layout(set = 0, binding =  4) uniform f16samplerCube          sCube;\r
14 layout(set = 0, binding =  5) uniform f16samplerBuffer        sBuffer;\r
15 layout(set = 0, binding =  6) uniform f16sampler2DMS          s2DMS;\r
16 layout(set = 0, binding =  7) uniform f16sampler1DArray       s1DArray;\r
17 layout(set = 0, binding =  8) uniform f16sampler2DArray       s2DArray;\r
18 layout(set = 0, binding =  9) uniform f16samplerCubeArray     sCubeArray;\r
19 layout(set = 0, binding = 10) uniform f16sampler2DMSArray     s2DMSArray;\r
20 \r
21 layout(set = 0, binding = 11) uniform f16sampler1DShadow          s1DShadow;\r
22 layout(set = 0, binding = 12) uniform f16sampler2DShadow          s2DShadow;\r
23 layout(set = 0, binding = 13) uniform f16sampler2DRectShadow      s2DRectShadow;\r
24 layout(set = 0, binding = 14) uniform f16samplerCubeShadow        sCubeShadow;\r
25 layout(set = 0, binding = 15) uniform f16sampler1DArrayShadow     s1DArrayShadow;\r
26 layout(set = 0, binding = 16) uniform f16sampler2DArrayShadow     s2DArrayShadow;\r
27 layout(set = 0, binding = 17) uniform f16samplerCubeArrayShadow   sCubeArrayShadow;\r
28 \r
29 layout(set = 1, binding =  0) layout(rgba16f) uniform f16image1D          i1D;\r
30 layout(set = 1, binding =  1) layout(rgba16f) uniform f16image2D          i2D;\r
31 layout(set = 1, binding =  2) layout(rgba16f) uniform f16image3D          i3D;\r
32 layout(set = 1, binding =  3) layout(rgba16f) uniform f16image2DRect      i2DRect;\r
33 layout(set = 1, binding =  4) layout(rgba16f) uniform f16imageCube        iCube;\r
34 layout(set = 1, binding =  5) layout(rgba16f) uniform f16image1DArray     i1DArray;\r
35 layout(set = 1, binding =  6) layout(rgba16f) uniform f16image2DArray     i2DArray;\r
36 layout(set = 1, binding =  7) layout(rgba16f) uniform f16imageCubeArray   iCubeArray;\r
37 layout(set = 1, binding =  8) layout(rgba16f) uniform f16imageBuffer      iBuffer;\r
38 layout(set = 1, binding =  9) layout(rgba16f) uniform f16image2DMS        i2DMS;\r
39 layout(set = 1, binding = 10) layout(rgba16f) uniform f16image2DMSArray   i2DMSArray;\r
40 \r
41 layout(set = 2, binding =  0) uniform f16texture1D           t1D;\r
42 layout(set = 2, binding =  1) uniform f16texture2D           t2D;\r
43 layout(set = 2, binding =  2) uniform f16texture3D           t3D;\r
44 layout(set = 2, binding =  3) uniform f16texture2DRect       t2DRect;\r
45 layout(set = 2, binding =  4) uniform f16textureCube         tCube;\r
46 layout(set = 2, binding =  5) uniform f16texture1DArray      t1DArray;\r
47 layout(set = 2, binding =  6) uniform f16texture2DArray      t2DArray;\r
48 layout(set = 2, binding =  7) uniform f16textureCubeArray    tCubeArray;\r
49 layout(set = 2, binding =  8) uniform f16textureBuffer       tBuffer;\r
50 layout(set = 2, binding =  9) uniform f16texture2DMS         t2DMS;\r
51 layout(set = 2, binding = 10) uniform f16texture2DMSArray    t2DMSArray;\r
52 \r
53 layout(set = 2, binding = 11) uniform sampler s;\r
54 layout(set = 2, binding = 12) uniform samplerShadow sShadow;\r
55 \r
56 layout(set = 3, binding = 0, input_attachment_index = 0) uniform f16subpassInput   subpass;\r
57 layout(set = 3, binding = 1, input_attachment_index = 0) uniform f16subpassInputMS subpassMS;\r
58 \r
59 layout(location =  0) in float c1;\r
60 layout(location =  1) in vec2  c2;\r
61 layout(location =  2) in vec3  c3;\r
62 layout(location =  3) in vec4  c4;\r
63 \r
64 layout(location =  4) in float compare;\r
65 layout(location =  5) in float lod;\r
66 layout(location =  6) in float bias;\r
67 layout(location =  7) in float lodClamp;\r
68 \r
69 layout(location =  8) in float dPdxy1;\r
70 layout(location =  9) in vec2  dPdxy2;\r
71 layout(location = 10) in vec3  dPdxy3;\r
72 \r
73 layout(location = 11) in float16_t f16c1;\r
74 layout(location = 12) in f16vec2   f16c2;\r
75 layout(location = 13) in f16vec3   f16c3;\r
76 layout(location = 14) in f16vec4   f16c4;\r
77 \r
78 layout(location = 15) in float16_t f16lod;\r
79 layout(location = 16) in float16_t f16bias;\r
80 layout(location = 17) in float16_t f16lodClamp;\r
81 \r
82 layout(location = 18) in float16_t f16dPdxy1;\r
83 layout(location = 19) in f16vec2   f16dPdxy2;\r
84 layout(location = 20) in f16vec3   f16dPdxy3;\r
85 \r
86 const int   offset1 = 1;\r
87 const ivec2 offset2 = ivec2(1);\r
88 const ivec3 offset3 = ivec3(1);\r
89 const ivec2 offsets[4] = { offset2, offset2, offset2, offset2 };\r
90 \r
91 layout(location = 0) out vec4 fragColor;\r
92 \r
93 f16vec4 testTexture()\r
94 {\r
95     f16vec4 texel = f16vec4(0.0hf);\r
96 \r
97     texel   += texture(s1D, c1);\r
98     texel   += texture(s1D, f16c1, f16bias);\r
99     texel   += texture(s2D, c2);\r
100     texel   += texture(s2D, f16c2, f16bias);\r
101     texel   += texture(s3D, c3);\r
102     texel   += texture(s3D, f16c3, f16bias);\r
103     texel   += texture(sCube, c3);\r
104     texel   += texture(sCube, f16c3, f16bias);\r
105     texel.x += texture(s1DShadow, c3);\r
106     texel.x += texture(s1DShadow, f16c2, compare, f16bias);\r
107     texel.x += texture(s2DShadow, c3);\r
108     texel.x += texture(s2DShadow, f16c2, compare, f16bias);\r
109     texel.x += texture(sCubeShadow, c4);\r
110     texel.x += texture(sCubeShadow, f16c3, compare, f16bias);\r
111     texel   += texture(s1DArray, c2);\r
112     texel   += texture(s1DArray, f16c2, f16bias);\r
113     texel   += texture(s2DArray, c3);\r
114     texel   += texture(s2DArray, f16c3, f16bias);\r
115     texel   += texture(sCubeArray, c4);\r
116     texel   += texture(sCubeArray, f16c4, f16bias);\r
117     texel.x += texture(s1DArrayShadow, c3);\r
118     texel.x += texture(s1DArrayShadow, f16c2, compare, f16bias);\r
119     texel.x += texture(s2DArrayShadow, c4);\r
120     texel.x += texture(s2DArrayShadow, f16c3, compare);\r
121     texel   += texture(s2DRect, c2);\r
122     texel   += texture(s2DRect, f16c2);\r
123     texel.x += texture(s2DRectShadow, c3);\r
124     texel.x += texture(s2DRectShadow, f16c2, compare);\r
125     texel.x += texture(sCubeArrayShadow, c4, compare);\r
126     texel.x += texture(sCubeArrayShadow, f16c4, compare);\r
127 \r
128     return texel;\r
129 }\r
130 \r
131 f16vec4 testTextureProj()\r
132 {\r
133     f16vec4 texel = f16vec4(0.0hf);\r
134 \r
135     texel   += textureProj(s1D, c2);\r
136     texel   += textureProj(s1D, f16c2, f16bias);\r
137     texel   += textureProj(s1D, c4);\r
138     texel   += textureProj(s1D, f16c4, f16bias);\r
139     texel   += textureProj(s2D, c3);\r
140     texel   += textureProj(s2D, f16c3, f16bias);\r
141     texel   += textureProj(s2D, c4);\r
142     texel   += textureProj(s2D, f16c4, f16bias);\r
143     texel   += textureProj(s3D, c4);\r
144     texel   += textureProj(s3D, f16c4, f16bias);\r
145     texel.x += textureProj(s1DShadow, c4);\r
146     texel.x += textureProj(s1DShadow, f16c3, compare, f16bias);\r
147     texel.x += textureProj(s2DShadow, c4);\r
148     texel.x += textureProj(s2DShadow, f16c3, compare, f16bias);\r
149     texel   += textureProj(s2DRect, c3);\r
150     texel   += textureProj(s2DRect, f16c3);\r
151     texel   += textureProj(s2DRect, c4);\r
152     texel   += textureProj(s2DRect, f16c4);\r
153     texel.x += textureProj(s2DRectShadow, c4);\r
154     texel.x += textureProj(s2DRectShadow, f16c3, compare);\r
155 \r
156     return texel;\r
157 }\r
158 \r
159 f16vec4 testTextureLod()\r
160 {\r
161     f16vec4 texel = f16vec4(0.0hf);\r
162 \r
163     texel   += textureLod(s1D, c1, lod);\r
164     texel   += textureLod(s1D, f16c1, f16lod);\r
165     texel   += textureLod(s2D, c2, lod);\r
166     texel   += textureLod(s2D, f16c2, f16lod);\r
167     texel   += textureLod(s3D, c3, lod);\r
168     texel   += textureLod(s3D, f16c3, f16lod);\r
169     texel   += textureLod(sCube, c3, lod);\r
170     texel   += textureLod(sCube, f16c3, f16lod);\r
171     texel.x += textureLod(s1DShadow, c3, lod);\r
172     texel.x += textureLod(s1DShadow, f16c2, compare, f16lod);\r
173     texel.x += textureLod(s2DShadow, c3, lod);\r
174     texel.x += textureLod(s2DShadow, f16c2, compare, f16lod);\r
175     texel   += textureLod(s1DArray, c2, lod);\r
176     texel   += textureLod(s1DArray, f16c2, f16lod);\r
177     texel   += textureLod(s2DArray, c3, lod);\r
178     texel   += textureLod(s2DArray, f16c3, f16lod);\r
179     texel.x += textureLod(s1DArrayShadow, c3, lod);\r
180     texel.x += textureLod(s1DArrayShadow, f16c2, compare, f16lod);\r
181     texel   += textureLod(sCubeArray, c4, lod);\r
182     texel   += textureLod(sCubeArray, f16c4, f16lod);\r
183 \r
184     return texel;\r
185 }\r
186 \r
187 f16vec4 testTextureOffset()\r
188 {\r
189     f16vec4 texel = f16vec4(0.0hf);\r
190 \r
191     texel   += textureOffset(s1D, c1, offset1);\r
192     texel   += textureOffset(s1D, f16c1, offset1, f16bias);\r
193     texel   += textureOffset(s2D, c2, offset2);\r
194     texel   += textureOffset(s2D, f16c2, offset2, f16bias);\r
195     texel   += textureOffset(s3D, c3, offset3);\r
196     texel   += textureOffset(s3D, f16c3, offset3, f16bias);\r
197     texel   += textureOffset(s2DRect, c2, offset2);\r
198     texel   += textureOffset(s2DRect, f16c2, offset2);\r
199     texel.x += textureOffset(s2DRectShadow, c3, offset2);\r
200     texel.x += textureOffset(s2DRectShadow, f16c2, compare, offset2);\r
201     texel.x += textureOffset(s1DShadow, c3, offset1);\r
202     texel.x += textureOffset(s1DShadow, f16c2, compare, offset1, f16bias);\r
203     texel.x += textureOffset(s2DShadow, c3, offset2);\r
204     texel.x += textureOffset(s2DShadow, f16c2, compare, offset2, f16bias);\r
205     texel   += textureOffset(s1DArray, c2, offset1);\r
206     texel   += textureOffset(s1DArray, f16c2, offset1, f16bias);\r
207     texel   += textureOffset(s2DArray, c3, offset2);\r
208     texel   += textureOffset(s2DArray, f16c3, offset2, f16bias);\r
209     texel.x += textureOffset(s1DArrayShadow, c3, offset1);\r
210     texel.x += textureOffset(s1DArrayShadow, f16c2, compare, offset1, f16bias);\r
211     texel.x += textureOffset(s2DArrayShadow, c4, offset2);\r
212     texel.x += textureOffset(s2DArrayShadow, f16c3, compare, offset2);\r
213 \r
214     return texel;\r
215 }\r
216 \r
217 f16vec4 testTextureProjOffset()\r
218 {\r
219     f16vec4 texel = f16vec4(0.0hf);\r
220 \r
221     texel   += textureProjOffset(s1D, c2, offset1);\r
222     texel   += textureProjOffset(s1D, f16c2, offset1, f16bias);\r
223     texel   += textureProjOffset(s1D, c4, offset1);\r
224     texel   += textureProjOffset(s1D, f16c4, offset1, f16bias);\r
225     texel   += textureProjOffset(s2D, c3, offset2);\r
226     texel   += textureProjOffset(s2D, f16c3, offset2, f16bias);\r
227     texel   += textureProjOffset(s2D, c4, offset2);\r
228     texel   += textureProjOffset(s2D, f16c4, offset2, f16bias);\r
229     texel   += textureProjOffset(s3D, c4, offset3);\r
230     texel   += textureProjOffset(s3D, f16c4, offset3, f16bias);\r
231     texel   += textureProjOffset(s2DRect, c3, offset2);\r
232     texel   += textureProjOffset(s2DRect, f16c3, offset2);\r
233     texel   += textureProjOffset(s2DRect, c4, offset2);\r
234     texel   += textureProjOffset(s2DRect, f16c4, offset2);\r
235     texel.x += textureProjOffset(s2DRectShadow, c4, offset2);\r
236     texel.x += textureProjOffset(s2DRectShadow, f16c3, compare, offset2);\r
237     texel.x += textureProjOffset(s1DShadow, c4, offset1);\r
238     texel.x += textureProjOffset(s1DShadow, f16c3, compare, offset1, f16bias);\r
239     texel.x += textureProjOffset(s2DShadow, c4, offset2);\r
240     texel.x += textureProjOffset(s2DShadow, f16c3, compare, offset2, f16bias); \r
241 \r
242     return texel;\r
243 }\r
244 \r
245 f16vec4 testTextureLodOffset()\r
246 {\r
247     f16vec4 texel = f16vec4(0.0hf);\r
248 \r
249     texel   += textureLodOffset(s1D, c1, lod, offset1);\r
250     texel   += textureLodOffset(s1D, f16c1, f16lod, offset1);\r
251     texel   += textureLodOffset(s2D, c2, lod, offset2);\r
252     texel   += textureLodOffset(s2D, f16c2, f16lod, offset2);\r
253     texel   += textureLodOffset(s3D, c3, lod, offset3);\r
254     texel   += textureLodOffset(s3D, f16c3, f16lod, offset3);\r
255     texel.x += textureLodOffset(s1DShadow, c3, lod, offset1);\r
256     texel.x += textureLodOffset(s1DShadow, f16c2, compare, f16lod, offset1);\r
257     texel.x += textureLodOffset(s2DShadow, c3, lod, offset2);\r
258     texel.x += textureLodOffset(s2DShadow, f16c2, compare, f16lod, offset2);\r
259     texel   += textureLodOffset(s1DArray, c2, lod, offset1);\r
260     texel   += textureLodOffset(s1DArray, f16c2, f16lod, offset1);\r
261     texel   += textureLodOffset(s2DArray, c3, lod, offset2);\r
262     texel   += textureLodOffset(s2DArray, f16c3, f16lod, offset2);\r
263     texel.x += textureLodOffset(s1DArrayShadow, c3, lod, offset1);\r
264     texel.x += textureLodOffset(s1DArrayShadow, f16c2, compare, f16lod, offset1);\r
265 \r
266     return texel;\r
267 }\r
268 \r
269 f16vec4 testTextureProjLodOffset()\r
270 {\r
271     f16vec4 texel = f16vec4(0.0hf);\r
272 \r
273     texel   += textureProjLodOffset(s1D, c2, lod, offset1);\r
274     texel   += textureProjLodOffset(s1D, f16c2, f16lod, offset1);\r
275     texel   += textureProjLodOffset(s1D, c4, lod, offset1);\r
276     texel   += textureProjLodOffset(s1D, f16c4, f16lod, offset1);\r
277     texel   += textureProjLodOffset(s2D, c3, lod, offset2);\r
278     texel   += textureProjLodOffset(s2D, f16c3, f16lod, offset2);\r
279     texel   += textureProjLodOffset(s2D, c4, lod, offset2);\r
280     texel   += textureProjLodOffset(s2D, f16c4, f16lod, offset2);\r
281     texel   += textureProjLodOffset(s3D, c4, lod, offset3);\r
282     texel   += textureProjLodOffset(s3D, f16c4, f16lod, offset3);\r
283     texel.x += textureProjLodOffset(s1DShadow, c4, lod, offset1);\r
284     texel.x += textureProjLodOffset(s1DShadow, f16c3, compare, f16lod, offset1);\r
285     texel.x += textureProjLodOffset(s2DShadow, c4, lod, offset2);\r
286     texel.x += textureProjLodOffset(s2DShadow, f16c3, compare, f16lod, offset2);\r
287 \r
288     return texel;\r
289 }\r
290 \r
291 f16vec4 testTexelFetch()\r
292 {\r
293     f16vec4 texel = f16vec4(0.0hf);\r
294 \r
295     texel   += texelFetch(s1D, int(c1), int(lod));\r
296     texel   += texelFetch(s2D, ivec2(c2), int(lod));\r
297     texel   += texelFetch(s3D, ivec3(c3), int(lod));\r
298     texel   += texelFetch(s2DRect, ivec2(c2));\r
299     texel   += texelFetch(s1DArray, ivec2(c2), int(lod));\r
300     texel   += texelFetch(s2DArray, ivec3(c3), int(lod));\r
301     texel   += texelFetch(sBuffer, int(c1));\r
302     texel   += texelFetch(s2DMS, ivec2(c2), 1);\r
303     texel   += texelFetch(s2DMSArray, ivec3(c3), 2);\r
304 \r
305     return texel;\r
306 }\r
307 \r
308 f16vec4 testTexelFetchOffset()\r
309 {\r
310     f16vec4 texel = f16vec4(0.0hf);\r
311 \r
312     texel   += texelFetchOffset(s1D, int(c1), int(lod), offset1);\r
313     texel   += texelFetchOffset(s2D, ivec2(c2), int(lod), offset2);\r
314     texel   += texelFetchOffset(s3D, ivec3(c3), int(lod), offset3);\r
315     texel   += texelFetchOffset(s2DRect, ivec2(c2), offset2);\r
316     texel   += texelFetchOffset(s1DArray, ivec2(c2), int(lod), offset1);\r
317     texel   += texelFetchOffset(s2DArray, ivec3(c3), int(lod), offset2);\r
318 \r
319     return texel;\r
320 }\r
321 \r
322 f16vec4 testTextureGrad()\r
323 {\r
324     f16vec4 texel = f16vec4(0.0hf);\r
325 \r
326     texel   += textureGrad(s1D, c1, dPdxy1, dPdxy1);\r
327     texel   += textureGrad(s1D, f16c1, f16dPdxy1, f16dPdxy1);\r
328     texel   += textureGrad(s2D, c2, dPdxy2, dPdxy2);\r
329     texel   += textureGrad(s2D, f16c2, f16dPdxy2, f16dPdxy2);\r
330     texel   += textureGrad(s3D, c3, dPdxy3, dPdxy3);\r
331     texel   += textureGrad(s3D, f16c3, f16dPdxy3, f16dPdxy3);\r
332     texel   += textureGrad(sCube, c3, dPdxy3, dPdxy3);\r
333     texel   += textureGrad(sCube, f16c3, f16dPdxy3, f16dPdxy3);\r
334     texel   += textureGrad(s2DRect, c2, dPdxy2, dPdxy2);\r
335     texel   += textureGrad(s2DRect, f16c2, f16dPdxy2, f16dPdxy2);\r
336     texel.x += textureGrad(s2DRectShadow, c3, dPdxy2, dPdxy2);\r
337     texel.x += textureGrad(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2);\r
338     texel.x += textureGrad(s1DShadow, c3, dPdxy1, dPdxy1);\r
339     texel.x += textureGrad(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1);\r
340     texel.x += textureGrad(s2DShadow, c3, dPdxy2, dPdxy2);\r
341     texel.x += textureGrad(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2);\r
342     texel.x += textureGrad(sCubeShadow, c4, dPdxy3, dPdxy3);\r
343     texel.x += textureGrad(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3);\r
344     texel   += textureGrad(s1DArray, c2, dPdxy1, dPdxy1);\r
345     texel   += textureGrad(s1DArray, f16c2, f16dPdxy1, f16dPdxy1);\r
346     texel   += textureGrad(s2DArray, c3, dPdxy2, dPdxy2);\r
347     texel   += textureGrad(s2DArray, f16c3, f16dPdxy2, f16dPdxy2);\r
348     texel.x += textureGrad(s1DArrayShadow, c3, dPdxy1, dPdxy1);\r
349     texel.x += textureGrad(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1);\r
350     texel.x += textureGrad(s2DArrayShadow, c4, dPdxy2, dPdxy2);\r
351     texel.x += textureGrad(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);\r
352     texel   += textureGrad(sCubeArray, c4, dPdxy3, dPdxy3);\r
353     texel   += textureGrad(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3);\r
354 \r
355     return texel;\r
356 }\r
357 \r
358 f16vec4 testTextureGradOffset()\r
359 {\r
360     f16vec4 texel = f16vec4(0.0hf);\r
361 \r
362     texel   += textureGradOffset(s1D, c1, dPdxy1, dPdxy1, offset1);\r
363     texel   += textureGradOffset(s1D, f16c1, f16dPdxy1, f16dPdxy1, offset1);\r
364     texel   += textureGradOffset(s2D, c2, dPdxy2, dPdxy2, offset2);\r
365     texel   += textureGradOffset(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2);\r
366     texel   += textureGradOffset(s3D, c3, dPdxy3, dPdxy3, offset3);\r
367     texel   += textureGradOffset(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3);\r
368     texel   += textureGradOffset(s2DRect, c2, dPdxy2, dPdxy2, offset2);\r
369     texel   += textureGradOffset(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, offset2);\r
370     texel.x += textureGradOffset(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2);\r
371     texel.x += textureGradOffset(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2);\r
372     texel.x += textureGradOffset(s1DShadow, c3, dPdxy1, dPdxy1, offset1);\r
373     texel.x += textureGradOffset(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1);\r
374     texel.x += textureGradOffset(s2DShadow, c3, dPdxy2, dPdxy2, offset2);\r
375     texel.x += textureGradOffset(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2);\r
376     texel   += textureGradOffset(s1DArray, c2, dPdxy1, dPdxy1, offset1);\r
377     texel   += textureGradOffset(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, offset1);\r
378     texel   += textureGradOffset(s2DArray, c3, dPdxy2, dPdxy2, offset2);\r
379     texel   += textureGradOffset(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2);\r
380     texel.x += textureGradOffset(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1);\r
381     texel.x += textureGradOffset(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1);\r
382     texel.x += textureGradOffset(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2);\r
383     texel.x += textureGradOffset(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);\r
384 \r
385     return texel;\r
386 }\r
387 \r
388 f16vec4 testTextureProjGrad()\r
389 {\r
390     f16vec4 texel = f16vec4(0.0hf);\r
391 \r
392     texel   += textureProjGrad(s1D, c2, dPdxy1, dPdxy1);\r
393     texel   += textureProjGrad(s1D, f16c2, f16dPdxy1, f16dPdxy1);\r
394     texel   += textureProjGrad(s1D, c4, dPdxy1, dPdxy1);\r
395     texel   += textureProjGrad(s1D, f16c4, f16dPdxy1, f16dPdxy1);\r
396     texel   += textureProjGrad(s2D, c3, dPdxy2, dPdxy2);\r
397     texel   += textureProjGrad(s2D, f16c3, f16dPdxy2, f16dPdxy2);\r
398     texel   += textureProjGrad(s2D, c4, dPdxy2, dPdxy2);\r
399     texel   += textureProjGrad(s2D, f16c4, f16dPdxy2, f16dPdxy2);\r
400     texel   += textureProjGrad(s3D, c4, dPdxy3, dPdxy3);\r
401     texel   += textureProjGrad(s3D, f16c4, f16dPdxy3, f16dPdxy3);\r
402     texel   += textureProjGrad(s2DRect, c3, dPdxy2, dPdxy2);\r
403     texel   += textureProjGrad(s2DRect, f16c3, f16dPdxy2, f16dPdxy2);\r
404     texel   += textureProjGrad(s2DRect, c4, dPdxy2, dPdxy2);\r
405     texel   += textureProjGrad(s2DRect, f16c4, f16dPdxy2, f16dPdxy2);\r
406     texel.x += textureProjGrad(s2DRectShadow, c4, dPdxy2, dPdxy2);\r
407     texel.x += textureProjGrad(s2DRectShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);\r
408     texel.x += textureProjGrad(s1DShadow, c4, dPdxy1, dPdxy1);\r
409     texel.x += textureProjGrad(s1DShadow, f16c3, compare, f16dPdxy1, f16dPdxy1);\r
410     texel.x += textureProjGrad(s2DShadow, c4, dPdxy2, dPdxy2);\r
411     texel.x += textureProjGrad(s2DShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);\r
412 \r
413     return texel;\r
414 }\r
415 \r
416 f16vec4 testTextureProjGradoffset()\r
417 {\r
418     f16vec4 texel = f16vec4(0.0hf);\r
419 \r
420     texel   += textureProjGradOffset(s1D, c2, dPdxy1, dPdxy1, offset1);\r
421     texel   += textureProjGradOffset(s1D, f16c2, f16dPdxy1, f16dPdxy1, offset1);\r
422     texel   += textureProjGradOffset(s1D, c4, dPdxy1, dPdxy1, offset1);\r
423     texel   += textureProjGradOffset(s1D, f16c4, f16dPdxy1, f16dPdxy1, offset1);\r
424     texel   += textureProjGradOffset(s2D, c3, dPdxy2, dPdxy2, offset2);\r
425     texel   += textureProjGradOffset(s2D, f16c3, f16dPdxy2, f16dPdxy2, offset2);\r
426     texel   += textureProjGradOffset(s2D, c4, dPdxy2, dPdxy2, offset2);\r
427     texel   += textureProjGradOffset(s2D, f16c4, f16dPdxy2, f16dPdxy2, offset2);\r
428     texel   += textureProjGradOffset(s2DRect, c3, dPdxy2, dPdxy2, offset2);\r
429     texel   += textureProjGradOffset(s2DRect, f16c3, f16dPdxy2, f16dPdxy2, offset2);\r
430     texel   += textureProjGradOffset(s2DRect, c4, dPdxy2, dPdxy2, offset2);\r
431     texel   += textureProjGradOffset(s2DRect, f16c4, f16dPdxy2, f16dPdxy2, offset2);\r
432     texel.x += textureProjGradOffset(s2DRectShadow, c4, dPdxy2, dPdxy2, offset2);\r
433     texel.x += textureProjGradOffset(s2DRectShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);\r
434     texel   += textureProjGradOffset(s3D, c4, dPdxy3, dPdxy3, offset3);\r
435     texel   += textureProjGradOffset(s3D, f16c4, f16dPdxy3, f16dPdxy3, offset3);\r
436     texel.x += textureProjGradOffset(s1DShadow, c4, dPdxy1, dPdxy1, offset1);\r
437     texel.x += textureProjGradOffset(s1DShadow, f16c3, compare, f16dPdxy1, f16dPdxy1, offset1);\r
438     texel.x += textureProjGradOffset(s2DShadow, c4, dPdxy2, dPdxy2, offset2);\r
439     texel.x += textureProjGradOffset(s2DShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);\r
440 \r
441     return texel;\r
442 }\r
443 \r
444 f16vec4 testTextureGather()\r
445 {\r
446     f16vec4 texel = f16vec4(0.0hf);\r
447 \r
448     texel   += textureGather(s2D, c2, 0);\r
449     texel   += textureGather(s2D, f16c2, 0, f16bias);\r
450     texel   += textureGather(s2DArray, c3, 0);\r
451     texel   += textureGather(s2DArray, f16c3, 0, f16bias);\r
452     texel   += textureGather(sCube, c3, 0);\r
453     texel   += textureGather(sCube, f16c3, 0, f16bias);\r
454     texel   += textureGather(sCubeArray, c4, 0);\r
455     texel   += textureGather(sCubeArray, f16c4, 0, f16bias);\r
456     texel   += textureGather(s2DRect, c2, 0);\r
457     texel   += textureGather(s2DRect, f16c2, 0);\r
458     texel   += textureGather(s2DShadow, c2, compare);\r
459     texel   += textureGather(s2DShadow, f16c2, compare);\r
460     texel   += textureGather(s2DArrayShadow, c3, compare);\r
461     texel   += textureGather(s2DArrayShadow, f16c3, compare);\r
462     texel   += textureGather(sCubeShadow, c3, compare);\r
463     texel   += textureGather(sCubeShadow, f16c3, compare);\r
464     texel   += textureGather(sCubeArrayShadow, c4, compare);\r
465     texel   += textureGather(sCubeArrayShadow, f16c4, compare);\r
466     texel   += textureGather(s2DRectShadow, c2, compare);\r
467     texel   += textureGather(s2DRectShadow, f16c2, compare);\r
468 \r
469     return texel;\r
470 }\r
471 \r
472 f16vec4 testTextureGatherOffset()\r
473 {\r
474     f16vec4 texel = f16vec4(0.0hf);\r
475 \r
476     texel   += textureGatherOffset(s2D, c2, offset2, 0);\r
477     texel   += textureGatherOffset(s2D, f16c2, offset2, 0, f16bias);\r
478     texel   += textureGatherOffset(s2DArray, c3, offset2, 0);\r
479     texel   += textureGatherOffset(s2DArray, f16c3, offset2, 0, f16bias);\r
480     texel   += textureGatherOffset(s2DRect, c2, offset2, 0);\r
481     texel   += textureGatherOffset(s2DRect, f16c2, offset2, 0);\r
482     texel   += textureGatherOffset(s2DShadow, c2, compare, offset2);\r
483     texel   += textureGatherOffset(s2DShadow, f16c2, compare, offset2);\r
484     texel   += textureGatherOffset(s2DArrayShadow, c3, compare, offset2);\r
485     texel   += textureGatherOffset(s2DArrayShadow, f16c3, compare, offset2);\r
486     texel   += textureGatherOffset(s2DRectShadow, c2, compare, offset2);\r
487     texel   += textureGatherOffset(s2DRectShadow, f16c2, compare, offset2);\r
488 \r
489     return texel;\r
490 }\r
491 \r
492 f16vec4 testTextureGatherOffsets()\r
493 {\r
494     f16vec4 texel = f16vec4(0.0hf);\r
495 \r
496     texel   += textureGatherOffsets(s2D, c2, offsets, 0);\r
497     texel   += textureGatherOffsets(s2D, f16c2, offsets, 0, f16bias);\r
498     texel   += textureGatherOffsets(s2DArray, c3, offsets, 0);\r
499     texel   += textureGatherOffsets(s2DArray, f16c3, offsets, 0, f16bias);\r
500     texel   += textureGatherOffsets(s2DRect, c2, offsets, 0);\r
501     texel   += textureGatherOffsets(s2DRect, f16c2, offsets, 0);\r
502     texel   += textureGatherOffsets(s2DShadow, c2, compare, offsets);\r
503     texel   += textureGatherOffsets(s2DShadow, f16c2, compare, offsets);\r
504     texel   += textureGatherOffsets(s2DArrayShadow, c3, compare, offsets);\r
505     texel   += textureGatherOffsets(s2DArrayShadow, f16c3, compare, offsets);\r
506     texel   += textureGatherOffsets(s2DRectShadow, c2, compare, offsets);\r
507     texel   += textureGatherOffsets(s2DRectShadow, f16c2, compare, offsets);\r
508 \r
509     return texel;\r
510 }\r
511 \r
512 f16vec4 testTextureGatherLod()\r
513 {\r
514     f16vec4 texel = f16vec4(0.0hf);\r
515 \r
516     texel   += textureGatherLodAMD(s2D, c2, lod, 0);\r
517     texel   += textureGatherLodAMD(s2D, f16c2, f16lod, 0);\r
518     texel   += textureGatherLodAMD(s2DArray, c3, lod, 0);\r
519     texel   += textureGatherLodAMD(s2DArray, f16c3, f16lod, 0);\r
520     texel   += textureGatherLodAMD(sCube, c3, lod, 0);\r
521     texel   += textureGatherLodAMD(sCube, f16c3, f16lod, 0);\r
522     texel   += textureGatherLodAMD(sCubeArray, c4, lod, 0);\r
523     texel   += textureGatherLodAMD(sCubeArray, f16c4, f16lod, 0);\r
524 \r
525     return texel;\r
526 }\r
527 \r
528 f16vec4 testTextureGatherLodOffset()\r
529 {\r
530     f16vec4 texel = f16vec4(0.0hf);\r
531 \r
532     texel   += textureGatherLodOffsetAMD(s2D, c2, lod, offset2, 0);\r
533     texel   += textureGatherLodOffsetAMD(s2D, f16c2, f16lod, offset2, 0);\r
534     texel   += textureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, 0);\r
535     texel   += textureGatherLodOffsetAMD(s2DArray, f16c3, f16lod, offset2, 0);\r
536 \r
537     return texel;\r
538 }\r
539 \r
540 f16vec4 testTextureGatherLodOffsets()\r
541 {\r
542     f16vec4 texel = f16vec4(0.0hf);\r
543 \r
544     texel   += textureGatherLodOffsetsAMD(s2D, c2, lod, offsets, 0);\r
545     texel   += textureGatherLodOffsetsAMD(s2D, f16c2, f16lod, offsets, 0);\r
546     texel   += textureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, 0);\r
547     texel   += textureGatherLodOffsetsAMD(s2DArray, f16c3, f16lod, offsets, 0);\r
548 \r
549     return texel;\r
550 }\r
551 \r
552 ivec4 testTextureSize()\r
553 {\r
554     ivec4 size = ivec4(0);\r
555 \r
556     size.x      += textureSize(s1D, int(lod));\r
557     size.xy     += textureSize(s2D, int(lod));\r
558     size.xyz    += textureSize(s3D, int(lod));\r
559     size.xy     += textureSize(sCube, int(lod));\r
560     size.x      += textureSize(s1DShadow, int(lod));\r
561     size.xy     += textureSize(s2DShadow, int(lod));\r
562     size.xy     += textureSize(sCubeShadow, int(lod));\r
563     size.xyz    += textureSize(sCubeArray, int(lod));\r
564     size.xyz    += textureSize(sCubeArrayShadow, int(lod));\r
565     size.xy     += textureSize(s2DRect);\r
566     size.xy     += textureSize(s2DRectShadow);\r
567     size.xy     += textureSize(s1DArray, int(lod));\r
568     size.xyz    += textureSize(s2DArray, int(lod));\r
569     size.xy     += textureSize(s1DArrayShadow, int(lod));\r
570     size.xyz    += textureSize(s2DArrayShadow, int(lod));\r
571     size.x      += textureSize(sBuffer);\r
572     size.xy     += textureSize(s2DMS);\r
573     size.xyz    += textureSize(s2DMSArray);\r
574 \r
575     return size;\r
576 }\r
577 \r
578 vec2 testTextureQueryLod()\r
579 {\r
580     vec2 lod = vec2(0.0);\r
581 \r
582     lod  += textureQueryLod(s1D, c1);\r
583     lod  += textureQueryLod(s1D, f16c1);\r
584     lod  += textureQueryLod(s2D, c2);\r
585     lod  += textureQueryLod(s2D, f16c2);\r
586     lod  += textureQueryLod(s3D, c3);\r
587     lod  += textureQueryLod(s3D, f16c3);\r
588     lod  += textureQueryLod(sCube, c3);\r
589     lod  += textureQueryLod(sCube, f16c3);\r
590     lod  += textureQueryLod(s1DArray, c1);\r
591     lod  += textureQueryLod(s1DArray, f16c1);\r
592     lod  += textureQueryLod(s2DArray, c2);\r
593     lod  += textureQueryLod(s2DArray, f16c2);\r
594     lod  += textureQueryLod(sCubeArray, c3);\r
595     lod  += textureQueryLod(sCubeArray, f16c3);\r
596     lod  += textureQueryLod(s1DShadow, c1);\r
597     lod  += textureQueryLod(s1DShadow, f16c1);\r
598     lod  += textureQueryLod(s2DShadow, c2);\r
599     lod  += textureQueryLod(s2DShadow, f16c2);\r
600     lod  += textureQueryLod(sCubeArrayShadow, c3);\r
601     lod  += textureQueryLod(sCubeArrayShadow, f16c3);\r
602     lod  += textureQueryLod(s1DArrayShadow, c1);\r
603     lod  += textureQueryLod(s1DArrayShadow, f16c1);\r
604     lod  += textureQueryLod(s2DArrayShadow, c2);\r
605     lod  += textureQueryLod(s2DArrayShadow, f16c2);\r
606     lod  += textureQueryLod(sCubeArrayShadow, c3);\r
607     lod  += textureQueryLod(sCubeArrayShadow, f16c3);\r
608 \r
609     return lod;\r
610 }\r
611 \r
612 int testTextureQueryLevels()\r
613 {\r
614     int levels = 0;\r
615 \r
616     levels  += textureQueryLevels(s1D);\r
617     levels  += textureQueryLevels(s2D);\r
618     levels  += textureQueryLevels(s3D);\r
619     levels  += textureQueryLevels(sCube);\r
620     levels  += textureQueryLevels(s1DShadow);\r
621     levels  += textureQueryLevels(s2DShadow);\r
622     levels  += textureQueryLevels(sCubeShadow);\r
623     levels  += textureQueryLevels(sCubeArray);\r
624     levels  += textureQueryLevels(sCubeArrayShadow);\r
625     levels  += textureQueryLevels(s1DArray);\r
626     levels  += textureQueryLevels(s2DArray);\r
627     levels  += textureQueryLevels(s1DArrayShadow);\r
628     levels  += textureQueryLevels(s2DArrayShadow);\r
629 \r
630     return levels;\r
631 }\r
632 \r
633 int testTextureSamples()\r
634 {\r
635     int samples = 0;\r
636 \r
637     samples += textureSamples(s2DMS);\r
638     samples += textureSamples(s2DMSArray);\r
639 \r
640     return samples;\r
641 }\r
642 \r
643 f16vec4 testImageLoad()\r
644 {\r
645     f16vec4 texel = f16vec4(0.0hf);\r
646 \r
647     texel += imageLoad(i1D, int(c1));\r
648     texel += imageLoad(i2D, ivec2(c2));\r
649     texel += imageLoad(i3D, ivec3(c3));\r
650     texel += imageLoad(i2DRect, ivec2(c2));\r
651     texel += imageLoad(iCube, ivec3(c3));\r
652     texel += imageLoad(iBuffer, int(c1));\r
653     texel += imageLoad(i1DArray, ivec2(c2));\r
654     texel += imageLoad(i2DArray, ivec3(c3));\r
655     texel += imageLoad(iCubeArray, ivec3(c3));\r
656     texel += imageLoad(i2DMS, ivec2(c2), 1);\r
657     texel += imageLoad(i2DMSArray, ivec3(c3), 1);\r
658 \r
659     return texel;\r
660 }\r
661 \r
662 void testImageStore(f16vec4 data)\r
663 {\r
664     imageStore(i1D, int(c1), data);\r
665     imageStore(i2D, ivec2(c2), data);\r
666     imageStore(i3D, ivec3(c3), data);\r
667     imageStore(i2DRect, ivec2(c2), data);\r
668     imageStore(iCube, ivec3(c3), data);\r
669     imageStore(iBuffer, int(c1), data);\r
670     imageStore(i1DArray, ivec2(c2), data);\r
671     imageStore(i2DArray, ivec3(c3), data);\r
672     imageStore(iCubeArray, ivec3(c3), data);\r
673     imageStore(i2DMS, ivec2(c2), 1, data);\r
674     imageStore(i2DMSArray, ivec3(c3), 1, data);\r
675 }\r
676 \r
677 f16vec4 testSparseTexture()\r
678 {\r
679     f16vec4 texel = f16vec4(0.0hf);\r
680 \r
681     sparseTextureARB(s2D, c2, texel);\r
682     sparseTextureARB(s2D, f16c2, texel, f16bias);\r
683     sparseTextureARB(s3D, c3, texel);\r
684     sparseTextureARB(s3D, f16c3, texel, f16bias);\r
685     sparseTextureARB(sCube, c3, texel);\r
686     sparseTextureARB(sCube, f16c3, texel, f16bias);\r
687     sparseTextureARB(s2DShadow, c3, texel.x);\r
688     sparseTextureARB(s2DShadow, f16c2, compare, texel.x, f16bias);\r
689     sparseTextureARB(sCubeShadow, c4, texel.x);\r
690     sparseTextureARB(sCubeShadow, f16c3, compare, texel.x, f16bias);\r
691     sparseTextureARB(s2DArray, c3, texel);\r
692     sparseTextureARB(s2DArray, f16c3, texel, f16bias);\r
693     sparseTextureARB(sCubeArray, c4, texel);\r
694     sparseTextureARB(sCubeArray, f16c4, texel, f16bias);\r
695     sparseTextureARB(s2DArrayShadow, c4, texel.x);\r
696     sparseTextureARB(s2DArrayShadow, f16c3, compare, texel.x);\r
697     sparseTextureARB(s2DRect, c2, texel);\r
698     sparseTextureARB(s2DRect, f16c2, texel);\r
699     sparseTextureARB(s2DRectShadow, c3, texel.x);\r
700     sparseTextureARB(s2DRectShadow, f16c2, compare, texel.x);\r
701     sparseTextureARB(sCubeArrayShadow, c4, compare, texel.x);\r
702     sparseTextureARB(sCubeArrayShadow, f16c4, compare, texel.x);\r
703 \r
704     return texel;\r
705 }\r
706 \r
707 f16vec4 testSparseTextureLod()\r
708 {\r
709     f16vec4 texel = f16vec4(0.0hf);\r
710 \r
711     sparseTextureLodARB(s2D, c2, lod, texel);\r
712     sparseTextureLodARB(s2D, f16c2, f16lod, texel);\r
713     sparseTextureLodARB(s3D, c3, lod, texel);\r
714     sparseTextureLodARB(s3D, f16c3, f16lod, texel);\r
715     sparseTextureLodARB(sCube, c3, lod, texel);\r
716     sparseTextureLodARB(sCube, f16c3, f16lod, texel);\r
717     sparseTextureLodARB(s2DShadow, c3, lod, texel.x);\r
718     sparseTextureLodARB(s2DShadow, f16c2, compare, f16lod, texel.x);\r
719     sparseTextureLodARB(s2DArray, c3, lod, texel);\r
720     sparseTextureLodARB(s2DArray, f16c3, f16lod, texel);\r
721     sparseTextureLodARB(sCubeArray, c4, lod, texel);\r
722     sparseTextureLodARB(sCubeArray, f16c4, f16lod, texel);\r
723 \r
724     return texel;\r
725 }\r
726 \r
727 f16vec4 testSparseTextureOffset()\r
728 {\r
729     f16vec4 texel = f16vec4(0.0hf);\r
730 \r
731     sparseTextureOffsetARB(s2D, c2, offset2, texel);\r
732     sparseTextureOffsetARB(s2D, f16c2, offset2, texel, f16bias);\r
733     sparseTextureOffsetARB(s3D, c3, offset3, texel);\r
734     sparseTextureOffsetARB(s3D, f16c3, offset3, texel, f16bias);\r
735     sparseTextureOffsetARB(s2DRect, c2, offset2, texel);\r
736     sparseTextureOffsetARB(s2DRect, f16c2, offset2, texel);\r
737     sparseTextureOffsetARB(s2DRectShadow, c3, offset2, texel.x);\r
738     sparseTextureOffsetARB(s2DRectShadow, f16c2, compare, offset2, texel.x);\r
739     sparseTextureOffsetARB(s2DShadow, c3, offset2, texel.x);\r
740     sparseTextureOffsetARB(s2DShadow, f16c2, compare, offset2, texel.x, f16bias);\r
741     sparseTextureOffsetARB(s2DArray, c3, offset2, texel);\r
742     sparseTextureOffsetARB(s2DArray, f16c3, offset2, texel, f16bias);\r
743     sparseTextureOffsetARB(s2DArrayShadow, c4, offset2, texel.x);\r
744     sparseTextureOffsetARB(s2DArrayShadow, f16c3, compare, offset2, texel.x);\r
745 \r
746     return texel;\r
747 }\r
748 \r
749 f16vec4 testSparseTextureLodOffset()\r
750 {\r
751     f16vec4 texel = f16vec4(0.0hf);\r
752 \r
753     sparseTextureLodOffsetARB(s2D, c2, lod, offset2, texel);\r
754     sparseTextureLodOffsetARB(s2D, f16c2, f16lod, offset2, texel);\r
755     sparseTextureLodOffsetARB(s3D, c3, lod, offset3, texel);\r
756     sparseTextureLodOffsetARB(s3D, f16c3, f16lod, offset3, texel);\r
757     sparseTextureLodOffsetARB(s2DShadow, c3, lod, offset2, texel.x);\r
758     sparseTextureLodOffsetARB(s2DShadow, f16c2, compare, f16lod, offset2, texel.x);\r
759     sparseTextureLodOffsetARB(s2DArray, c3, lod, offset2, texel);\r
760     sparseTextureLodOffsetARB(s2DArray, f16c3, f16lod, offset2, texel);\r
761 \r
762     return texel;\r
763 }\r
764 \r
765 f16vec4 testSparseTextureGrad()\r
766 {\r
767     f16vec4 texel = f16vec4(0.0hf);\r
768 \r
769     sparseTextureGradARB(s2D, c2, dPdxy2, dPdxy2, texel);\r
770     sparseTextureGradARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, texel);\r
771     sparseTextureGradARB(s3D, c3, dPdxy3, dPdxy3, texel);\r
772     sparseTextureGradARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, texel);\r
773     sparseTextureGradARB(sCube, c3, dPdxy3, dPdxy3, texel);\r
774     sparseTextureGradARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, texel);\r
775     sparseTextureGradARB(s2DRect, c2, dPdxy2, dPdxy2, texel);\r
776     sparseTextureGradARB(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, texel);\r
777     sparseTextureGradARB(s2DRectShadow, c3, dPdxy2, dPdxy2, texel.x);\r
778     sparseTextureGradARB(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, texel.x);\r
779     sparseTextureGradARB(s2DShadow, c3, dPdxy2, dPdxy2, texel.x);\r
780     sparseTextureGradARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, texel.x);\r
781     sparseTextureGradARB(sCubeShadow, c4, dPdxy3, dPdxy3, texel.x);\r
782     sparseTextureGradARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, texel.x);\r
783     sparseTextureGradARB(s2DArray, c3, dPdxy2, dPdxy2, texel);\r
784     sparseTextureGradARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, texel);\r
785     sparseTextureGradARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, texel.x);\r
786     sparseTextureGradARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, texel.x);\r
787     sparseTextureGradARB(sCubeArray, c4, dPdxy3, dPdxy3, texel);\r
788     sparseTextureGradARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, texel);\r
789 \r
790     return texel;\r
791 }\r
792 \r
793 f16vec4 testSparseTextureGradOffset()\r
794 {\r
795     f16vec4 texel = f16vec4(0.0hf);\r
796 \r
797     sparseTextureGradOffsetARB(s2D, c2, dPdxy2, dPdxy2, offset2, texel);\r
798     sparseTextureGradOffsetARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, texel);\r
799     sparseTextureGradOffsetARB(s3D, c3, dPdxy3, dPdxy3, offset3, texel);\r
800     sparseTextureGradOffsetARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, texel);\r
801     sparseTextureGradOffsetARB(s2DRect, c2, dPdxy2, dPdxy2, offset2, texel);\r
802     sparseTextureGradOffsetARB(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, offset2, texel);\r
803     sparseTextureGradOffsetARB(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);\r
804     sparseTextureGradOffsetARB(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);\r
805     sparseTextureGradOffsetARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);\r
806     sparseTextureGradOffsetARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);\r
807     sparseTextureGradOffsetARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, texel);\r
808     sparseTextureGradOffsetARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, texel);\r
809     sparseTextureGradOffsetARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, texel.x);\r
810     sparseTextureGradOffsetARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);\r
811 \r
812     return texel;\r
813 }\r
814 \r
815 f16vec4 testSparseTexelFetch()\r
816 {\r
817     f16vec4 texel = f16vec4(0.0hf);\r
818 \r
819     sparseTexelFetchARB(s2D, ivec2(c2), int(lod), texel);\r
820     sparseTexelFetchARB(s3D, ivec3(c3), int(lod), texel);\r
821     sparseTexelFetchARB(s2DRect, ivec2(c2), texel);\r
822     sparseTexelFetchARB(s2DArray, ivec3(c3), int(lod), texel);\r
823     sparseTexelFetchARB(s2DMS, ivec2(c2), 1, texel);\r
824     sparseTexelFetchARB(s2DMSArray, ivec3(c3), 2, texel);\r
825 \r
826     return texel;\r
827 }\r
828 \r
829 f16vec4 testSparseTexelFetchOffset()\r
830 {\r
831     f16vec4 texel = f16vec4(0.0hf);\r
832 \r
833     sparseTexelFetchOffsetARB(s2D, ivec2(c2), int(lod), offset2, texel);\r
834     sparseTexelFetchOffsetARB(s3D, ivec3(c3), int(lod), offset3, texel);\r
835     sparseTexelFetchOffsetARB(s2DRect, ivec2(c2), offset2, texel);\r
836     sparseTexelFetchOffsetARB(s2DArray, ivec3(c3), int(lod), offset2, texel);\r
837 \r
838     return texel;\r
839 }\r
840 \r
841 f16vec4 testSparseTextureGather()\r
842 {\r
843     f16vec4 texel = f16vec4(0.0hf);\r
844 \r
845     sparseTextureGatherARB(s2D, c2, texel, 0);\r
846     sparseTextureGatherARB(s2D, f16c2, texel, 0, f16bias);\r
847     sparseTextureGatherARB(s2DArray, c3, texel, 0);\r
848     sparseTextureGatherARB(s2DArray, f16c3, texel, 0, f16bias);\r
849     sparseTextureGatherARB(sCube, c3, texel, 0);\r
850     sparseTextureGatherARB(sCube, f16c3, texel, 0, f16bias);\r
851     sparseTextureGatherARB(sCubeArray, c4, texel, 0);\r
852     sparseTextureGatherARB(sCubeArray, f16c4, texel, 0, f16bias);\r
853     sparseTextureGatherARB(s2DRect, c2, texel, 0);\r
854     sparseTextureGatherARB(s2DRect, f16c2, texel, 0);\r
855     sparseTextureGatherARB(s2DShadow, c2, compare, texel);\r
856     sparseTextureGatherARB(s2DShadow, f16c2, compare, texel);\r
857     sparseTextureGatherARB(s2DArrayShadow, c3, compare, texel);\r
858     sparseTextureGatherARB(s2DArrayShadow, f16c3, compare, texel);\r
859     sparseTextureGatherARB(sCubeShadow, c3, compare, texel);\r
860     sparseTextureGatherARB(sCubeShadow, f16c3, compare, texel);\r
861     sparseTextureGatherARB(sCubeArrayShadow, c4, compare, texel);\r
862     sparseTextureGatherARB(sCubeArrayShadow, f16c4, compare, texel);\r
863     sparseTextureGatherARB(s2DRectShadow, c2, compare, texel);\r
864     sparseTextureGatherARB(s2DRectShadow, f16c2, compare, texel);\r
865 \r
866     return texel;\r
867 }\r
868 \r
869 f16vec4 testSparseTextureGatherOffset()\r
870 {\r
871     f16vec4 texel = f16vec4(0.0hf);\r
872 \r
873     sparseTextureGatherOffsetARB(s2D, c2, offset2, texel, 0);\r
874     sparseTextureGatherOffsetARB(s2D, f16c2, offset2, texel, 0, f16bias);\r
875     sparseTextureGatherOffsetARB(s2DArray, c3, offset2, texel, 0);\r
876     sparseTextureGatherOffsetARB(s2DArray, f16c3, offset2, texel, 0, f16bias);\r
877     sparseTextureGatherOffsetARB(s2DRect, c2, offset2, texel, 0);\r
878     sparseTextureGatherOffsetARB(s2DRect, f16c2, offset2, texel, 0);\r
879     sparseTextureGatherOffsetARB(s2DShadow, c2, compare, offset2, texel);\r
880     sparseTextureGatherOffsetARB(s2DShadow, f16c2, compare, offset2, texel);\r
881     sparseTextureGatherOffsetARB(s2DArrayShadow, c3, compare, offset2, texel);\r
882     sparseTextureGatherOffsetARB(s2DArrayShadow, f16c3, compare, offset2, texel);\r
883     sparseTextureGatherOffsetARB(s2DRectShadow, c2, compare, offset2, texel);\r
884     sparseTextureGatherOffsetARB(s2DRectShadow, f16c2, compare, offset2, texel);\r
885 \r
886     return texel;\r
887 }\r
888 \r
889 f16vec4 testSparseTextureGatherOffsets()\r
890 {\r
891     f16vec4 texel = f16vec4(0.0hf);\r
892     const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));\r
893 \r
894     sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel, 0);\r
895     sparseTextureGatherOffsetsARB(s2D, f16c2, constOffsets, texel, 0, f16bias);\r
896     sparseTextureGatherOffsetsARB(s2DArray, c3, constOffsets, texel, 0);\r
897     sparseTextureGatherOffsetsARB(s2DArray, f16c3, constOffsets, texel, 0, f16bias);\r
898     sparseTextureGatherOffsetsARB(s2DRect, c2, constOffsets, texel, 0);\r
899     sparseTextureGatherOffsetsARB(s2DRect, f16c2, constOffsets, texel, 0);\r
900     sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, constOffsets, texel);\r
901     sparseTextureGatherOffsetsARB(s2DShadow, f16c2, compare, constOffsets, texel);\r
902     sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, constOffsets, texel);\r
903     sparseTextureGatherOffsetsARB(s2DArrayShadow, f16c3, compare, constOffsets, texel);\r
904     sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, constOffsets, texel);\r
905     sparseTextureGatherOffsetsARB(s2DRectShadow, f16c2, compare, constOffsets, texel);\r
906 \r
907     return texel;\r
908 }\r
909 \r
910 f16vec4 testSparseTextureGatherLod()\r
911 {\r
912     f16vec4 texel = f16vec4(0.0hf);\r
913 \r
914     sparseTextureGatherLodAMD(s2D, c2, lod, texel, 0);\r
915     sparseTextureGatherLodAMD(s2D, f16c2, f16lod, texel, 0);\r
916     sparseTextureGatherLodAMD(s2DArray, c3, lod, texel, 0);\r
917     sparseTextureGatherLodAMD(s2DArray, f16c3, f16lod, texel, 0);\r
918     sparseTextureGatherLodAMD(sCube, c3, lod, texel, 0);\r
919     sparseTextureGatherLodAMD(sCube, f16c3, f16lod, texel, 0);\r
920     sparseTextureGatherLodAMD(sCubeArray, c4, lod, texel, 0);\r
921     sparseTextureGatherLodAMD(sCubeArray, f16c4, f16lod, texel, 0);\r
922 \r
923     return texel;\r
924 }\r
925 \r
926 f16vec4 testSparseTextureGatherLodOffset()\r
927 {\r
928     f16vec4 texel = f16vec4(0.0hf);\r
929 \r
930     sparseTextureGatherLodOffsetAMD(s2D, c2, lod, offset2, texel, 0);\r
931     sparseTextureGatherLodOffsetAMD(s2D, f16c2, f16lod, offset2, texel, 0);\r
932     sparseTextureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, texel, 0);\r
933     sparseTextureGatherLodOffsetAMD(s2DArray, f16c3, f16lod, offset2, texel, 0);\r
934 \r
935     return texel;\r
936 }\r
937 \r
938 f16vec4 testSparseTextureGatherLodOffsets()\r
939 {\r
940     f16vec4 texel = f16vec4(0.0hf);\r
941 \r
942     sparseTextureGatherLodOffsetsAMD(s2D, c2, lod, offsets, texel, 0);\r
943     sparseTextureGatherLodOffsetsAMD(s2D, f16c2, f16lod, offsets, texel, 0);\r
944     sparseTextureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, texel, 0);\r
945     sparseTextureGatherLodOffsetsAMD(s2DArray, f16c3, f16lod, offsets, texel, 0);\r
946 \r
947     return texel;\r
948 }\r
949 \r
950 f16vec4 testSparseImageLoad()\r
951 {\r
952     f16vec4 texel = f16vec4(0.0hf);\r
953 \r
954     sparseImageLoadARB(i2D, ivec2(c2), texel);\r
955     sparseImageLoadARB(i3D, ivec3(c3), texel);\r
956     sparseImageLoadARB(i2DRect, ivec2(c2), texel);\r
957     sparseImageLoadARB(iCube, ivec3(c3), texel);\r
958     sparseImageLoadARB(i2DArray, ivec3(c3), texel);\r
959     sparseImageLoadARB(iCubeArray, ivec3(c3), texel);\r
960     sparseImageLoadARB(i2DMS, ivec2(c2), 1, texel);\r
961     sparseImageLoadARB(i2DMSArray, ivec3(c3), 2, texel);\r
962 \r
963     return texel;\r
964 }\r
965 \r
966 f16vec4 testSparseTextureClamp()\r
967 {\r
968     f16vec4 texel = f16vec4(0.0hf);\r
969 \r
970     sparseTextureClampARB(s2D, c2, lodClamp, texel);\r
971     sparseTextureClampARB(s2D, f16c2, f16lodClamp, texel, f16bias);\r
972     sparseTextureClampARB(s3D, c3, lodClamp, texel);\r
973     sparseTextureClampARB(s3D, f16c3, f16lodClamp, texel, f16bias);\r
974     sparseTextureClampARB(sCube, c3, lodClamp, texel);\r
975     sparseTextureClampARB(sCube, f16c3, f16lodClamp, texel, f16bias);\r
976     sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x);\r
977     sparseTextureClampARB(s2DShadow, f16c2, compare, f16lodClamp, texel.x, f16bias);\r
978     sparseTextureClampARB(sCubeShadow, c4, lodClamp, texel.x);\r
979     sparseTextureClampARB(sCubeShadow, f16c3, compare, f16lodClamp, texel.x, f16bias);\r
980     sparseTextureClampARB(s2DArray, c3, lodClamp, texel);\r
981     sparseTextureClampARB(s2DArray, f16c3, f16lodClamp, texel, f16bias);\r
982     sparseTextureClampARB(sCubeArray, c4, lodClamp, texel);\r
983     sparseTextureClampARB(sCubeArray, f16c4, f16lodClamp, texel, f16bias);\r
984     sparseTextureClampARB(s2DArrayShadow, c4, lodClamp, texel.x);\r
985     sparseTextureClampARB(s2DArrayShadow, f16c3, compare, f16lodClamp, texel.x);\r
986     sparseTextureClampARB(sCubeArrayShadow, c4, compare, lodClamp, texel.x);\r
987     sparseTextureClampARB(sCubeArrayShadow, f16c4, compare, f16lodClamp, texel.x);\r
988 \r
989     return texel;\r
990 }\r
991 \r
992 f16vec4 testTextureClamp()\r
993 {\r
994     f16vec4 texel = f16vec4(0.0hf);\r
995 \r
996     texel   += textureClampARB(s1D, c1, lodClamp);\r
997     texel   += textureClampARB(s1D, f16c1, f16lodClamp, f16bias);\r
998     texel   += textureClampARB(s2D, c2, lodClamp);\r
999     texel   += textureClampARB(s2D, f16c2, f16lodClamp, f16bias);\r
1000     texel   += textureClampARB(s3D, c3, lodClamp);\r
1001     texel   += textureClampARB(s3D, f16c3, f16lodClamp, f16bias);\r
1002     texel   += textureClampARB(sCube, c3, lodClamp);\r
1003     texel   += textureClampARB(sCube, f16c3, f16lodClamp, f16bias);\r
1004     texel.x += textureClampARB(s1DShadow, c3, lodClamp);\r
1005     texel.x += textureClampARB(s1DShadow, f16c2, compare, f16lodClamp, f16bias);\r
1006     texel.x += textureClampARB(s2DShadow, c3, lodClamp);\r
1007     texel.x += textureClampARB(s2DShadow, f16c2, compare, f16lodClamp, f16bias);\r
1008     texel.x += textureClampARB(sCubeShadow, c4, lodClamp);\r
1009     texel.x += textureClampARB(sCubeShadow, f16c3, compare, f16lodClamp, f16bias);\r
1010     texel   += textureClampARB(s1DArray, c2, lodClamp);\r
1011     texel   += textureClampARB(s1DArray, f16c2, f16lodClamp, f16bias);\r
1012     texel   += textureClampARB(s2DArray, c3, lodClamp);\r
1013     texel   += textureClampARB(s2DArray, f16c3, f16lodClamp, f16bias);\r
1014     texel   += textureClampARB(sCubeArray, c4, lodClamp);\r
1015     texel   += textureClampARB(sCubeArray, f16c4, f16lodClamp, f16bias);\r
1016     texel.x += textureClampARB(s1DArrayShadow, c3, lodClamp);\r
1017     texel.x += textureClampARB(s1DArrayShadow, f16c2, compare, f16lodClamp, f16bias);\r
1018     texel.x += textureClampARB(s2DArrayShadow, c4, lodClamp);\r
1019     texel.x += textureClampARB(s2DArrayShadow, f16c3, compare, f16lodClamp);\r
1020     texel.x += textureClampARB(sCubeArrayShadow, c4, compare, lodClamp);\r
1021     texel.x += textureClampARB(sCubeArrayShadow, f16c4, compare, f16lodClamp);\r
1022 \r
1023     return texel;\r
1024 }\r
1025 \r
1026 f16vec4 testSparseTextureOffsetClamp()\r
1027 {\r
1028     f16vec4 texel = f16vec4(0.0hf);\r
1029 \r
1030     sparseTextureOffsetClampARB(s2D, c2, offset2, lodClamp, texel);\r
1031     sparseTextureOffsetClampARB(s2D, f16c2, offset2, f16lodClamp, texel, f16bias);\r
1032     sparseTextureOffsetClampARB(s3D, c3, offset3, lodClamp, texel);\r
1033     sparseTextureOffsetClampARB(s3D, f16c3, offset3, f16lodClamp, texel, f16bias);\r
1034     sparseTextureOffsetClampARB(s2DShadow, c3, offset2, lodClamp, texel.x);\r
1035     sparseTextureOffsetClampARB(s2DShadow, f16c2, compare, offset2, f16lodClamp, texel.x, f16bias);\r
1036     sparseTextureOffsetClampARB(s2DArray, c3, offset2, lodClamp, texel);\r
1037     sparseTextureOffsetClampARB(s2DArray, f16c3, offset2, f16lodClamp, texel, f16bias);\r
1038     sparseTextureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp, texel.x);\r
1039     sparseTextureOffsetClampARB(s2DArrayShadow, f16c3, compare, offset2, f16lodClamp, texel.x);\r
1040 \r
1041     return texel;\r
1042 }\r
1043 \r
1044 f16vec4 testTextureOffsetClamp()\r
1045 {\r
1046     f16vec4 texel = f16vec4(0.0hf);\r
1047 \r
1048     texel   += textureOffsetClampARB(s1D, c1, offset1, lodClamp);\r
1049     texel   += textureOffsetClampARB(s1D, f16c1, offset1, f16lodClamp, f16bias);\r
1050     texel   += textureOffsetClampARB(s2D, c2, offset2, lodClamp);\r
1051     texel   += textureOffsetClampARB(s2D, f16c2, offset2, f16lodClamp, f16bias);\r
1052     texel   += textureOffsetClampARB(s3D, c3, offset3, lodClamp);\r
1053     texel   += textureOffsetClampARB(s3D, f16c3, offset3, f16lodClamp, f16bias);\r
1054     texel.x += textureOffsetClampARB(s1DShadow, c3, offset1, lodClamp);\r
1055     texel.x += textureOffsetClampARB(s1DShadow, f16c2, compare, offset1, f16lodClamp, f16bias);\r
1056     texel.x += textureOffsetClampARB(s2DShadow, c3, offset2, lodClamp);\r
1057     texel.x += textureOffsetClampARB(s2DShadow, f16c2, compare, offset2, f16lodClamp, f16bias);\r
1058     texel   += textureOffsetClampARB(s1DArray, c2, offset1, lodClamp);\r
1059     texel   += textureOffsetClampARB(s1DArray, f16c2, offset1, f16lodClamp, f16bias);\r
1060     texel   += textureOffsetClampARB(s2DArray, c3, offset2, lodClamp);\r
1061     texel   += textureOffsetClampARB(s2DArray, f16c3, offset2, f16lodClamp, f16bias);\r
1062     texel.x += textureOffsetClampARB(s1DArrayShadow, c3, offset1, lodClamp);\r
1063     texel.x += textureOffsetClampARB(s1DArrayShadow, f16c2, compare, offset1, f16lodClamp, f16bias);\r
1064     texel.x += textureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp);\r
1065     texel.x += textureOffsetClampARB(s2DArrayShadow, f16c3, compare, offset2, f16lodClamp);\r
1066     \r
1067     return texel;\r
1068 }\r
1069 \r
1070 f16vec4 testSparseTextureGradClamp()\r
1071 {\r
1072     f16vec4 texel = f16vec4(0.0hf);\r
1073 \r
1074     sparseTextureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp, texel);\r
1075     sparseTextureGradClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, f16lodClamp, texel);\r
1076     sparseTextureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp, texel);\r
1077     sparseTextureGradClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);\r
1078     sparseTextureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp, texel);\r
1079     sparseTextureGradClampARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);\r
1080     sparseTextureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp, texel.x);\r
1081     sparseTextureGradClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, f16lodClamp, texel.x);\r
1082     sparseTextureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp, texel.x);\r
1083     sparseTextureGradClampARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, f16lodClamp, texel.x);\r
1084     sparseTextureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp, texel);\r
1085     sparseTextureGradClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, f16lodClamp, texel);\r
1086     sparseTextureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp, texel.x);\r
1087     sparseTextureGradClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, f16lodClamp, texel.x);\r
1088     sparseTextureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp, texel);\r
1089     sparseTextureGradClampARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);\r
1090 \r
1091     return texel;\r
1092 }\r
1093 \r
1094 f16vec4 testTextureGradClamp()\r
1095 {\r
1096     f16vec4 texel = f16vec4(0.0hf);\r
1097 \r
1098     texel   += textureGradClampARB(s1D, c1, dPdxy1, dPdxy1, lodClamp);\r
1099     texel   += textureGradClampARB(s1D, f16c1, f16dPdxy1, f16dPdxy1, f16lodClamp);\r
1100     texel   += textureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp);\r
1101     texel   += textureGradClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, f16lodClamp);\r
1102     texel   += textureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp);\r
1103     texel   += textureGradClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp);\r
1104     texel   += textureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp);\r
1105     texel   += textureGradClampARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp);\r
1106     texel.x += textureGradClampARB(s1DShadow, c3, dPdxy1, dPdxy1, lodClamp);\r
1107     texel.x += textureGradClampARB(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, f16lodClamp);\r
1108     texel.x += textureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp);\r
1109     texel.x += textureGradClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, f16lodClamp);\r
1110     texel.x += textureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp);\r
1111     texel.x += textureGradClampARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, f16lodClamp);\r
1112     texel   += textureGradClampARB(s1DArray, c2, dPdxy1, dPdxy1, lodClamp);\r
1113     texel   += textureGradClampARB(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, f16lodClamp);\r
1114     texel   += textureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp);\r
1115     texel   += textureGradClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, f16lodClamp);\r
1116     texel.x += textureGradClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, lodClamp);\r
1117     texel.x += textureGradClampARB(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, f16lodClamp);\r
1118     texel.x += textureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp);\r
1119     texel.x += textureGradClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, f16lodClamp);\r
1120     texel   += textureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp);\r
1121     texel   += textureGradClampARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, f16lodClamp);\r
1122 \r
1123     return texel;\r
1124 }\r
1125 \r
1126 f16vec4 testSparseTextureGradOffsetClamp()\r
1127 {\r
1128     f16vec4 texel = f16vec4(0.0hf);\r
1129 \r
1130     sparseTextureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp, texel);\r
1131     sparseTextureGradOffsetClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel);\r
1132     sparseTextureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp, texel);\r
1133     sparseTextureGradOffsetClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, f16lodClamp, texel);\r
1134     sparseTextureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);\r
1135     sparseTextureGradOffsetClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel.x);\r
1136     sparseTextureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel);\r
1137     sparseTextureGradOffsetClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel);\r
1138     sparseTextureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);\r
1139     sparseTextureGradOffsetClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel.x);\r
1140 \r
1141     return texel;\r
1142 }\r
1143 \r
1144 f16vec4 testTextureGradOffsetClamp()\r
1145 {\r
1146     f16vec4 texel = f16vec4(0.0hf);\r
1147 \r
1148     texel   += textureGradOffsetClampARB(s1D, c1, dPdxy1, dPdxy1, offset1, lodClamp);\r
1149     texel   += textureGradOffsetClampARB(s1D, f16c1, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);\r
1150     texel   += textureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp);\r
1151     texel   += textureGradOffsetClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);\r
1152     texel   += textureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp);\r
1153     texel   += textureGradOffsetClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, f16lodClamp);\r
1154     texel.x += textureGradOffsetClampARB(s1DShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);\r
1155     texel.x += textureGradOffsetClampARB(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);\r
1156     texel.x += textureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp);\r
1157     texel.x += textureGradOffsetClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);\r
1158     texel   += textureGradOffsetClampARB(s1DArray, c2, dPdxy1, dPdxy1, offset1, lodClamp);\r
1159     texel   += textureGradOffsetClampARB(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);\r
1160     texel   += textureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp);\r
1161     texel   += textureGradOffsetClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);\r
1162     texel.x += textureGradOffsetClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);\r
1163     texel.x += textureGradOffsetClampARB(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);\r
1164     texel.x += textureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp);\r
1165     texel.x += textureGradOffsetClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);\r
1166 \r
1167     return texel;\r
1168 }\r
1169 \r
1170 f16vec4 testCombinedTextureSampler()\r
1171 {\r
1172     f16vec4 texel = f16vec4(0.0hf);\r
1173 \r
1174     texel   += texture(f16sampler1D(t1D, s), c1);\r
1175     texel   += texture(f16sampler1D(t1D, s), f16c1, f16bias);\r
1176     texel   += texture(f16sampler2D(t2D, s), c2);\r
1177     texel   += texture(f16sampler2D(t2D, s), f16c2, f16bias);\r
1178     texel   += texture(f16sampler3D(t3D, s), c3);\r
1179     texel   += texture(f16sampler3D(t3D, s), f16c3, f16bias);\r
1180     texel   += texture(f16samplerCube(tCube, s), c3);\r
1181     texel   += texture(f16samplerCube(tCube, s), f16c3, f16bias);\r
1182     texel.x += texture(f16sampler1DShadow(t1D, sShadow), c3);\r
1183     texel.x += texture(f16sampler1DShadow(t1D, sShadow), f16c2, compare, f16bias);\r
1184     texel.x += texture(f16sampler2DShadow(t2D, sShadow), c3);\r
1185     texel.x += texture(f16sampler2DShadow(t2D, sShadow), f16c2, compare, f16bias);\r
1186     texel.x += texture(f16samplerCubeShadow(tCube, sShadow), c4);\r
1187     texel.x += texture(f16samplerCubeShadow(tCube, sShadow), f16c3, compare, f16bias);\r
1188     texel   += texture(f16sampler1DArray(t1DArray, s), c2);\r
1189     texel   += texture(f16sampler1DArray(t1DArray, s), f16c2, f16bias);\r
1190     texel   += texture(f16sampler2DArray(t2DArray, s), c3);\r
1191     texel   += texture(f16sampler2DArray(t2DArray, s), f16c3, f16bias);\r
1192     texel   += texture(f16samplerCubeArray(tCubeArray, s), c4);\r
1193     texel   += texture(f16samplerCubeArray(tCubeArray, s), f16c4, f16bias);\r
1194     texel.x += texture(f16sampler1DArrayShadow(t1DArray, sShadow), c3);\r
1195     texel.x += texture(f16sampler1DArrayShadow(t1DArray, sShadow), f16c2, compare, f16bias);\r
1196     texel.x += texture(f16sampler2DArrayShadow(t2DArray, sShadow), c4);\r
1197     texel.x += texture(f16sampler2DArrayShadow(t2DArray, sShadow), f16c3, compare);\r
1198     texel   += texture(f16sampler2DRect(t2DRect, s), c2);\r
1199     texel   += texture(f16sampler2DRect(t2DRect, s), f16c2);\r
1200     texel.x += texture(f16sampler2DRectShadow(t2DRect, sShadow), c3);\r
1201     texel.x += texture(f16sampler2DRectShadow(t2DRect, sShadow), f16c2, compare);\r
1202     texel.x += texture(f16samplerCubeArrayShadow(tCubeArray, sShadow), c4, compare);\r
1203     texel.x += texture(f16samplerCubeArrayShadow(tCubeArray, sShadow), f16c4, compare);\r
1204 \r
1205     return texel;\r
1206 }\r
1207 \r
1208 f16vec4 testSubpassLoad()\r
1209 {\r
1210     return subpassLoad(subpass) + subpassLoad(subpassMS, 2);\r
1211 }\r
1212 \r
1213 void main()\r
1214 {\r
1215     f16vec4 result = f16vec4(0.0hf);\r
1216 \r
1217     result  += testTexture();\r
1218     result  += testTextureProj();\r
1219     result  += testTextureLod();\r
1220     result  += testTextureOffset();\r
1221     result  += testTextureLodOffset();\r
1222     result  += testTextureProjLodOffset();\r
1223     result  += testTexelFetch();\r
1224     result  += testTexelFetchOffset();\r
1225     result  += testTextureGrad();\r
1226     result  += testTextureGradOffset();\r
1227     result  += testTextureProjGrad();\r
1228     result  += testTextureProjGradoffset();\r
1229     result  += testTextureGather();\r
1230     result  += testTextureGatherOffset();\r
1231     result  += testTextureGatherOffsets();\r
1232     result  += testTextureGatherLod();\r
1233     result  += testTextureGatherLodOffset();\r
1234     result  += testTextureGatherLodOffsets();\r
1235 \r
1236     result    += f16vec4(testTextureSize());\r
1237     result.xy += f16vec2(testTextureQueryLod());\r
1238     result.x  += float16_t(testTextureQueryLevels());\r
1239     result.x  += float16_t(testTextureSamples());\r
1240 \r
1241     result  += testImageLoad();\r
1242     testImageStore(result);\r
1243 \r
1244     result += testSparseTexture();\r
1245     result += testSparseTextureLod();\r
1246     result += testSparseTextureOffset();\r
1247     result += testSparseTextureLodOffset();\r
1248     result += testSparseTextureGrad();\r
1249     result += testSparseTextureGradOffset();\r
1250     result += testSparseTexelFetch();\r
1251     result += testSparseTexelFetchOffset();\r
1252     result += testSparseTextureGather();\r
1253     result += testSparseTextureGatherOffset();\r
1254     result += testSparseTextureGatherOffsets();\r
1255     result += testSparseTextureGatherLod();\r
1256     result += testSparseTextureGatherLodOffset();\r
1257     result += testSparseTextureGatherLodOffsets();\r
1258 \r
1259     result += testSparseImageLoad();\r
1260 \r
1261     result += testSparseTextureClamp();\r
1262     result += testTextureClamp();\r
1263     result += testSparseTextureOffsetClamp();\r
1264     result += testTextureOffsetClamp();\r
1265     result += testSparseTextureGrad();\r
1266     result += testTextureGrad();\r
1267     result += testSparseTextureGradOffsetClamp();\r
1268     result += testTextureGradOffsetClamp();\r
1269 \r
1270     result += testCombinedTextureSampler();\r
1271     result += testSubpassLoad();\r
1272 \r
1273     fragColor = result;\r
1274 }\r