yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

James Helferty (NVIDIA)render-test: Change D3D12 default to sm_6_5 (#8320)f02b08490

master
79.7 KiB1522 linesraw
1//TEST:SIMPLE(filecheck=HLSL): -allow-glsl -stage compute  -entry computeMain -target hlsl -DHLSL
2//TEST:SIMPLE(filecheck=HLSL): -allow-glsl -stage fragment -entry fragMain -target hlsl -DHLSL
3//TEST:SIMPLE(filecheck=GLSL): -allow-glsl -stage compute  -entry computeMain -target glsl -DGLSL
4//TEST:SIMPLE(filecheck=GLSL): -allow-glsl -stage fragment -entry fragMain -target glsl -DGLSL
5//TEST:SIMPLE(filecheck=SPIR): -allow-glsl -stage compute  -entry computeMain -target spirv -DSPIRV
6//TEST:SIMPLE(filecheck=SPIR): -allow-glsl -stage fragment -entry fragMain -target spirv -DSPIRV
7//TEST:SIMPLE(filecheck=CUDA): -allow-glsl -stage compute  -entry computeMain -target cuda -DCUDA
8//TEST:SIMPLE(filecheck=CUDA): -allow-glsl -stage fragment -entry fragMain -target cuda -DCUDA
9
10//DISABLED_TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -output-using-type -xslang -DSPIRV
11
12// TODO: This test revealed a few problems for a path from GLSL to HLSL
13//T-EST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -compute -entry computeMain -allow-glsl -output-using-type -profile cs_6_6 -xslang -DHLSL
14
15
16//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer
17buffer MyBlockName
18{
19    int result;
20} outputBuffer;
21
22// float
23
24//TEST_INPUT: TextureSampler1D(size=4, content = zero):name uniform_sampler1DShadow
25uniform sampler1DShadow uniform_sampler1DShadow;
26
27//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_sampler2DShadow
28uniform sampler2DShadow uniform_sampler2DShadow;
29
30//TEST_INPUT: TextureSamplerCube(size=4, content = zero):name uniform_samplerCubeShadow
31uniform samplerCubeShadow uniform_samplerCubeShadow;
32
33
34//TEST_INPUT: TextureSampler1D(size=4, content = zero, arrayLength=2):name uniform_sampler1DArrayShadow
35uniform sampler1DArrayShadow uniform_sampler1DArrayShadow;
36
37//TEST_INPUT: TextureSampler2D(size=4, content = zero, arrayLength=2):name uniform_sampler2DArrayShadow
38uniform sampler2DArrayShadow uniform_sampler2DArrayShadow;
39
40//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_sampler2DRectShadow
41uniform sampler2DRectShadow uniform_sampler2DRectShadow;
42
43//TEST_INPUT: TextureSamplerCube(size=4, content = zero, arrayLength=2):name uniform_samplerCubeArrayShadow
44uniform samplerCubeArrayShadow uniform_samplerCubeArrayShadow;
45
46
47//TEST_INPUT: TextureSampler1D(size=4, content = zero):name uniform_sampler1D
48uniform sampler1D uniform_sampler1D;
49
50//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_sampler2D
51uniform sampler2D uniform_sampler2D;
52
53//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_sampler2DRect
54uniform sampler2DRect uniform_sampler2DRect;
55
56//TEST_INPUT: TextureSampler3D(size=4, content = zero):name uniform_sampler3D
57uniform sampler3D uniform_sampler3D;
58
59//TEST_INPUT: TextureSamplerCube(size=4, content = zero):name uniform_samplerCube
60uniform samplerCube uniform_samplerCube;
61
62//TEST_INPUT: TextureSampler1D(size=4, content = zero, arrayLength=2):name uniform_sampler1DArray
63uniform sampler1DArray uniform_sampler1DArray;
64
65//TEST_INPUT: TextureSampler2D(size=4, content = zero, arrayLength=2):name uniform_sampler2DArray
66uniform sampler2DArray uniform_sampler2DArray;
67
68//TEST_INPUT: TextureSamplerCube(size=4, content = zero, arrayLength=2):name uniform_samplerCubeArray
69uniform samplerCubeArray uniform_samplerCubeArray;
70
71//TEST_INPUT: TextureSampler1D(size=4, content = zero):name uniform_samplerBuffer
72uniform samplerBuffer uniform_samplerBuffer;
73
74//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_sampler2DMS
75uniform sampler2DMS uniform_sampler2DMS;
76
77//TEST_INPUT: TextureSampler2D(size=4, content = zero, arrayLength=2):name uniform_sampler2DMSArray
78uniform sampler2DMSArray uniform_sampler2DMSArray;
79
80// int
81
82//TEST_INPUT: TextureSampler1D(size=4, content = zero):name uniform_isampler1D
83uniform isampler1D uniform_isampler1D;
84
85//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_isampler2D
86uniform isampler2D uniform_isampler2D;
87
88//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_isampler2DRect
89uniform isampler2DRect uniform_isampler2DRect;
90
91//TEST_INPUT: TextureSampler3D(size=4, content = zero):name uniform_isampler3D
92uniform isampler3D uniform_isampler3D;
93
94//TEST_INPUT: TextureSamplerCube(size=4, content = zero):name uniform_isamplerCube
95uniform isamplerCube uniform_isamplerCube;
96
97//TEST_INPUT: TextureSampler1D(size=4, content = zero):name uniform_isampler1DArray
98uniform isampler1DArray uniform_isampler1DArray;
99
100//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_isampler2DArray
101uniform isampler2DArray uniform_isampler2DArray;
102
103//TEST_INPUT: TextureSamplerCube(size=4, content = zero):name uniform_isamplerCubeArray
104uniform isamplerCubeArray uniform_isamplerCubeArray;
105
106//TEST_INPUT: TextureSampler1D(size=4, content = zero):name uniform_isamplerBuffer
107uniform isamplerBuffer uniform_isamplerBuffer;
108
109//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_isampler2DMS
110uniform isampler2DMS uniform_isampler2DMS;
111
112//TEST_INPUT: TextureSampler2D(size=4, content = zero, arrayLength = 2):name uniform_isampler2DMSArray
113uniform isampler2DMSArray uniform_isampler2DMSArray;
114
115// uint
116
117//TEST_INPUT: TextureSampler1D(size=4, content = zero):name uniform_usampler1D
118uniform usampler1D uniform_usampler1D;
119
120//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_usampler2D
121uniform usampler2D uniform_usampler2D;
122
123//TEST_INPUT: TextureSampler2D(size=4, content = zero):name uniform_usampler2DRect
124uniform usampler2DRect uniform_usampler2DRect;
125
126//TEST_INPUT: TextureSampler3D(size=4, content = zero):name uniform_usampler3D
127uniform usampler3D uniform_usampler3D;
128
129//TEST_INPUT: TextureSamplerCube(size=4, content = zero):name uniform_usamplerCube
130uniform usamplerCube uniform_usamplerCube;
131
132//TEST_INPUT: TextureSampler1D(size=4, content = zero, arrayLength = 2):name uniform_usampler1DArray
133uniform usampler1DArray uniform_usampler1DArray;
134
135//TEST_INPUT: TextureSampler2D(size=4, content = zero, arrayLength = 2):name uniform_usampler2DArray
136uniform usampler2DArray uniform_usampler2DArray;
137
138//TEST_INPUT: TextureSamplerCube(size=4, content = zero, arrayLength = 2):name uniform_usamplerCubeArray
139uniform usamplerCubeArray uniform_usamplerCubeArray;
140
141//TEST_INPUT: Texture1D(size=4, content = zero):name uniform_usamplerBuffer
142uniform usamplerBuffer uniform_usamplerBuffer;
143
144//TEST_INPUT: Texture2D(size=4, content = zero):name uniform_usampler2DMS
145uniform usampler2DMS uniform_usampler2DMS;
146
147//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength = 2):name uniform_usampler2DMSArray
148uniform usampler2DMSArray uniform_usampler2DMSArray;
149
150__generic<T : ITexelElement>
151bool textureFuncs( Sampler1D<T> gsampler1D
152    , Sampler2D<T> gsampler2D
153    , Sampler2DRect<T> gsampler2DRect
154    , Sampler3D<T> gsampler3D
155    , SamplerCube<T> gsamplerCube
156    , Sampler1DArray<T> gsampler1DArray
157    , Sampler2DArray<T> gsampler2DArray
158    , SamplerCubeArray<T> gsamplerCubeArray
159    , SamplerBuffer<T> gsamplerBuffer
160    , Sampler2DMS<T> gsampler2DMS
161    , Sampler2DMSArray<T> gsampler2DMSArray
162    , bool ignoreResult
163)
164{
165    // GLSL-LABEL: textureFuncs_0
166    typealias gvec4 = vector<T.Element,4>;
167
168    constexpr float coord = 0.5;
169
170    constexpr ivec2 offset2D = ivec2(2);
171    constexpr ivec3 offset3D = ivec3(3);
172    constexpr ivec2 offsets[4] = { ivec2(1), ivec2(2), ivec2(3), ivec2(4) };
173
174    bool ignoreResultF32 = ignoreResult && T.Element is float;
175    bool ignoreResultI32 = ignoreResult && T.Element is int32_t;
176
177    return true
178        // 8.9.1. Texture Query Functions
179
180        // GLSL: textureSize({{.*}}sampler1D
181        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
182        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
183        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
184        && int(4) == textureSize(gsampler1D, int(0))
185
186        // GLSL: textureSize({{.*}}sampler2D
187        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
188        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
189        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
190        && ivec2(4) == textureSize(gsampler2D, int(0))
191
192        // GLSL: textureSize({{.*}}sampler3D
193        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
194        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
195        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
196        && ivec3(4) == textureSize(gsampler3D, int(0))
197
198        // GLSL: textureSize({{.*}}samplerCube
199        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
200        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
201        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
202        && ivec2(4) == textureSize(gsamplerCube, int(0))
203
204        // GLSL: textureSize({{.*}}sampler1DShadow
205        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
206        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
207        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
208        && int(4) == textureSize(uniform_sampler1DShadow, int(0))
209
210        // GLSL: textureSize({{.*}}sampler2DShadow
211        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
212        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
213        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
214        && (ivec2(4) == textureSize(uniform_sampler2DShadow, int(0)) || ignoreResult)
215
216        // GLSL: textureSize({{.*}}samplerCubeShadow
217        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeShadow
218        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
219        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
220        && (ivec2(4) == textureSize(uniform_samplerCubeShadow, int(0)) || ignoreResult)
221
222        // GLSL: textureSize({{.*}}samplerCubeArray
223        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
224        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
225        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
226        && (ivec3(4,4,2) == textureSize(gsamplerCubeArray, int(0)) || ignoreResultI32)
227
228        // GLSL: textureSize({{.*}}samplerCubeArrayShadow
229        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArrayShadow
230        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
231        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
232        && ivec3(4,4,2) == textureSize(uniform_samplerCubeArrayShadow, int(0))
233
234        // GLSL: textureSize({{.*}}sampler2DRect
235        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
236        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
237        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
238        && ivec2(4) == textureSize(gsampler2DRect)
239
240        // GLSL: textureSize({{.*}}sampler2DRectShadow
241        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
242        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
243        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
244        && ivec2(4) == textureSize(uniform_sampler2DRectShadow)
245
246        // GLSL: textureSize({{.*}}sampler1DArray
247        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
248        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
249        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
250        && (ivec2(4,2) == textureSize(gsampler1DArray, int(0)) || ignoreResultI32 )
251
252        // GLSL: textureSize({{.*}}sampler1DArrayShadow
253        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
254        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
255        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
256        && (ivec2(4,2) == textureSize(uniform_sampler1DArrayShadow, int(0)) || ignoreResult)
257
258        // GLSL: textureSize({{.*}}sampler2DArray
259        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
260        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
261        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
262        && (ivec3(4,4,2) == textureSize(gsampler2DArray, int(0)) || ignoreResultI32)
263
264        // GLSL: textureSize({{.*}}sampler2DArrayShadow
265        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
266        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
267        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
268        && ivec3(4,4,2) == textureSize(uniform_sampler2DArrayShadow, int(0))
269
270        // GLSL: imageSize({{.*}}samplerBuffer
271        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerBuffer
272        // SPIR: OpImageQuerySize{{.*}}[[LOAD]]
273        && (int(4) == textureSize(gsamplerBuffer) || ignoreResult)
274
275        // GLSL: textureSize({{.*}}sampler2DMS
276        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DMS
277        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
278        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
279        && ivec2(4) == textureSize(gsampler2DMS)
280
281        // GLSL: textureSize({{.*}}sampler2DMSArray
282        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DMSArray
283        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
284        // SPIR: OpImageQuerySize{{.*}}[[IMAGE]]
285        && ivec3(4,4,2) == textureSize(gsampler2DMSArray)
286
287        // GLSL: textureQueryLod({{.*}}sampler1D
288        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
289        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
290        && vec2(0) == (textureQueryLod(gsampler1D, float(coord)) * vec2(1,0))
291
292        // GLSL: textureQueryLod({{.*}}sampler2D
293        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
294        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
295        && vec2(0) == (textureQueryLod(gsampler2D, vec2(coord)) * vec2(1,0))
296
297        // GLSL: textureQueryLod({{.*}}sampler3D
298        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
299        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
300        && vec2(0) == (textureQueryLod(gsampler3D, vec3(coord)) * vec2(1,0))
301
302        // GLSL: textureQueryLod({{.*}}samplerCube
303        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
304        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
305        && vec2(0) == (textureQueryLod(gsamplerCube, vec3(coord)) * vec2(1,0))
306
307        // GLSL: textureQueryLod({{.*}}sampler1DArray
308        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
309        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
310        && vec2(0) == (textureQueryLod(gsampler1DArray, float(coord)) * vec2(1,0))
311
312        // GLSL: textureQueryLod({{.*}}sampler2DArray
313        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
314        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
315        && vec2(0) == (textureQueryLod(gsampler2DArray, vec2(coord)) * vec2(1,0))
316
317        // GLSL: textureQueryLod({{.*}}samplerCubeArray
318        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
319        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
320        && vec2(0) == (textureQueryLod(gsamplerCubeArray, vec3(coord)) * vec2(1,0))
321
322        // GLSL: textureQueryLod({{.*}}sampler1DShadow
323        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
324        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
325        && vec2(0) == (textureQueryLod(uniform_sampler1DShadow, float(coord)) * vec2(1,0))
326
327        // GLSL: textureQueryLod({{.*}}sampler2DShadow
328        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
329        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
330        && vec2(0) == (textureQueryLod(uniform_sampler2DShadow, vec2(coord)) * vec2(1,0))
331
332        // GLSL: textureQueryLod({{.*}}samplerCubeShadow
333        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeShadow
334        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
335        && vec2(0) == (textureQueryLod(uniform_samplerCubeShadow, vec3(coord)) * vec2(1,0))
336
337        // GLSL: textureQueryLod({{.*}}sampler1DArrayShadow
338        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
339        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
340        && vec2(0) == (textureQueryLod(uniform_sampler1DArrayShadow, float(coord)) * vec2(1,0))
341
342        // GLSL: textureQueryLod({{.*}}sampler2DArrayShadow
343        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
344        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
345        && vec2(0) == (textureQueryLod(uniform_sampler2DArrayShadow, vec2(coord)) * vec2(1,0))
346
347        // GLSL: textureQueryLod({{.*}}samplerCubeArrayShadow
348        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArrayShadow
349        // SPIR: OpImageQueryLod{{.*}}[[LOAD]]
350        && vec2(0) == (textureQueryLod(uniform_samplerCubeArrayShadow, vec3(coord)) * vec2(1,0))
351
352        // GLSL: textureQueryLevels({{.*}}sampler1D
353        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
354        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
355        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
356        && int(3) == textureQueryLevels(gsampler1D)
357
358        // GLSL: textureQueryLevels({{.*}}sampler2D
359        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
360        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
361        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
362        && int(3) == textureQueryLevels(gsampler2D)
363
364        // GLSL: textureQueryLevels({{.*}}sampler3D
365        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
366        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
367        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
368        && int(3) == textureQueryLevels(gsampler3D)
369
370        // GLSL: textureQueryLevels({{.*}}samplerCube
371        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
372        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
373        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
374        && int(3) == textureQueryLevels(gsamplerCube)
375
376        // GLSL: textureQueryLevels({{.*}}sampler1DArray
377        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
378        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
379        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
380        && int(3) == textureQueryLevels(gsampler1DArray)
381
382        // GLSL: textureQueryLevels({{.*}}sampler2DArray
383        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
384        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
385        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
386        && int(3) == textureQueryLevels(gsampler2DArray)
387
388        // GLSL: textureQueryLevels({{.*}}samplerCubeArray
389        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
390        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
391        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
392        && int(3) == textureQueryLevels(gsamplerCubeArray)
393
394        // GLSL: textureQueryLevels({{.*}}sampler1DShadow
395        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
396        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
397        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
398        && int(3) == textureQueryLevels(uniform_sampler1DShadow)
399
400        // GLSL: textureQueryLevels({{.*}}sampler2DShadow
401        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
402        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
403        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
404        && int(3) == textureQueryLevels(uniform_sampler2DShadow)
405
406        // GLSL: textureQueryLevels({{.*}}samplerCubeShadow
407        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeShadow
408        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
409        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
410        && int(3) == textureQueryLevels(uniform_samplerCubeShadow)
411
412        // GLSL: textureQueryLevels({{.*}}sampler1DArrayShadow
413        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
414        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
415        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
416        && int(3) == textureQueryLevels(uniform_sampler1DArrayShadow)
417
418        // GLSL: textureQueryLevels({{.*}}sampler2DArrayShadow
419        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
420        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
421        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
422        && int(3) == textureQueryLevels(uniform_sampler2DArrayShadow)
423
424        // GLSL: textureQueryLevels({{.*}}samplerCubeArrayShadow
425        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArrayShadow
426        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
427        // SPIR: OpImageQueryLevels{{.*}}[[IMAGE]]
428        && int(3) == textureQueryLevels(uniform_samplerCubeArrayShadow)
429
430        // GLSL: textureSamples({{.*}}sampler2DMS
431        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DMS
432        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
433        // SPIR: OpImageQuerySamples{{.*}}[[IMAGE]]
434        && int(1) == textureSamples(gsampler2DMS)
435
436        // GLSL: textureSamples({{.*}}sampler2DMSArray
437        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DMSArray
438        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
439        // SPIR: OpImageQuerySamples{{.*}}[[IMAGE]]
440        && int(1) == textureSamples(gsampler2DMSArray)
441
442        // 8.9.2. Texel Lookup Functions
443
444        // GLSL: texture({{.*}}sampler1D
445        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
446        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
447        && gvec4(T.Element(0)) == texture(gsampler1D, float(coord))
448
449        // GLSL: texture({{.*}}sampler1D
450        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
451        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
452        && gvec4(T.Element(0)) == texture(gsampler1D, float(coord), float(0))
453
454        // GLSL: texture({{.*}}sampler2D
455        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
456        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
457        && gvec4(T.Element(0)) == texture(gsampler2D, vec2(coord))
458
459        // GLSL: texture({{.*}}sampler2D
460        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
461        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
462        && gvec4(T.Element(0)) == texture(gsampler2D, vec2(coord), float(0))
463
464        // GLSL: texture({{.*}}sampler3D
465        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
466        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
467        && gvec4(T.Element(0)) == texture(gsampler3D, vec3(coord))
468
469        // GLSL: texture({{.*}}sampler3D
470        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
471        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
472        && gvec4(T.Element(0)) == texture(gsampler3D, vec3(coord), float(0))
473
474        // GLSL: texture({{.*}}samplerCube
475        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
476        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
477        && gvec4(T.Element(0)) == texture(gsamplerCube, vec3(coord))
478
479        // GLSL: texture({{.*}}samplerCube
480        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
481        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
482        && gvec4(T.Element(0)) == texture(gsamplerCube, vec3(coord), float(0))
483
484        // GLSL: texture({{.*}}sampler1DShadow
485        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
486        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]
487        && float(0) == texture(uniform_sampler1DShadow, vec3(coord))
488
489        // GLSL: texture({{.*}}sampler1DShadow
490        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
491        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
492        && float(0) == texture(uniform_sampler1DShadow, vec3(coord), float(0))
493
494        // GLSL: texture({{.*}}sampler2DShadow
495        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
496        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]
497        && (float(0) == texture(uniform_sampler2DShadow, vec3(coord)) || ignoreResultF32)
498
499        // GLSL: texture({{.*}}sampler2DShadow
500        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
501        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
502        && (float(0) == texture(uniform_sampler2DShadow, vec3(coord), float(0)) || ignoreResultF32)
503
504        // GLSL: texture({{.*}}samplerCubeShadow
505        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeShadow
506        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]
507        && (float(0) == texture(uniform_samplerCubeShadow, vec4(coord)) || ignoreResultF32)
508
509        // GLSL: texture({{.*}}samplerCubeShadow
510        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeShadow
511        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
512        && (float(0) == texture(uniform_samplerCubeShadow, vec4(coord), float(0)) || ignoreResultF32)
513
514        // GLSL: texture({{.*}}sampler2DArray
515        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
516        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
517        && gvec4(T.Element(0)) == texture(gsampler2DArray, vec3(coord))
518
519        // GLSL: texture({{.*}}sampler2DArray
520        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
521        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
522        && gvec4(T.Element(0)) == texture(gsampler2DArray, vec3(coord), float(0))
523
524        // GLSL: texture({{.*}}samplerCubeArray
525        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
526        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
527        && gvec4(T.Element(0)) == texture(gsamplerCubeArray, vec4(coord))
528
529        // GLSL: texture({{.*}}samplerCubeArray
530        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
531        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
532        && gvec4(T.Element(0)) == texture(gsamplerCubeArray, vec4(coord), float(0))
533
534        // GLSL: texture({{.*}}sampler1DArray
535        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
536        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
537        && gvec4(T.Element(0)) == texture(gsampler1DArray, vec2(coord))
538
539        // GLSL: texture({{.*}}sampler1DArray
540        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
541        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
542        && gvec4(T.Element(0)) == texture(gsampler1DArray, vec2(coord), float(0))
543
544        // GLSL: texture({{.*}}sampler1DArrayShadow
545        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
546        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]
547        && float(0) == texture(uniform_sampler1DArrayShadow, vec3(coord))
548
549        // GLSL: texture({{.*}}sampler1DArrayShadow
550        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
551        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]{{.*}} Bias %
552        && float(0) == texture(uniform_sampler1DArrayShadow, vec3(coord), float(0))
553
554        // GLSL: texture({{.*}}sampler2DArrayShadow
555        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
556        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]
557        && float(0) == texture(uniform_sampler2DArrayShadow, vec4(coord))
558
559        // GLSL: texture({{.*}}sampler2DRect
560        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
561        // SPIR: OpImageSampleImplicitLod{{.*}}[[LOAD]]
562        && gvec4(T.Element(0)) == texture(gsampler2DRect, vec2(coord))
563
564        // GLSL: texture({{.*}}sampler2DRectShadow
565        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
566        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]
567        && float(0) == texture(uniform_sampler2DRectShadow, vec3(coord))
568
569        // GLSL: texture({{.*}}samplerCubeArrayShadow
570        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArrayShadow
571        // SPIR: OpImageSampleDrefImplicitLod{{.*}}[[LOAD]]
572        && float(0) == texture(uniform_samplerCubeArrayShadow, vec4(coord), float(0))
573
574        // GLSL: textureProj({{.*}}sampler1D
575        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
576        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]
577        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec2(coord))
578
579        // GLSL: textureProj({{.*}}sampler1D
580        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
581        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias %
582        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec2(coord), float(0))
583
584        // GLSL: textureProj({{.*}}sampler1D
585        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
586        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]
587        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec4(coord))
588
589        // GLSL: textureProj({{.*}}sampler1D
590        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
591        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias %
592        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec4(coord), float(0))
593
594        // GLSL: textureProj({{.*}}sampler2D
595        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
596        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]
597        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec3(coord))
598
599        // GLSL: textureProj({{.*}}sampler2D
600        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
601        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias %
602        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec3(coord), float(0))
603
604        // GLSL: textureProj({{.*}}sampler2D
605        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
606        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]
607        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec4(coord))
608
609        // GLSL: textureProj({{.*}}sampler2D
610        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
611        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias %
612        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec4(coord), float(0))
613
614        // GLSL: textureProj({{.*}}sampler3D
615        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
616        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]
617        && gvec4(T.Element(0)) == textureProj(gsampler3D, vec4(coord))
618
619        // GLSL: textureProj({{.*}}sampler3D
620        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
621        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias %
622        && gvec4(T.Element(0)) == textureProj(gsampler3D, vec4(coord), float(0))
623
624        // GLSL: textureProj({{.*}}sampler1DShadow
625        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
626        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]
627        && float(0) == textureProj(uniform_sampler1DShadow, vec4(coord))
628
629        // GLSL: textureProj({{.*}}sampler1DShadow
630        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
631        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]{{.*}} Bias %
632        && float(0) == textureProj(uniform_sampler1DShadow, vec4(coord), float(0))
633
634        // GLSL: textureProj({{.*}}sampler2DShadow
635        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
636        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]
637        && (float(0) == textureProj(uniform_sampler2DShadow, vec4(coord)) || ignoreResultF32)
638
639        // GLSL: textureProj({{.*}}sampler2DShadow
640        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
641        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]{{.*}} Bias %
642        && (float(0) == textureProj(uniform_sampler2DShadow, vec4(coord), float(0)) || ignoreResultF32)
643
644        // GLSL-COUNT-2: textureProj({{.*}}sampler2DRect
645        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
646        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]
647        && gvec4(T.Element(0)) == textureProj(gsampler2DRect, vec3(coord))
648        && gvec4(T.Element(0)) == textureProj(gsampler2DRect, vec4(coord))
649
650        // GLSL: textureProj({{.*}}sampler2DRectShadow
651        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
652        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]
653        && float(0) == textureProj(uniform_sampler2DRectShadow, vec4(coord))
654
655        // GLSL: textureLod({{.*}}sampler1D
656        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
657        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
658        && gvec4(T.Element(0)) == textureLod(gsampler1D, float(coord), float(0))
659
660        // GLSL: textureLod({{.*}}sampler2D
661        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
662        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
663        && gvec4(T.Element(0)) == textureLod(gsampler2D, vec2(coord), float(0))
664
665        // GLSL: textureLod({{.*}}sampler3D
666        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
667        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
668        && gvec4(T.Element(0)) == textureLod(gsampler3D, vec3(coord), float(0))
669
670        // GLSL: textureLod({{.*}}samplerCube
671        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
672        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
673        && gvec4(T.Element(0)) == textureLod(gsamplerCube, vec3(coord), float(0))
674
675        // GLSL: textureLod({{.*}}sampler2DShadow
676        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
677        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
678        && (float(0) == textureLod(uniform_sampler2DShadow, vec3(coord), float(0)) || ignoreResultF32)
679
680        // GLSL: textureLod({{.*}}sampler1DShadow
681        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
682        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
683        && float(0) == textureLod(uniform_sampler1DShadow, vec3(coord), float(0))
684
685        // GLSL: textureLod({{.*}}sampler1DArray
686        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
687        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
688        && gvec4(T.Element(0)) == textureLod(gsampler1DArray, vec2(coord), float(0))
689
690        // GLSL: textureLod({{.*}}sampler1DArrayShadow
691        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
692        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
693        && float(0) == textureLod(uniform_sampler1DArrayShadow, vec3(coord), float(0))
694
695        // GLSL: textureLod({{.*}}sampler2DArray
696        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
697        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
698        && gvec4(T.Element(0)) == textureLod(gsampler2DArray, vec3(coord), float(0))
699
700        // GLSL: textureLod({{.*}}samplerCubeArray
701        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
702        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
703        && gvec4(T.Element(0)) == textureLod(gsamplerCubeArray, vec4(coord), float(0))
704
705        // GLSL: textureOffset({{.*}}sampler1D
706        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
707        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
708        && gvec4(T.Element(0)) == textureOffset(gsampler1D, float(coord), int(1))
709
710        // GLSL: textureOffset({{.*}}sampler1D
711        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
712        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
713        && gvec4(T.Element(0)) == textureOffset(gsampler1D, float(coord), int(0), float(0))
714
715        // GLSL: textureOffset({{.*}}sampler2D
716        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
717        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
718        && gvec4(T.Element(0)) == textureOffset(gsampler2D, vec2(coord), offset2D)
719
720        // GLSL: textureOffset({{.*}}sampler2D
721        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
722        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
723        && gvec4(T.Element(0)) == textureOffset(gsampler2D, vec2(coord), offset2D, float(0))
724
725        // GLSL: textureOffset({{.*}}sampler3D
726        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
727        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
728        && gvec4(T.Element(0)) == textureOffset(gsampler3D, vec3(coord), offset3D)
729
730        // GLSL: textureOffset({{.*}}sampler3D
731        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
732        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
733        && gvec4(T.Element(0)) == textureOffset(gsampler3D, vec3(coord), offset3D, float(0))
734
735        // GLSL: textureOffset({{.*}}sampler2DShadow
736        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
737        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
738        && (float(0) == textureOffset(uniform_sampler2DShadow, vec3(coord), offset2D) || ignoreResultF32)
739
740        // GLSL: textureOffset({{.*}}sampler2DShadow
741        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
742        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
743        && (float(0) == textureOffset(uniform_sampler2DShadow, vec3(coord), offset2D, float(0)) || ignoreResultF32)
744
745        // GLSL: textureOffset({{.*}}sampler2DRect
746        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
747        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
748        && gvec4(T.Element(0)) == textureOffset(gsampler2DRect, vec2(coord), offset2D)
749
750        // GLSL: textureOffset({{.*}}sampler2DRectShadow
751        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
752        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
753        && float(0) == textureOffset(uniform_sampler2DRectShadow, vec3(coord), offset2D)
754
755        // GLSL: textureOffset({{.*}}sampler1DShadow
756        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
757        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
758        && float(0) == textureOffset(uniform_sampler1DShadow, vec3(coord), int(0))
759
760        // GLSL: textureOffset({{.*}}sampler1DShadow
761        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
762        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
763        && float(0) == textureOffset(uniform_sampler1DShadow, vec3(coord), int(0), float(0))
764
765        // GLSL: textureOffset({{.*}}sampler1DArray
766        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
767        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
768        && gvec4(T.Element(0)) == textureOffset(gsampler1DArray, vec2(coord), int(1))
769
770        // GLSL: textureOffset({{.*}}sampler1DArray
771        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
772        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
773        && gvec4(T.Element(0)) == textureOffset(gsampler1DArray, vec2(coord), int(0), float(0))
774
775        // GLSL: textureOffset({{.*}}sampler2DArray
776        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
777        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}}ConstOffset %
778        && gvec4(T.Element(0)) == textureOffset(gsampler2DArray, vec3(coord), offset2D)
779
780        // GLSL: textureOffset({{.*}}sampler2DArray
781        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
782        // SPIR: OpImageSampleImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
783        && gvec4(T.Element(0)) == textureOffset(gsampler2DArray, vec3(coord), offset2D, float(0))
784
785        // GLSL: textureOffset({{.*}}sampler1DArrayShadow
786        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
787        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
788        && float(0) == textureOffset(uniform_sampler1DArrayShadow, vec3(coord), int(0))
789
790        // GLSL: textureOffset({{.*}}sampler1DArrayShadow
791        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
792        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
793        && float(0) == textureOffset(uniform_sampler1DArrayShadow, vec3(coord), int(0), float(0))
794
795        // GLSL: textureOffset({{.*}}sampler2DArrayShadow
796        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
797        // SPIR: OpImageSampleDrefImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
798        && float(0) == textureOffset(uniform_sampler2DArrayShadow, vec4(coord), offset2D)
799
800        // GLSL: texelFetch({{.*}}sampler1D
801        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
802        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
803        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod %
804        && gvec4(T.Element(0)) == texelFetch(gsampler1D, int(coord), int(0))
805
806        // GLSL: texelFetch({{.*}}sampler2D
807        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
808        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
809        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod %
810        && gvec4(T.Element(0)) == texelFetch(gsampler2D, ivec2(coord), int(0))
811
812        // GLSL: texelFetch({{.*}}sampler3D
813        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
814        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
815        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod %
816        && gvec4(T.Element(0)) == texelFetch(gsampler3D, ivec3(coord), int(0))
817
818        // GLSL: texelFetch({{.*}}sampler2DRect
819        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
820        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
821        // SPIR: OpImageFetch {{.*}}[[IMAGE]]
822        && gvec4(T.Element(0)) == texelFetch(gsampler2DRect, ivec2(coord))
823
824        // GLSL: texelFetch({{.*}}sampler1DArray
825        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
826        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
827        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod %
828        && gvec4(T.Element(0)) == texelFetch(gsampler1DArray, ivec2(coord), int(0))
829
830        // GLSL: texelFetch({{.*}}sampler2DArray
831        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
832        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
833        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod %
834        && gvec4(T.Element(0)) == texelFetch(gsampler2DArray, ivec3(coord), int(0))
835
836        // GLSL: imageLoad({{.*}}samplerBuffer
837        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerBuffer
838        // SPIR: OpImageRead {{.*}}[[LOAD]]
839        && (gvec4(T.Element(0)) == texelFetch(gsamplerBuffer, int(coord)) || ignoreResultF32)
840
841        // GLSL: texelFetch({{.*}}sampler2DMS
842        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DMS
843        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
844        // S-PIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod %
845        && gvec4(T.Element(0)) == texelFetch(gsampler2DMS, ivec2(coord), int(0))
846
847        // GLSL: texelFetch({{.*}}sampler2DMSArray
848        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DMSArray
849        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
850        // S-PIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod %
851        && gvec4(T.Element(0)) == texelFetch(gsampler2DMSArray, ivec3(coord), int(0))
852
853        // GLSL: texelFetchOffset({{.*}}sampler1D
854        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
855        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
856        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod|ConstOffset %
857        && gvec4(T.Element(0)) == texelFetchOffset(gsampler1D, int(coord), int(0), int(0))
858
859        // GLSL: texelFetchOffset({{.*}}sampler2D
860        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
861        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
862        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod|ConstOffset %
863        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2D, ivec2(coord), int(0), offset2D)
864
865        // GLSL: texelFetchOffset({{.*}}sampler3D
866        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
867        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
868        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod|ConstOffset %
869        && gvec4(T.Element(0)) == texelFetchOffset(gsampler3D, ivec3(coord), int(0), offset3D)
870
871        // GLSL: texelFetchOffset({{.*}}sampler2DRect
872        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
873        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
874        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod|ConstOffset %
875        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2DRect, ivec2(coord), offset2D)
876
877        // GLSL: texelFetchOffset({{.*}}sampler1DArray
878        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
879        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
880        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod|ConstOffset %
881        && gvec4(T.Element(0)) == texelFetchOffset(gsampler1DArray, ivec2(coord), int(0), int(0))
882
883        // GLSL: texelFetchOffset({{.*}}sampler2DArray
884        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
885        // SPIR: [[IMAGE:%[1-9][0-9]*]] = OpImage{{.*}}[[LOAD]]
886        // SPIR: OpImageFetch {{.*}}[[IMAGE]]{{.*}} Lod|ConstOffset %
887        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2DArray, ivec3(coord), int(0), offset2D)
888
889        // GLSL: textureProjOffset({{.*}}sampler1D
890        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
891        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
892        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec2(coord), int(0))
893
894        // GLSL: textureProjOffset({{.*}}sampler1D
895        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
896        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
897        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec2(coord), int(0), float(0))
898
899        // GLSL: textureProjOffset({{.*}}sampler1D
900        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
901        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
902        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec4(coord), int(0))
903
904        // GLSL: textureProjOffset({{.*}}sampler1D
905        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
906        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
907        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec4(coord), int(0), float(0))
908
909        // GLSL: textureProjOffset({{.*}}sampler2D
910        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
911        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
912        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec3(coord), offset2D)
913
914        // GLSL: textureProjOffset({{.*}}sampler2D
915        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
916        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
917        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec3(coord), offset2D, float(0))
918
919        // GLSL: textureProjOffset({{.*}}sampler2D
920        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
921        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
922        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec4(coord), offset2D)
923
924        // GLSL: textureProjOffset({{.*}}sampler2D
925        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
926        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
927        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec4(coord), offset2D, float(0))
928
929        // GLSL: textureProjOffset({{.*}}sampler3D
930        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
931        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
932        && gvec4(T.Element(0)) == textureProjOffset(gsampler3D, vec4(coord), offset3D)
933
934        // GLSL: textureProjOffset({{.*}}sampler3D
935        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
936        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
937        && gvec4(T.Element(0)) == textureProjOffset(gsampler3D, vec4(coord), offset3D, float(0))
938
939        // GLSL-COUNT-2: textureProjOffset({{.*}}sampler2DRect
940        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
941        // SPIR: OpImageSampleProjImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
942        && gvec4(T.Element(0)) == textureProjOffset(gsampler2DRect, vec3(coord), offset2D)
943        && gvec4(T.Element(0)) == textureProjOffset(gsampler2DRect, vec4(coord), offset2D)
944
945        // GLSL: textureProjOffset({{.*}}sampler2DRectShadow
946        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
947        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
948        && float(0) == textureProjOffset(uniform_sampler2DRectShadow, vec4(coord), offset2D)
949
950        // GLSL: textureProjOffset({{.*}}sampler1DShadow
951        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
952        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
953        && float(0) == textureProjOffset(uniform_sampler1DShadow, vec4(coord), int(0))
954
955        // GLSL: textureProjOffset({{.*}}sampler1DShadow
956        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
957        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
958        && float(0) == textureProjOffset(uniform_sampler1DShadow, vec4(coord), int(0), float(0))
959
960        // GLSL: textureProjOffset({{.*}}sampler2DShadow
961        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
962        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]{{.*}} ConstOffset %
963        && (float(0) == textureProjOffset(uniform_sampler2DShadow, vec4(coord), offset2D) || ignoreResultF32)
964
965        // GLSL: textureProjOffset({{.*}}sampler2DShadow
966        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
967        // SPIR: OpImageSampleProjDrefImplicitLod {{.*}}[[LOAD]]{{.*}} Bias|ConstOffset %
968        && (float(0) == textureProjOffset(uniform_sampler2DShadow, vec4(coord), offset2D, float(0)) || ignoreResultF32)
969
970        // GLSL: textureLodOffset({{.*}}sampler1D
971        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
972        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
973        && gvec4(T.Element(0)) == textureLodOffset(gsampler1D, float(coord), float(0), 0)
974
975        // GLSL: textureLodOffset({{.*}}sampler2D
976        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
977        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
978        && gvec4(T.Element(0)) == textureLodOffset(gsampler2D, vec2(coord), float(0), offset2D)
979
980        // GLSL: textureLodOffset({{.*}}sampler3D
981        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
982        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
983        && gvec4(T.Element(0)) == textureLodOffset(gsampler3D, vec3(coord), float(0), offset3D)
984
985        // GLSL: textureLodOffset({{.*}}sampler1DShadow
986        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
987        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
988        && float(0) == textureLodOffset(uniform_sampler1DShadow, vec3(coord), float(0), 0)
989
990        // GLSL: textureLodOffset({{.*}}sampler2DShadow
991        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
992        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
993        && (float(0) == textureLodOffset(uniform_sampler2DShadow, vec3(coord), float(0), offset2D) || ignoreResultF32)
994
995        // GLSL: textureLodOffset({{.*}}sampler1DArray
996        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
997        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
998        && gvec4(T.Element(0)) == textureLodOffset(gsampler1DArray, vec2(coord), float(0), 0)
999
1000        // GLSL: textureLodOffset({{.*}}sampler2DArray
1001        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
1002        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
1003        && gvec4(T.Element(0)) == textureLodOffset(gsampler2DArray, vec3(coord), float(0), offset2D)
1004
1005        // GLSL: textureLodOffset({{.*}}sampler1DArrayShadow
1006        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
1007        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
1008        && float(0) == textureLodOffset(uniform_sampler1DArrayShadow, vec3(coord), float(0), int(0))
1009
1010        // GLSL-COUNT-2: textureProjLod({{.*}}sampler1D
1011        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
1012        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
1013        && gvec4(T.Element(0)) == textureProjLod(gsampler1D, vec2(coord), float(0))
1014        && gvec4(T.Element(0)) == textureProjLod(gsampler1D, vec4(coord), float(0))
1015
1016        // GLSL-COUNT-2: textureProjLod({{.*}}sampler2D
1017        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1018        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
1019        && gvec4(T.Element(0)) == textureProjLod(gsampler2D, vec3(coord), float(0))
1020        && gvec4(T.Element(0)) == textureProjLod(gsampler2D, vec4(coord), float(0))
1021
1022        // GLSL: textureProjLod({{.*}}sampler3D
1023        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
1024        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
1025        && gvec4(T.Element(0)) == textureProjLod(gsampler3D, vec4(coord), float(0))
1026
1027        // GLSL: textureProjLod({{.*}}sampler1DShadow
1028        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
1029        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
1030        && float(0) == textureProjLod(uniform_sampler1DShadow, vec4(coord), float(0))
1031
1032        // GLSL: textureProjLod({{.*}}sampler2DShadow
1033        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1034        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod %
1035        && (float(0) == textureProjLod(uniform_sampler2DShadow, vec4(coord), float(0)) || ignoreResultF32)
1036
1037        // GLSL-COUNT-2: textureProjLodOffset({{.*}}sampler1D
1038        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
1039        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
1040        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler1D, vec2(coord), float(0), 0)
1041        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler1D, vec4(coord), float(0), 0)
1042
1043        // GLSL-COUNT-2: textureProjLodOffset({{.*}}sampler2D
1044        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1045        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
1046        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler2D, vec3(coord), float(0), offset2D)
1047        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler2D, vec4(coord), float(0), offset2D)
1048
1049        // GLSL: textureProjLodOffset({{.*}}sampler3D
1050        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
1051        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
1052        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler3D, vec4(coord), float(0), offset3D)
1053
1054        // GLSL: textureProjLodOffset({{.*}}sampler1DShadow
1055        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
1056        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
1057        && float(0) == textureProjLodOffset(uniform_sampler1DShadow, vec4(coord), float(0), int(0))
1058
1059        // GLSL: textureProjLodOffset({{.*}}sampler2DShadow
1060        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1061        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Lod|ConstOffset %
1062        && (float(0) == textureProjLodOffset(uniform_sampler2DShadow, vec4(coord), float(0), offset2D) || ignoreResultF32)
1063
1064        // GLSL: textureGrad({{.*}}sampler1D
1065        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
1066        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1067        && gvec4(T.Element(0)) == textureGrad(gsampler1D, float(coord), float(0), float(0))
1068
1069        // GLSL: textureGrad({{.*}}sampler2D
1070        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1071        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1072        && gvec4(T.Element(0)) == textureGrad(gsampler2D, vec2(coord), vec2(0), vec2(0))
1073
1074        // GLSL: textureGrad({{.*}}sampler3D
1075        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
1076        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1077        && gvec4(T.Element(0)) == textureGrad(gsampler3D, vec3(coord), vec3(0), vec3(0))
1078
1079        // GLSL: textureGrad({{.*}}samplerCube
1080        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
1081        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1082        && gvec4(T.Element(0)) == textureGrad(gsamplerCube, vec3(coord), vec3(0), vec3(0))
1083
1084        // GLSL: textureGrad({{.*}}sampler2DRect
1085        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
1086        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1087        && gvec4(T.Element(0)) == textureGrad(gsampler2DRect, vec2(coord), vec2(0), vec2(0))
1088
1089        // GLSL: textureGrad({{.*}}sampler2DRectShadow
1090        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
1091        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1092        && float(0) == textureGrad(uniform_sampler2DRectShadow, vec3(coord), vec2(0), vec2(0))
1093
1094        // GLSL: textureGrad({{.*}}sampler1DShadow
1095        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
1096        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1097        && float(0) == textureGrad(uniform_sampler1DShadow, vec3(coord), float(0), float(0))
1098
1099        // GLSL: textureGrad({{.*}}sampler1DArray
1100        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
1101        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1102        && gvec4(T.Element(0)) == textureGrad(gsampler1DArray, vec2(coord), float(0), float(0))
1103
1104        // GLSL: textureGrad({{.*}}sampler2DArray
1105        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
1106        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1107        && gvec4(T.Element(0)) == textureGrad(gsampler2DArray, vec3(coord), vec2(0), vec2(0))
1108
1109        // GLSL: textureGrad({{.*}}sampler1DArrayShadow
1110        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
1111        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1112        && float(0) == textureGrad(uniform_sampler1DArrayShadow, vec3(coord), float(0), float(0))
1113
1114        // GLSL: textureGrad({{.*}}sampler2DShadow
1115        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1116        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1117        && (float(0) == textureGrad(uniform_sampler2DShadow, vec3(coord), vec2(0), vec2(0)) || ignoreResultF32)
1118
1119        // GLSL: textureGrad({{.*}}samplerCubeShadow
1120        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeShadow
1121        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1122        && (float(0) == textureGrad(uniform_samplerCubeShadow, vec4(coord), vec3(0), vec3(0)) || ignoreResultF32)
1123
1124        // GLSL: textureGrad({{.*}}sampler2DArrayShadow
1125        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
1126        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1127        && float(0) == textureGrad(uniform_sampler2DArrayShadow, vec4(coord), vec2(0), vec2(0))
1128
1129        // GLSL: textureGrad({{.*}}samplerCubeArray
1130        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
1131        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1132        && gvec4(T.Element(0)) == textureGrad(gsamplerCubeArray, vec4(coord), vec3(0), vec3(0))
1133
1134        // GLSL: textureGradOffset({{.*}}sampler1D
1135        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
1136        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1137        && gvec4(T.Element(0)) == textureGradOffset(gsampler1D, float(coord), float(0), float(0), 0)
1138
1139        // GLSL: textureGradOffset({{.*}}sampler2D
1140        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1141        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1142        && gvec4(T.Element(0)) == textureGradOffset(gsampler2D, vec2(coord), vec2(0), vec2(0), offset2D)
1143
1144        // GLSL: textureGradOffset({{.*}}sampler3D
1145        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
1146        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1147        && gvec4(T.Element(0)) == textureGradOffset(gsampler3D, vec3(coord), vec3(0), vec3(0), offset3D)
1148
1149        // GLSL: textureGradOffset({{.*}}sampler2DRect
1150        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
1151        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1152        && gvec4(T.Element(0)) == textureGradOffset(gsampler2DRect, vec2(coord), vec2(0), vec2(0), offset2D)
1153
1154        // GLSL: textureGradOffset({{.*}}sampler2DRectShadow
1155        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
1156        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1157        && float(0) == textureGradOffset(uniform_sampler2DRectShadow, vec3(coord), vec2(0), vec2(0), offset2D)
1158
1159        // GLSL: textureGradOffset({{.*}}sampler1DShadow
1160        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
1161        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1162        && float(0) == textureGradOffset(uniform_sampler1DShadow, vec3(coord), float(0), float(0), int(0))
1163
1164        // GLSL: textureGradOffset({{.*}}sampler2DShadow
1165        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1166        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1167        && (float(0) == textureGradOffset(uniform_sampler2DShadow, vec3(coord), vec2(0), vec2(0), offset2D) || ignoreResultF32)
1168
1169        // GLSL: textureGradOffset({{.*}}sampler2DArray
1170        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
1171        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1172        && gvec4(T.Element(0)) == textureGradOffset(gsampler2DArray, vec3(coord), vec2(0), vec2(0), offset2D)
1173
1174        // GLSL: textureGradOffset({{.*}}sampler1DArray
1175        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArray
1176        // SPIR: OpImageSampleExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1177        && gvec4(T.Element(0)) == textureGradOffset(gsampler1DArray, vec2(coord), float(0), float(0), int(0))
1178
1179        // GLSL: textureGradOffset({{.*}}sampler1DArrayShadow
1180        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DArrayShadow
1181        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1182        && float(0) == textureGradOffset(uniform_sampler1DArrayShadow, vec3(coord), float(0), float(0), int(0))
1183
1184        // GLSL: textureGradOffset({{.*}}sampler2DArrayShadow
1185        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
1186        // SPIR: OpImageSampleDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1187        && float(0) == textureGradOffset(uniform_sampler2DArrayShadow, vec4(coord), vec2(0), vec2(0), offset2D)
1188
1189        // GLSL-COUNT-2: textureProjGrad({{.*}}sampler1D
1190        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
1191        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1192        && gvec4(T.Element(0)) == textureProjGrad(gsampler1D, vec2(coord), float(0), float(0))
1193        && gvec4(T.Element(0)) == textureProjGrad(gsampler1D, vec4(coord), float(0), float(0))
1194
1195        // GLSL-COUNT-2: textureProjGrad({{.*}}sampler2D
1196        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1197        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1198        && gvec4(T.Element(0)) == textureProjGrad(gsampler2D, vec3(coord), vec2(0), vec2(0))
1199        && gvec4(T.Element(0)) == textureProjGrad(gsampler2D, vec4(coord), vec2(0), vec2(0))
1200
1201        // GLSL: textureProjGrad({{.*}}sampler3D
1202        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
1203        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1204        && gvec4(T.Element(0)) == textureProjGrad(gsampler3D, vec4(coord), vec3(0), vec3(0))
1205
1206        // GLSL-COUNT-2: textureProjGrad({{.*}}sampler2DRect
1207        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
1208        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1209        && gvec4(T.Element(0)) == textureProjGrad(gsampler2DRect, vec3(coord), vec2(0), vec2(0))
1210        && gvec4(T.Element(0)) == textureProjGrad(gsampler2DRect, vec4(coord), vec2(0), vec2(0))
1211
1212        // GLSL: textureProjGrad({{.*}}sampler2DRectShadow
1213        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
1214        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1215        && float(0) == textureProjGrad(uniform_sampler2DRectShadow, vec4(coord), vec2(0), vec2(0))
1216
1217        // GLSL: textureProjGrad({{.*}}sampler1DShadow
1218        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
1219        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1220        && float(0) == textureProjGrad(uniform_sampler1DShadow, vec4(coord), float(0), float(0))
1221
1222        // GLSL: textureProjGrad({{.*}}sampler2DShadow
1223        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1224        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad %
1225        && (float(0) == textureProjGrad(uniform_sampler2DShadow, vec4(coord), vec2(0), vec2(0)) || ignoreResultF32)
1226
1227        // GLSL-COUNT-2: textureProjGradOffset({{.*}}sampler1D
1228        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1D
1229        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1230        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler1D, vec2(coord), float(0), float(0), 0)
1231        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler1D, vec4(coord), float(0), float(0), 0)
1232
1233        // GLSL-COUNT-2: textureProjGradOffset({{.*}}sampler2D
1234        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1235        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1236        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2D, vec3(coord), vec2(0), vec2(0), offset2D)
1237        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2D, vec4(coord), vec2(0), vec2(0), offset2D)
1238
1239        // GLSL: textureProjGradOffset({{.*}}sampler3D
1240        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler3D
1241        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1242        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler3D, vec4(coord), vec3(0), vec3(0), offset3D)
1243
1244        // GLSL-COUNT-2: textureProjGradOffset({{.*}}sampler2DRect
1245        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
1246        // SPIR: OpImageSampleProjExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1247        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2DRect, vec3(coord), vec2(0), vec2(0), offset2D)
1248        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2DRect, vec4(coord), vec2(0), vec2(0), offset2D)
1249
1250        // GLSL: textureProjGradOffset({{.*}}sampler2DRectShadow
1251        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
1252        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1253        && float(0) == textureProjGradOffset(uniform_sampler2DRectShadow, vec4(coord), vec2(0), vec2(0), offset2D)
1254
1255        // GLSL: textureProjGradOffset({{.*}}sampler1DShadow
1256        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler1DShadow
1257        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1258        && float(0) == textureProjGradOffset(uniform_sampler1DShadow, vec4(coord), float(0), float(0), int(0))
1259
1260        // GLSL: textureProjGradOffset({{.*}}sampler2DShadow
1261        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1262        // SPIR: OpImageSampleProjDrefExplicitLod {{.*}}[[LOAD]]{{.*}} Grad|ConstOffset %
1263        && (float(0) == textureProjGradOffset(uniform_sampler2DShadow, vec4(coord), vec2(0), vec2(0), offset2D) || ignoreResultF32)
1264        
1265        // 8.9.4. Texture Gather Functions
1266
1267        // GLSL-COUNT-2: textureGather({{.*}}sampler2D
1268        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1269        // SPIR: OpImageGather {{.*}}[[LOAD]]
1270        && gvec4(T.Element(0)) == textureGather(gsampler2D, vec2(coord))
1271        && gvec4(T.Element(0)) == textureGather(gsampler2D, vec2(coord), int(0))
1272
1273        // GLSL-COUNT-2: textureGather({{.*}}sampler2DArray
1274        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
1275        // SPIR: OpImageGather {{.*}}[[LOAD]]
1276        && gvec4(T.Element(0)) == textureGather(gsampler2DArray, vec3(coord))
1277        && gvec4(T.Element(0)) == textureGather(gsampler2DArray, vec3(coord), int(0))
1278
1279        // GLSL-COUNT-2: textureGather({{.*}}samplerCube
1280        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCube
1281        // SPIR: OpImageGather {{.*}}[[LOAD]]
1282        && gvec4(T.Element(0)) == textureGather(gsamplerCube, vec3(coord))
1283        && gvec4(T.Element(0)) == textureGather(gsamplerCube, vec3(coord), int(0))
1284
1285        // GLSL-COUNT-2: textureGather({{.*}}samplerCubeArray
1286        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArray
1287        // SPIR: OpImageGather {{.*}}[[LOAD]]
1288        && gvec4(T.Element(0)) == textureGather(gsamplerCubeArray, vec4(coord))
1289        && gvec4(T.Element(0)) == textureGather(gsamplerCubeArray, vec4(coord), int(0))
1290
1291        // GLSL-COUNT-2: textureGather({{.*}}sampler2DRect
1292        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
1293        // SPIR: OpImageGather {{.*}}[[LOAD]]
1294        && gvec4(T.Element(0)) == textureGather(gsampler2DRect, vec2(coord))
1295        && gvec4(T.Element(0)) == textureGather(gsampler2DRect, vec2(coord), int(0))
1296
1297        // GLSL: textureGather({{.*}}sampler2DShadow
1298        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1299        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]
1300        && (vec4(0) == textureGather(uniform_sampler2DShadow, vec2(coord), float(0)) || ignoreResultF32)
1301
1302        // GLSL: textureGather({{.*}}sampler2DArrayShadow
1303        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
1304        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]
1305        && vec4(0) == textureGather(uniform_sampler2DArrayShadow, vec3(coord), float(0))
1306
1307        // GLSL: textureGather({{.*}}samplerCubeShadow
1308        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeShadow
1309        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]
1310        && (vec4(0) == textureGather(uniform_samplerCubeShadow, vec3(coord), float(0)) || ignoreResultF32)
1311
1312        // GLSL: textureGather({{.*}}samplerCubeArrayShadow
1313        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}samplerCubeArrayShadow
1314        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]
1315        && vec4(0) == textureGather(uniform_samplerCubeArrayShadow, vec4(coord), float(0))
1316
1317        // GLSL: textureGather({{.*}}sampler2DRectShadow
1318        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
1319        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]
1320        && vec4(0) == textureGather(uniform_sampler2DRectShadow, vec2(coord), float(0))
1321
1322        // GLSL-COUNT-2: textureGatherOffset({{.*}}sampler2D
1323        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1324        // SPIR: OpImageGather {{.*}}[[LOAD]]{{.*}} ConstOffset %
1325        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2D, vec2(coord), offset2D)
1326        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2D, vec2(coord), offset2D, int(0))
1327
1328        // GLSL-COUNT-2: textureGatherOffset({{.*}}sampler2DArray
1329        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
1330        // SPIR: OpImageGather {{.*}}[[LOAD]]{{.*}} ConstOffset %
1331        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DArray, vec3(coord), offset2D)
1332        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DArray, vec3(coord), offset2D, int(0))
1333
1334        // GLSL: textureGatherOffset({{.*}}sampler2DShadow
1335        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1336        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]{{.*}} ConstOffset %
1337        && (vec4(0) == textureGatherOffset(uniform_sampler2DShadow, vec2(coord), float(0), offset2D) || ignoreResultF32)
1338
1339        // GLSL: textureGatherOffset({{.*}}sampler2DArrayShadow
1340        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
1341        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]{{.*}} ConstOffset %
1342        && vec4(0) == textureGatherOffset(uniform_sampler2DArrayShadow, vec3(coord), float(0), offset2D)
1343
1344        // GLSL-COUNT-2: textureGatherOffset({{.*}}sampler2DRect
1345        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
1346        // SPIR: OpImageGather {{.*}}[[LOAD]]{{.*}} ConstOffset %
1347        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DRect, vec2(coord), offset2D)
1348        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DRect, vec2(coord), offset2D, int(0))
1349
1350        // GLSL: textureGatherOffset({{.*}}sampler2DRectShadow
1351        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
1352        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]{{.*}} ConstOffset %
1353        && vec4(0) == textureGatherOffset(uniform_sampler2DRectShadow, vec2(coord), float(0), offset2D)
1354
1355        // GLSL-COUNT-2: textureGatherOffsets({{.*}}sampler2D
1356        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2D
1357        // SPIR: OpImageGather {{.*}}[[LOAD]]{{.*}} ConstOffsets %
1358        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2D, vec2(coord), offsets)
1359        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2D, vec2(coord), offsets, int(0))
1360
1361        // GLSL-COUNT-2: textureGatherOffsets({{.*}}sampler2DArray
1362        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArray
1363        // SPIR: OpImageGather {{.*}}[[LOAD]]{{.*}} ConstOffsets %
1364        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DArray, vec3(coord), offsets)
1365        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DArray, vec3(coord), offsets, int(0))
1366
1367        // GLSL: textureGatherOffsets({{.*}}sampler2DShadow
1368        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DShadow
1369        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]{{.*}} ConstOffsets %
1370        && (vec4(0) == textureGatherOffsets(uniform_sampler2DShadow, vec2(coord), float(0), offsets) || ignoreResultF32)
1371
1372        // GLSL: textureGatherOffsets({{.*}}sampler2DArrayShadow
1373        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DArrayShadow
1374        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]{{.*}} ConstOffsets %
1375        && vec4(0) == textureGatherOffsets(uniform_sampler2DArrayShadow, vec3(coord), float(0), offsets)
1376
1377        // GLSL-COUNT-2: textureGatherOffsets({{.*}}sampler2DRect
1378        // SPIR-COUNT-2: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRect
1379        // SPIR: OpImageGather {{.*}}[[LOAD]]{{.*}} ConstOffsets %
1380        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DRect, vec2(coord), offsets)
1381        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DRect, vec2(coord), offsets, int(0))
1382
1383        // GLSL: textureGatherOffsets({{.*}}sampler2DRectShadow
1384        // SPIR: [[LOAD:%[1-9][0-9]*]] = OpLoad{{.*}}sampler2DRectShadow
1385        // SPIR: OpImageDrefGather {{.*}}[[LOAD]]{{.*}} ConstOffsets %
1386        && vec4(0) == textureGatherOffsets(uniform_sampler2DRectShadow, vec2(coord), float(0), offsets)
1387
1388        // 8.9.5. Compatibility Profile Texture Functions
1389        // Compatibility functions work for GLSL but not for SPIR-V.
1390        // We cannot test the SPIR-V asm here for these functions.
1391        // We also cannot test GLSL source for them because we don't directly
1392        // call them. If we do, the spirv-via-glsl path cannot work.
1393
1394        && vec4(0) == texture1D(uniform_sampler1D, float(coord))
1395        && vec4(0) == texture1D(uniform_sampler1D, float(coord), float(0))
1396        && vec4(0) == texture1DProj(uniform_sampler1D, vec2(coord))
1397        && vec4(0) == texture1DProj(uniform_sampler1D, vec2(coord), float(0))
1398        && vec4(0) == texture1DProj(uniform_sampler1D, vec4(coord))
1399        && vec4(0) == texture1DProj(uniform_sampler1D, vec4(coord), float(0))
1400        && vec4(0) == texture1DLod(uniform_sampler1D, float(coord), float(0))
1401        && vec4(0) == texture1DProjLod(uniform_sampler1D, vec2(coord), float(0))
1402        && vec4(0) == texture1DProjLod(uniform_sampler1D, vec4(coord), float(0))
1403        && vec4(0) == texture2D(uniform_sampler2D, vec2(coord))
1404        && vec4(0) == texture2D(uniform_sampler2D, vec2(coord), float(0))
1405        && vec4(0) == texture2DProj(uniform_sampler2D, vec3(coord))
1406        && vec4(0) == texture2DProj(uniform_sampler2D, vec3(coord), float(0))
1407        && vec4(0) == texture2DProj(uniform_sampler2D, vec4(coord))
1408        && vec4(0) == texture2DProj(uniform_sampler2D, vec4(coord), float(0))
1409        && vec4(0) == texture2DLod(uniform_sampler2D, vec2(coord), float(0))
1410        && vec4(0) == texture2DProjLod(uniform_sampler2D, vec3(coord), float(0))
1411        && vec4(0) == texture2DProjLod(uniform_sampler2D, vec4(coord), float(0))
1412        && vec4(0) == texture3D(uniform_sampler3D, vec3(coord))
1413        && vec4(0) == texture3D(uniform_sampler3D, vec3(coord), float(0))
1414        && vec4(0) == texture3DProj(uniform_sampler3D, vec4(coord))
1415        && vec4(0) == texture3DProj(uniform_sampler3D, vec4(coord), float(0))
1416        && vec4(0) == texture3DLod(uniform_sampler3D, vec3(coord), float(0))
1417        && vec4(0) == texture3DProjLod(uniform_sampler3D, vec4(coord), float(0))
1418        && vec4(0) == textureCube(uniform_samplerCube, vec3(coord))
1419        && vec4(0) == textureCube(uniform_samplerCube, vec3(coord), float(0))
1420        && vec4(0) == textureCubeLod(uniform_samplerCube, vec3(coord), float(0))
1421        && vec4(0) == shadow1D(uniform_sampler1DShadow, vec3(coord))
1422        && vec4(0) == shadow1D(uniform_sampler1DShadow, vec3(coord), float(0))
1423        && (vec4(0) == shadow2D(uniform_sampler2DShadow, vec3(coord)) || ignoreResultF32)
1424        && (vec4(0) == shadow2D(uniform_sampler2DShadow, vec3(coord), float(0)) || ignoreResultF32)
1425        && vec4(0) == shadow1DProj(uniform_sampler1DShadow, vec4(coord))
1426        && vec4(0) == shadow1DProj(uniform_sampler1DShadow, vec4(coord), float(0))
1427        && (vec4(0) == shadow2DProj(uniform_sampler2DShadow, vec4(coord)) || ignoreResultF32)
1428        && (vec4(0) == shadow2DProj(uniform_sampler2DShadow, vec4(coord), float(0)) || ignoreResultF32)
1429        && vec4(0) == shadow1DLod(uniform_sampler1DShadow, vec3(coord), float(0))
1430        && (vec4(0) == shadow2DLod(uniform_sampler2DShadow, vec3(coord), float(0)) || ignoreResultF32)
1431        && vec4(0) == shadow1DProjLod(uniform_sampler1DShadow, vec4(coord), float(0))
1432        && (vec4(0) == shadow2DProjLod(uniform_sampler2DShadow, vec4(coord), float(0)) || ignoreResultF32)
1433        ;
1434}
1435
1436#if defined(HLSL)
1437[require(hlsl, sm_5_1, compute_fragment)]
1438#elif defined(GLSL)
1439[require(glsl, sm_5_1, compute_fragment)]
1440#elif defined(SPIRV)
1441[require(spirv, sm_5_1, compute_fragment)]
1442#elif defined(CUDA)
1443[require(cuda, sm_5_1, compute_fragment)]
1444#endif
1445__extern_cpp void TEST_main()
1446{
1447    // GLSL: void main(
1448    // GLSL_SPIRV: OpEntryPoint
1449    // HLSL: void TEST_main(
1450    // CUDA: void TEST_main(
1451    // CPP: void _TEST_main(
1452    // BUF: 1
1453
1454    // Some of the functional testing result is incorrect due to
1455    // the problem on our testing framework. We will ignore them
1456    // until we address the problems.
1457    // The problem is mostly with 2DShadow, CubeShadow and buffer.
1458    bool ignoreResult = (outputBuffer.result == 0); // always true
1459
1460    bool result = true
1461        && textureFuncs(
1462            uniform_sampler1D
1463            , uniform_sampler2D
1464            , uniform_sampler2DRect
1465            , uniform_sampler3D
1466            , uniform_samplerCube
1467            , uniform_sampler1DArray
1468            , uniform_sampler2DArray
1469            , uniform_samplerCubeArray
1470            , uniform_samplerBuffer
1471            , uniform_sampler2DMS
1472            , uniform_sampler2DMSArray
1473            , ignoreResult
1474            )
1475#if !defined(HLSL)
1476        && textureFuncs(
1477            uniform_isampler1D
1478            , uniform_isampler2D
1479            , uniform_isampler2DRect
1480            , uniform_isampler3D
1481            , uniform_isamplerCube
1482            , uniform_isampler1DArray
1483            , uniform_isampler2DArray
1484            , uniform_isamplerCubeArray
1485            , uniform_isamplerBuffer
1486            , uniform_isampler2DMS
1487            , uniform_isampler2DMSArray
1488            , ignoreResult
1489            )
1490        && textureFuncs(
1491            uniform_usampler1D
1492            , uniform_usampler2D
1493            , uniform_usampler2DRect
1494            , uniform_usampler3D
1495            , uniform_usamplerCube
1496            , uniform_usampler1DArray
1497            , uniform_usampler2DArray
1498            , uniform_usamplerCubeArray
1499            , uniform_usamplerBuffer
1500            , uniform_usampler2DMS
1501            , uniform_usampler2DMSArray
1502            , ignoreResult
1503            )
1504#endif
1505        ;
1506
1507    outputBuffer.result = int(result);
1508}
1509
1510[shader("compute")]
1511[DerivativeGroupLinear]
1512[numthreads(4, 1, 1)]
1513void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
1514{
1515    TEST_main();
1516}
1517
1518[shader("fragment")]
1519void fragMain()
1520{
1521    TEST_main();
1522}