yum-mirror/slang

Making it easier to work with shaders

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

Yong HeRefactor _Texture to constrain on texel types. (#6115)fc77070fd

master
32.2 KiB498 linesraw
1#version 450 core
2#extension GL_EXT_texture_shadow_lod : enable
3
4//TEST:SIMPLE(filecheck=CHECK_GLSL): -allow-glsl -stage compute -entry computeMain -target glsl -DCOMPUTE -ignore-capabilities
5//TEST:SIMPLE(filecheck=CHECK_GLSL): -allow-glsl -stage fragment -entry computeMain -target glsl -ignore-capabilities
6//RWStructuredBuffer<float> outputBuffer;
7//layout(location = 0) out vec4 o_color;
8
9buffer MyBlockName
10{
11    int result;
12} outputBuffer;
13
14uniform sampler1DShadow uniform_sampler1DShadow;
15uniform sampler2DShadow uniform_sampler2DShadow;
16uniform samplerCubeShadow uniform_samplerCubeShadow;
17
18uniform sampler1DArrayShadow uniform_sampler1DArrayShadow;
19uniform sampler2DArrayShadow uniform_sampler2DArrayShadow;
20uniform sampler2DRectShadow uniform_sampler2DRectShadow;
21uniform samplerCubeArrayShadow uniform_samplerCubeArrayShadow;
22
23uniform sampler1D uniform_sampler1D;
24uniform sampler2D uniform_sampler2D;
25uniform sampler2DRect uniform_sampler2DRect;
26uniform sampler3D uniform_sampler3D;
27uniform samplerCube uniform_samplerCube;
28uniform sampler1DArray uniform_sampler1DArray;
29uniform sampler2DArray uniform_sampler2DArray;
30uniform samplerCubeArray uniform_samplerCubeArray;
31uniform samplerBuffer uniform_samplerBuffer;
32
33uniform isampler1D uniform_isampler1D;
34uniform isampler2D uniform_isampler2D;
35uniform isampler2DRect uniform_isampler2DRect;
36uniform isampler3D uniform_isampler3D;
37uniform isamplerCube uniform_isamplerCube;
38uniform isampler1DArray uniform_isampler1DArray;
39uniform isampler2DArray uniform_isampler2DArray;
40uniform isamplerCubeArray uniform_isamplerCubeArray;
41uniform isamplerBuffer uniform_isamplerBuffer;
42
43uniform usampler1D uniform_usampler1D;
44uniform usampler2D uniform_usampler2D;
45uniform usampler2DRect uniform_usampler2DRect;
46uniform usampler3D uniform_usampler3D;
47uniform usamplerCube uniform_usamplerCube;
48uniform usampler1DArray uniform_usampler1DArray;
49uniform usampler2DArray uniform_usampler2DArray;
50uniform usamplerCubeArray uniform_usamplerCubeArray;
51uniform usamplerBuffer uniform_usamplerBuffer;
52
53__generic<T : ITexelElement>
54bool textureFuncs( Sampler1D<T> gsampler1D
55    , Sampler2D<T> gsampler2D
56    , Sampler2DRect<T> gsampler2DRect
57    , Sampler3D<T> gsampler3D
58    , SamplerCube<T> gsamplerCube
59    , Sampler1DArray<T> gsampler1DArray
60    , Sampler2DArray<T> gsampler2DArray
61    , SamplerCubeArray<T> gsamplerCubeArray
62    , SamplerBuffer<T> gsamplerBuffer
63)
64{
65    typealias gvec4 = vector<T.Element,4>;
66
67    constexpr ivec2 ivec2_0 = ivec2(0);
68
69    return true
70        // 8.9.1. Texture Query Functions
71        && int(0) == textureSize(gsampler1D, int(0))
72        && ivec2(0) == textureSize(gsampler2D, int(0))
73        && ivec3(0) == textureSize(gsampler3D, int(0))
74        && ivec2(0) == textureSize(gsamplerCube, int(0))
75        && int(0) == textureSize(uniform_sampler1DShadow, int(0))
76        && ivec2(0) == textureSize(uniform_sampler2DShadow, int(0))
77        && ivec2(0) == textureSize(uniform_samplerCubeShadow, int(0))
78        && ivec3(0) == textureSize(gsamplerCubeArray, int(0))
79        && ivec3(0) == textureSize(uniform_samplerCubeArrayShadow, int(0))
80        && ivec2(0) == textureSize(gsampler2DRect)
81        && ivec2(0) == textureSize(uniform_sampler2DRectShadow)
82        && ivec2(0) == textureSize(gsampler1DArray, int(0))
83        && ivec2(0) == textureSize(uniform_sampler1DArrayShadow, int(0))
84        && ivec3(0) == textureSize(gsampler2DArray, int(0))
85        && ivec3(0) == textureSize(uniform_sampler2DArrayShadow, int(0))
86        && int(0) == textureSize(gsamplerBuffer)
87        && vec2(0) == textureQueryLod(gsampler1D, float(0))
88        && vec2(0) == textureQueryLod(gsampler2D, vec2(0))
89        && vec2(0) == textureQueryLod(gsampler3D, vec3(0))
90        && vec2(0) == textureQueryLod(gsamplerCube, vec3(0))
91        && vec2(0) == textureQueryLod(gsampler1DArray, float(0))
92        && vec2(0) == textureQueryLod(gsampler2DArray, vec2(0))
93        && vec2(0) == textureQueryLod(gsamplerCubeArray, vec3(0))
94        && vec2(0) == textureQueryLod(uniform_sampler1DShadow, float(0))
95        && vec2(0) == textureQueryLod(uniform_sampler2DShadow, vec2(0))
96        && vec2(0) == textureQueryLod(uniform_samplerCubeShadow, vec3(0))
97        && vec2(0) == textureQueryLod(uniform_sampler1DArrayShadow, float(0))
98        && vec2(0) == textureQueryLod(uniform_sampler2DArrayShadow, vec2(0))
99        && vec2(0) == textureQueryLod(uniform_samplerCubeArrayShadow, vec3(0))
100        && int(0) == textureQueryLevels(gsampler1D)
101        && int(0) == textureQueryLevels(gsampler2D)
102        && int(0) == textureQueryLevels(gsampler3D)
103        && int(0) == textureQueryLevels(gsamplerCube)
104        && int(0) == textureQueryLevels(gsampler1DArray)
105        && int(0) == textureQueryLevels(gsampler2DArray)
106        && int(0) == textureQueryLevels(gsamplerCubeArray)
107        && int(0) == textureQueryLevels(uniform_sampler1DShadow)
108        && int(0) == textureQueryLevels(uniform_sampler2DShadow)
109        && int(0) == textureQueryLevels(uniform_samplerCubeShadow)
110        && int(0) == textureQueryLevels(uniform_sampler1DArrayShadow)
111        && int(0) == textureQueryLevels(uniform_sampler2DArrayShadow)
112        && int(0) == textureQueryLevels(uniform_samplerCubeArrayShadow)
113        // 8.9.2. Texel Lookup Functions
114        && gvec4(T.Element(0)) == texture(gsampler1D, float(0))
115        && gvec4(T.Element(0)) == texture(gsampler1D, float(0), float(0))
116        && gvec4(T.Element(0)) == texture(gsampler2D, vec2(0))
117        && gvec4(T.Element(0)) == texture(gsampler2D, vec2(0), float(0))
118        && gvec4(T.Element(0)) == texture(gsampler3D, vec3(0))
119        && gvec4(T.Element(0)) == texture(gsampler3D, vec3(0), float(0))
120        && gvec4(T.Element(0)) == texture(gsamplerCube, vec3(0) )
121        && gvec4(T.Element(0)) == texture(gsamplerCube, vec3(0), float(0))
122        && float(0) == texture(uniform_sampler1DShadow, vec3(0))
123        && float(0) == texture(uniform_sampler1DShadow, vec3(0), float(0))
124        && float(0) == texture(uniform_sampler2DShadow, vec3(0))
125        && float(0) == texture(uniform_sampler2DShadow, vec3(0), float(0))
126        && float(0) == texture(uniform_samplerCubeShadow, vec4(0))
127        && float(0) == texture(uniform_samplerCubeShadow, vec4(0), float(0))
128        && gvec4(T.Element(0)) == texture(gsampler2DArray, vec3(0))
129        && gvec4(T.Element(0)) == texture(gsampler2DArray, vec3(0), float(0))
130        && gvec4(T.Element(0)) == texture(gsamplerCubeArray, vec4(0) )
131        && gvec4(T.Element(0)) == texture(gsamplerCubeArray, vec4(0), float(0))
132        && gvec4(T.Element(0)) == texture(gsampler1DArray, vec2(0))
133        && gvec4(T.Element(0)) == texture(gsampler1DArray, vec2(0), float(0))
134        && float(0) == texture(uniform_sampler1DArrayShadow, vec3(0))
135        && float(0) == texture(uniform_sampler1DArrayShadow, vec3(0), float(0))
136        && float(0) == texture(uniform_sampler2DArrayShadow, vec4(0))
137        && gvec4(T.Element(0)) == texture(gsampler2DRect, vec2(0))
138        && float(0) == texture(uniform_sampler2DRectShadow, vec3(0))
139        && float(0) == texture(uniform_samplerCubeArrayShadow, vec4(0), float(0))
140        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec2(0))
141        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec2(0), float(0))
142        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec4(0))
143        && gvec4(T.Element(0)) == textureProj(gsampler1D, vec4(0), float(0))
144        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec3(0))
145        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec3(0), float(0))
146        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec4(0))
147        && gvec4(T.Element(0)) == textureProj(gsampler2D, vec4(0), float(0))
148        && gvec4(T.Element(0)) == textureProj(gsampler3D, vec4(0))
149        && gvec4(T.Element(0)) == textureProj(gsampler3D, vec4(0), float(0))
150        && float(0) == textureProj(uniform_sampler1DShadow, vec4(0))
151        && float(0) == textureProj(uniform_sampler1DShadow, vec4(0), float(0))
152        && float(0) == textureProj(uniform_sampler2DShadow, vec4(0))
153        && float(0) == textureProj(uniform_sampler2DShadow, vec4(0), float(0))
154        && gvec4(T.Element(0)) == textureProj(gsampler2DRect, vec3(0))
155        && gvec4(T.Element(0)) == textureProj(gsampler2DRect, vec4(0))
156        && float(0) == textureProj(uniform_sampler2DRectShadow, vec4(0))
157        && gvec4(T.Element(0)) == textureLod(gsampler1D, float(0), float(0))
158        && gvec4(T.Element(0)) == textureLod(gsampler2D, vec2(0), float(0))
159        && gvec4(T.Element(0)) == textureLod(gsampler3D, vec3(0), float(0))
160        && gvec4(T.Element(0)) == textureLod(gsamplerCube, vec3(0), float(0))
161        && float(0) == textureLod(uniform_sampler2DShadow, vec3(0), float(0))
162        && float(0) == textureLod(uniform_sampler1DShadow, vec3(0), float(0))
163        && gvec4(T.Element(0)) == textureLod(gsampler1DArray, vec2(0), float(0))
164        && float(0) == textureLod(uniform_sampler1DArrayShadow, vec3(0), float(0))
165        && gvec4(T.Element(0)) == textureLod(gsampler2DArray, vec3(0), float(0))
166        && gvec4(T.Element(0)) == textureLod(gsamplerCubeArray, vec4(0), float(0))
167        && gvec4(T.Element(0)) == textureOffset(gsampler1D, float(0), __LINE__)
168        && gvec4(T.Element(0)) == textureOffset(gsampler1D, float(0), __LINE__, float(0))
169        && gvec4(T.Element(0)) == textureOffset(gsampler2D, vec2(0), { __LINE__ })
170        && gvec4(T.Element(0)) == textureOffset(gsampler2D, vec2(0), { __LINE__ }, float(0))
171        && gvec4(T.Element(0)) == textureOffset(gsampler3D, vec3(0), { __LINE__ })
172        && gvec4(T.Element(0)) == textureOffset(gsampler3D, vec3(0), { __LINE__ }, float(0))
173        && float(0) == textureOffset(uniform_sampler2DShadow, vec3(0), { __LINE__ })
174        && float(0) == textureOffset(uniform_sampler2DShadow, vec3(0), { __LINE__ }, float(0))
175        && gvec4(T.Element(0)) == textureOffset(gsampler2DRect, vec2(0), { __LINE__ })
176        && float(0) == textureOffset(uniform_sampler2DRectShadow, vec3(0), { __LINE__ })
177        && float(0) == textureOffset(uniform_sampler1DShadow, vec3(0), __LINE__)
178        && float(0) == textureOffset(uniform_sampler1DShadow, vec3(0), __LINE__, float(0))
179        && gvec4(T.Element(0)) == textureOffset(gsampler1DArray, vec2(0), __LINE__)
180        && gvec4(T.Element(0)) == textureOffset(gsampler1DArray, vec2(0), __LINE__, float(0))
181        && gvec4(T.Element(0)) == textureOffset(gsampler2DArray, vec3(0), { __LINE__ })
182        && gvec4(T.Element(0)) == textureOffset(gsampler2DArray, vec3(0), { __LINE__ }, float(0))
183        && float(0) == textureOffset(uniform_sampler1DArrayShadow, vec3(0), __LINE__)
184        && float(0) == textureOffset(uniform_sampler1DArrayShadow, vec3(0), __LINE__, float(0))
185        && float(0) == textureOffset(uniform_sampler2DArrayShadow, vec4(0), { __LINE__ })
186        && gvec4(T.Element(0)) == texelFetch(gsampler1D, int(0), int(0))
187        && gvec4(T.Element(0)) == texelFetch(gsampler2D, ivec2(0), int(0))
188        && gvec4(T.Element(0)) == texelFetch(gsampler3D, ivec3(0), int(0))
189        && gvec4(T.Element(0)) == texelFetch(gsampler2DRect, ivec2(0))
190        && gvec4(T.Element(0)) == texelFetch(gsampler1DArray, ivec2(0), int(0))
191        && gvec4(T.Element(0)) == texelFetch(gsampler2DArray, ivec3(0), int(0))
192        && gvec4(T.Element(0)) == texelFetch(gsamplerBuffer, int(0))
193        && gvec4(T.Element(0)) == texelFetchOffset(gsampler1D, int(0), int(0), __LINE__)
194        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2D, ivec2(0), int(0), { __LINE__ })
195        && gvec4(T.Element(0)) == texelFetchOffset(gsampler3D, ivec3(0), int(0), { __LINE__ })
196        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2DRect, ivec2(0), { __LINE__ })
197        && gvec4(T.Element(0)) == texelFetchOffset(gsampler1DArray, ivec2(0), int(0), __LINE__)
198        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2DArray, ivec3(0), int(0), { __LINE__ })
199        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec2(0), __LINE__)
200        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec2(0), __LINE__, float(0))
201        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec4(0), __LINE__)
202        && gvec4(T.Element(0)) == textureProjOffset(gsampler1D, vec4(0), __LINE__,float(0))
203        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec3(0), { __LINE__ })
204        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec3(0), { __LINE__ }, float(0))
205        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec4(0), { __LINE__ })
206        && gvec4(T.Element(0)) == textureProjOffset(gsampler2D, vec4(0), { __LINE__ }, float(0))
207        && gvec4(T.Element(0)) == textureProjOffset(gsampler3D, vec4(0), { __LINE__ })
208        && gvec4(T.Element(0)) == textureProjOffset(gsampler3D, vec4(0), { __LINE__ }, float(0))
209        && gvec4(T.Element(0)) == textureProjOffset(gsampler2DRect, vec3(0), { __LINE__ })
210        && gvec4(T.Element(0)) == textureProjOffset(gsampler2DRect, vec4(0), { __LINE__ })
211        && float(0) == textureProjOffset(uniform_sampler2DRectShadow, vec4(0), { __LINE__ })
212        && float(0) == textureProjOffset(uniform_sampler1DShadow, vec4(0), __LINE__)
213        && float(0) == textureProjOffset(uniform_sampler1DShadow, vec4(0), __LINE__, float(0))
214        && float(0) == textureProjOffset(uniform_sampler2DShadow, vec4(0), { __LINE__ })
215        && float(0) == textureProjOffset(uniform_sampler2DShadow, vec4(0), { __LINE__ }, float(0))
216        && gvec4(T.Element(0)) == textureLodOffset(gsampler1D, float(0), float(0), __LINE__)
217        && gvec4(T.Element(0)) == textureLodOffset(gsampler2D, vec2(0), float(0), { __LINE__ })
218        && gvec4(T.Element(0)) == textureLodOffset(gsampler3D, vec3(0), float(0), { __LINE__ })
219        && float(0) == textureLodOffset(uniform_sampler1DShadow, vec3(0), float(0), __LINE__)
220        && float(1) == textureLodOffset(uniform_sampler2DShadow, vec3(0), float(0), { __LINE__ })
221        && gvec4(T.Element(0)) == textureLodOffset(gsampler1DArray, vec2(0), float(0), __LINE__)
222        && gvec4(T.Element(0)) == textureLodOffset(gsampler2DArray, vec3(0), float(0), { __LINE__ })
223        && float(0) == textureLodOffset(uniform_sampler1DArrayShadow, vec3(0), float(0), __LINE__)
224        && gvec4(T.Element(0)) == textureProjLod(gsampler1D, vec2(0), float(0))
225        && gvec4(T.Element(0)) == textureProjLod(gsampler1D, vec4(0), float(0))
226        && gvec4(T.Element(0)) == textureProjLod(gsampler2D, vec3(0), float(0))
227        && gvec4(T.Element(0)) == textureProjLod(gsampler2D, vec4(0), float(0))
228        && gvec4(T.Element(0)) == textureProjLod(gsampler3D, vec4(0), float(0))
229        && float(0) == textureProjLod(uniform_sampler1DShadow, vec4(0), float(0))
230        && float(0) == textureProjLod(uniform_sampler2DShadow, vec4(0), float(0))
231        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler1D, vec2(0), float(0), __LINE__)
232        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler1D, vec4(0), float(0), __LINE__)
233        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler2D, vec3(0), float(0), { __LINE__ })
234        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler2D, vec4(0), float(0), { __LINE__ })
235        && gvec4(T.Element(0)) == textureProjLodOffset(gsampler3D, vec4(0), float(0), { __LINE__ })
236        && float(0) == textureProjLodOffset(uniform_sampler1DShadow, vec4(0), float(0), __LINE__)
237        && float(0) == textureProjLodOffset(uniform_sampler2DShadow, vec4(0), float(0), { __LINE__ })
238        && gvec4(T.Element(0)) == textureGrad(gsampler1D, float(0), float(0), float(0))
239        && gvec4(T.Element(0)) == textureGrad(gsampler2D, vec2(0), vec2(0), vec2(0))
240        && gvec4(T.Element(0)) == textureGrad(gsampler3D, vec3(0), vec3(0), vec3(0))
241        && gvec4(T.Element(0)) == textureGrad(gsamplerCube, vec3(0), vec3(0), vec3(0))
242        && gvec4(T.Element(0)) == textureGrad(gsampler2DRect, vec2(0), vec2(0), vec2(0))
243        && float(0) == textureGrad(uniform_sampler2DRectShadow, vec3(0), vec2(0), vec2(0))
244        && float(0) == textureGrad(uniform_sampler1DShadow, vec3(0), float(0), float(0))
245        && gvec4(T.Element(0)) == textureGrad(gsampler1DArray, vec2(0), float(0), float(0))
246        && gvec4(T.Element(0)) == textureGrad(gsampler2DArray, vec3(0), vec2(0), vec2(0))
247        && float(0) == textureGrad(uniform_sampler1DArrayShadow, vec3(0), float(0), float(0))
248        && float(0) == textureGrad(uniform_sampler2DShadow, vec3(0), vec2(0), vec2(0))
249        && float(0) == textureGrad(uniform_samplerCubeShadow, vec4(0), vec3(0), vec3(0))
250        && float(0) == textureGrad(uniform_sampler2DArrayShadow, vec4(0), vec2(0), vec2(0))
251        && gvec4(T.Element(0)) == textureGrad(gsamplerCubeArray, vec4(0), vec3(0), vec3(0))
252        && gvec4(T.Element(0)) == textureGradOffset(gsampler1D, float(0), float(0), float(0), __LINE__)
253        && gvec4(T.Element(0)) == textureGradOffset(gsampler2D, vec2(0), vec2(0), vec2(0), { __LINE__ })
254        && gvec4(T.Element(0)) == textureGradOffset(gsampler3D, vec3(0), vec3(0), vec3(0), { __LINE__ })
255        && gvec4(T.Element(0)) == textureGradOffset(gsampler2DRect, vec2(0), vec2(0), vec2(0), { __LINE__ })
256        && float(0) == textureGradOffset(uniform_sampler2DRectShadow, vec3(0), vec2(0), vec2(0), { __LINE__ })
257        && float(0) == textureGradOffset(uniform_sampler1DShadow, vec3(0), float(0), float(0), __LINE__)
258        && float(0) == textureGradOffset(uniform_sampler2DShadow, vec3(0), vec2(0), vec2(0), { __LINE__ })
259        && gvec4(T.Element(0)) == textureGradOffset(gsampler2DArray, vec3(0), vec2(0), vec2(0), { __LINE__ })
260        && gvec4(T.Element(0)) == textureGradOffset(gsampler1DArray, vec2(0), float(0), float(0), __LINE__)
261        && float(0) == textureGradOffset(uniform_sampler1DArrayShadow, vec3(0), float(0), float(0), __LINE__)
262        && float(0) == textureGradOffset(uniform_sampler2DArrayShadow, vec4(0), vec2(0), vec2(0), { __LINE__ })
263        && gvec4(T.Element(0)) == textureProjGrad(gsampler1D, vec2(0), float(0), float(0))
264        && gvec4(T.Element(0)) == textureProjGrad(gsampler1D, vec4(0), float(0), float(0))
265        && gvec4(T.Element(0)) == textureProjGrad(gsampler2D, vec3(0), vec2(0), vec2(0))
266        && gvec4(T.Element(0)) == textureProjGrad(gsampler2D, vec4(0), vec2(0), vec2(0))
267        && gvec4(T.Element(0)) == textureProjGrad(gsampler3D, vec4(0), vec3(0), vec3(0))
268        && gvec4(T.Element(0)) == textureProjGrad(gsampler2DRect, vec3(0), vec2(0), vec2(0))
269        && gvec4(T.Element(0)) == textureProjGrad(gsampler2DRect, vec4(0), vec2(0), vec2(0))
270        && float(0) == textureProjGrad(uniform_sampler2DRectShadow, vec4(0), vec2(0), vec2(0))
271        && float(0) == textureProjGrad(uniform_sampler1DShadow, vec4(0), float(0), float(0))
272        && float(0) == textureProjGrad(uniform_sampler2DShadow, vec4(0), vec2(0), vec2(0))
273        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler1D, vec2(0), float(0), float(0), __LINE__)
274        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler1D, vec4(0), float(0), float(0), __LINE__)
275        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2D, vec3(0), vec2(0), vec2(0), { __LINE__ })
276        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2D, vec4(0), vec2(0), vec2(0), { __LINE__ })
277        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler3D, vec4(0), vec3(0), vec3(0), { __LINE__ })
278        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2DRect, vec3(0), vec2(0), vec2(0), { __LINE__ })
279        && gvec4(T.Element(0)) == textureProjGradOffset(gsampler2DRect, vec4(0), vec2(0), vec2(0), { __LINE__ })
280        && float(0) == textureProjGradOffset(uniform_sampler2DRectShadow, vec4(0), vec2(0), vec2(0), { __LINE__ })
281        && float(0) == textureProjGradOffset(uniform_sampler1DShadow, vec4(0), float(0), float(0), __LINE__)
282        && float(0) == textureProjGradOffset(uniform_sampler2DShadow, vec4(0), vec2(0), vec2(0), { __LINE__ })
283        
284        // 8.9.4. Texture Gather Functions
285        && gvec4(T.Element(0)) == textureGather(gsampler2D, vec2(0))
286        && gvec4(T.Element(0)) == textureGather(gsampler2D, vec2(0), int(0))
287        && gvec4(T.Element(0)) == textureGather(gsampler2DArray, vec3(0))
288        && gvec4(T.Element(0)) == textureGather(gsampler2DArray, vec3(0), int(0))
289        && gvec4(T.Element(0)) == textureGather(gsamplerCube, vec3(0))
290        && gvec4(T.Element(0)) == textureGather(gsamplerCube, vec3(0), int(0))
291        && gvec4(T.Element(0)) == textureGather(gsamplerCubeArray, vec4(0))
292        && gvec4(T.Element(0)) == textureGather(gsamplerCubeArray, vec4(0), int(0))
293        && gvec4(T.Element(0)) == textureGather(gsampler2DRect, vec2(0))
294        && gvec4(T.Element(0)) == textureGather(gsampler2DRect, vec2(0), int(0))
295        && vec4(0) == textureGather(uniform_sampler2DShadow, vec2(0), float(0))
296        && vec4(0) == textureGather(uniform_sampler2DArrayShadow, vec3(0), float(0))
297        && vec4(0) == textureGather(uniform_samplerCubeShadow, vec3(0), float(0))
298        && vec4(0) == textureGather(uniform_samplerCubeArrayShadow, vec4(0), float(0))
299        && vec4(0) == textureGather(uniform_sampler2DRectShadow, vec2(0), float(0))
300        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2D, vec2(0), { __LINE__ })
301        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2D, vec2(0), { __LINE__ }, int(0))
302        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DArray, vec3(0), { __LINE__ })
303        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DArray, vec3(0), { __LINE__ }, int(0))
304        && vec4(0) == textureGatherOffset(uniform_sampler2DShadow, vec2(0), float(0), { __LINE__ })
305        && vec4(0) == textureGatherOffset(uniform_sampler2DArrayShadow, vec3(0), float(0), { __LINE__ })
306        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DRect, vec2(0), { __LINE__ })
307        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DRect, vec2(0), { __LINE__ }, int(0))
308        && vec4(0) == textureGatherOffset(uniform_sampler2DRectShadow, vec2(0), float(0), { __LINE__ })
309        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2D, vec2(0), { __LINE__ })
310        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2D, vec2(0), { __LINE__ }, int(0))
311        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DArray, vec3(0), { __LINE__ })
312        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DArray, vec3(0), { __LINE__ }, int(0))
313        && vec4(0) == textureGatherOffsets(uniform_sampler2DShadow, vec2(0), float(0), { __LINE__ })
314        && vec4(0) == textureGatherOffsets(uniform_sampler2DArrayShadow, vec3(0), float(0), { __LINE__ })
315        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DRect, vec2(0), { __LINE__ })
316        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DRect, vec2(0), { __LINE__ }, int(0))
317        && vec4(0) == textureGatherOffsets(uniform_sampler2DRectShadow, vec2(0), float(0), { __LINE__ })
318
319        // 8.9.5. Compatibility Profile Texture Functions
320        && vec4(0) == texture1D(uniform_sampler1D, float(0))
321        && vec4(0) == texture1D(uniform_sampler1D, float(0), float(0))
322        && vec4(0) == texture1DProj(uniform_sampler1D, vec2(0))
323        && vec4(0) == texture1DProj(uniform_sampler1D, vec2(0), float(0))
324        && vec4(0) == texture1DProj(uniform_sampler1D, vec4(0))
325        && vec4(0) == texture1DProj(uniform_sampler1D, vec4(0), float(0))
326        && vec4(0) == texture1DLod(uniform_sampler1D, float(0), float(0))
327        && vec4(0) == texture1DProjLod(uniform_sampler1D, vec2(0), float(0))
328        && vec4(0) == texture1DProjLod(uniform_sampler1D, vec4(0), float(0))
329        && vec4(0) == texture2D(uniform_sampler2D, vec2(0))
330        && vec4(0) == texture2D(uniform_sampler2D, vec2(0), float(0))
331        && vec4(0) == texture2DProj(uniform_sampler2D, vec3(0))
332        && vec4(0) == texture2DProj(uniform_sampler2D, vec3(0), float(0))
333        && vec4(0) == texture2DProj(uniform_sampler2D, vec4(0))
334        && vec4(0) == texture2DProj(uniform_sampler2D, vec4(0), float(0))
335        && vec4(0) == texture2DLod(uniform_sampler2D, vec2(0), float(0))
336        && vec4(0) == texture2DProjLod(uniform_sampler2D, vec3(0), float(0))
337        && vec4(0) == texture2DProjLod(uniform_sampler2D, vec4(0), float(0))
338        && vec4(0) == texture3D(uniform_sampler3D, vec3(0))
339        && vec4(0) == texture3D(uniform_sampler3D, vec3(0), float(0))
340        && vec4(0) == texture3DProj(uniform_sampler3D, vec4(0))
341        && vec4(0) == texture3DProj(uniform_sampler3D, vec4(0), float(0))
342        && vec4(0) == texture3DLod(uniform_sampler3D, vec3(0), float(0))
343        && vec4(0) == texture3DProjLod(uniform_sampler3D, vec4(0), float(0))
344        && vec4(0) == textureCube(uniform_samplerCube, vec3(0))
345        && vec4(0) == textureCube(uniform_samplerCube, vec3(0), float(0))
346        && vec4(0) == textureCubeLod(uniform_samplerCube, vec3(0), float(0))
347        && vec4(0) == shadow1D(uniform_sampler1DShadow, vec3(0))
348        && vec4(0) == shadow1D(uniform_sampler1DShadow, vec3(0), float(0))
349        && vec4(0) == shadow2D(uniform_sampler2DShadow, vec3(0))
350        && vec4(0) == shadow2D(uniform_sampler2DShadow, vec3(0), float(0))
351        && vec4(0) == shadow1DProj(uniform_sampler1DShadow, vec4(0))
352        && vec4(0) == shadow1DProj(uniform_sampler1DShadow, vec4(0), float(0))
353        && vec4(0) == shadow2DProj(uniform_sampler2DShadow, vec4(0))
354        && vec4(0) == shadow2DProj(uniform_sampler2DShadow, vec4(0), float(0))
355        && vec4(0) == shadow1DLod(uniform_sampler1DShadow, vec3(0), float(0))
356        && vec4(0) == shadow2DLod(uniform_sampler2DShadow, vec3(0), float(0))
357        && vec4(0) == shadow1DProjLod(uniform_sampler1DShadow, vec4(0), float(0))
358        && vec4(0) == shadow2DProjLod(uniform_sampler2DShadow, vec4(0), float(0))
359        ;
360}
361
362__generic<T : ITexelElement>
363bool itextureFuncs(Sampler1D<T> gsampler1D
364    , Sampler2D<T> gsampler2D
365    , Sampler2DRect<T> gsampler2DRect
366    , Sampler3D<T> gsampler3D
367    , SamplerCube<T> gsamplerCube
368    , Sampler1DArray<T> gsampler1DArray
369    , Sampler2DArray<T> gsampler2DArray
370    , SamplerCubeArray<T> gsamplerCubeArray
371    , SamplerBuffer<T> gsamplerBuffer
372)
373{
374    typealias gvec4 = vector<T.Element, 4>;
375
376    constexpr ivec2 ivec2_0 = ivec2(0);
377
378    return true
379        // 8.9.1. Texture Query Functions
380        && int(0) == textureSize(gsampler1D, int(0))
381        && ivec2(0) == textureSize(gsampler2D, int(0))
382        && ivec3(0) == textureSize(gsampler3D, int(0))
383        && ivec2(0) == textureSize(gsamplerCube, int(0))
384        && int(0) == textureSize(uniform_sampler1DShadow, int(0))
385        && ivec2(0) == textureSize(uniform_sampler2DShadow, int(0))
386        && ivec2(0) == textureSize(uniform_samplerCubeShadow, int(0))
387        && ivec3(0) == textureSize(gsamplerCubeArray, int(0))
388        && ivec3(0) == textureSize(uniform_samplerCubeArrayShadow, int(0))
389        && ivec2(0) == textureSize(gsampler2DRect)
390        && ivec2(0) == textureSize(uniform_sampler2DRectShadow)
391        && ivec2(0) == textureSize(gsampler1DArray, int(0))
392        && ivec2(0) == textureSize(uniform_sampler1DArrayShadow, int(0))
393        && ivec3(0) == textureSize(gsampler2DArray, int(0))
394        && ivec3(0) == textureSize(uniform_sampler2DArrayShadow, int(0))
395        && int(0) == textureSize(gsamplerBuffer)
396
397        && gvec4(T.Element(0)) == texelFetch(gsampler1D, int(0), int(0))
398        && gvec4(T.Element(0)) == texelFetch(gsampler2D, ivec2(0), int(0))
399        && gvec4(T.Element(0)) == texelFetch(gsampler3D, ivec3(0), int(0))
400        && gvec4(T.Element(0)) == texelFetch(gsampler2DRect, ivec2(0))
401        && gvec4(T.Element(0)) == texelFetch(gsampler1DArray, ivec2(0), int(0))
402        && gvec4(T.Element(0)) == texelFetch(gsampler2DArray, ivec3(0), int(0))
403        && gvec4(T.Element(0)) == texelFetch(gsamplerBuffer, int(0))
404
405        && gvec4(T.Element(0)) == texelFetchOffset(gsampler1D, int(0), int(0), __LINE__)
406        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2D, ivec2(0), int(0), { __LINE__ })
407        && gvec4(T.Element(0)) == texelFetchOffset(gsampler3D, ivec3(0), int(0), { __LINE__ })
408        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2DRect, ivec2(0), { __LINE__ })
409        && gvec4(T.Element(0)) == texelFetchOffset(gsampler1DArray, ivec2(0), int(0), __LINE__)
410        && gvec4(T.Element(0)) == texelFetchOffset(gsampler2DArray, ivec3(0), int(0), { __LINE__ })
411        // 8.9.4. Texture Gather Functions
412        && gvec4(T.Element(0)) == textureGather(gsampler2D, vec2(0))
413        && gvec4(T.Element(0)) == textureGather(gsampler2D, vec2(0), int(0))
414        && gvec4(T.Element(0)) == textureGather(gsampler2DArray, vec3(0))
415        && gvec4(T.Element(0)) == textureGather(gsampler2DArray, vec3(0), int(0))
416        && gvec4(T.Element(0)) == textureGather(gsamplerCube, vec3(0))
417        && gvec4(T.Element(0)) == textureGather(gsamplerCube, vec3(0), int(0))
418        && gvec4(T.Element(0)) == textureGather(gsamplerCubeArray, vec4(0))
419        && gvec4(T.Element(0)) == textureGather(gsamplerCubeArray, vec4(0), int(0))
420        && gvec4(T.Element(0)) == textureGather(gsampler2DRect, vec2(0))
421        && gvec4(T.Element(0)) == textureGather(gsampler2DRect, vec2(0), int(0))
422        && vec4(0) == textureGather(uniform_sampler2DShadow, vec2(0), float(0))
423        && vec4(0) == textureGather(uniform_sampler2DArrayShadow, vec3(0), float(0))
424        && vec4(0) == textureGather(uniform_samplerCubeShadow, vec3(0), float(0))
425        && vec4(0) == textureGather(uniform_samplerCubeArrayShadow, vec4(0), float(0))
426        && vec4(0) == textureGather(uniform_sampler2DRectShadow, vec2(0), float(0))
427        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2D, vec2(0), { __LINE__ })
428        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2D, vec2(0), { __LINE__ }, int(0))
429        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DArray, vec3(0), { __LINE__ })
430        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DArray, vec3(0), { __LINE__ }, int(0))
431        && vec4(0) == textureGatherOffset(uniform_sampler2DShadow, vec2(0), float(0), { __LINE__ })
432        && vec4(0) == textureGatherOffset(uniform_sampler2DArrayShadow, vec3(0), float(0), { __LINE__ })
433        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DRect, vec2(0), { __LINE__ })
434        && gvec4(T.Element(0)) == textureGatherOffset(gsampler2DRect, vec2(0), { __LINE__ }, int(0))
435        && vec4(0) == textureGatherOffset(uniform_sampler2DRectShadow, vec2(0), float(0), { __LINE__ })
436        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2D, vec2(0), { __LINE__ })
437        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2D, vec2(0), { __LINE__ }, int(0))
438        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DArray, vec3(0), { __LINE__ })
439        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DArray, vec3(0), { __LINE__ }, int(0))
440        && vec4(0) == textureGatherOffsets(uniform_sampler2DShadow, vec2(0), float(0), { __LINE__ })
441        && vec4(0) == textureGatherOffsets(uniform_sampler2DArrayShadow, vec3(0), float(0), { __LINE__ })
442        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DRect, vec2(0), { __LINE__ })
443        && gvec4(T.Element(0)) == textureGatherOffsets(gsampler2DRect, vec2(0), { __LINE__ }, int(0))
444        && vec4(0) == textureGatherOffsets(uniform_sampler2DRectShadow, vec2(0), float(0), { __LINE__ })
445        ;
446}
447
448#ifdef COMPUTE
449[numthreads(2, 2, 1)]
450#endif
451void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
452{
453    // CHECK_GLSL: void main(
454    // CHECK_SPV: OpEntryPoint
455    // CHECK_SPV_DIRECT: OpEntryPoint
456    // CHECK_HLSL: void computeMain(
457    // CHECK_CUDA: void computeMain(
458    // CHECK_CPP: void _computeMain(
459
460    outputBuffer.result = true
461        && textureFuncs(
462            uniform_sampler1D
463            , uniform_sampler2D
464            , uniform_sampler2DRect
465            , uniform_sampler3D
466            , uniform_samplerCube
467            , uniform_sampler1DArray
468            , uniform_sampler2DArray
469            , uniform_samplerCubeArray
470            , uniform_samplerBuffer
471            )
472        && itextureFuncs(
473            uniform_isampler1D
474            , uniform_isampler2D
475            , uniform_isampler2DRect
476            , uniform_isampler3D
477            , uniform_isamplerCube
478            , uniform_isampler1DArray
479            , uniform_isampler2DArray
480            , uniform_isamplerCubeArray
481            , uniform_isamplerBuffer
482            )
483        && itextureFuncs(
484            uniform_usampler1D
485            , uniform_usampler2D
486            , uniform_usampler2DRect
487            , uniform_usampler3D
488            , uniform_usamplerCube
489            , uniform_usampler1DArray
490            , uniform_usampler2DArray
491            , uniform_usamplerCubeArray
492            , uniform_usamplerBuffer
493            );
494
495    //outputBuffer[0] = float(r);
496    //o_color[0] = float(r);
497}
498