Merge pull request #2891 from dneto0/hlsl-namespace
[platform/upstream/glslang.git] / Test / spv.400.frag
1 #version 400 core\r
2 \r
3 in vec2 c2D;\r
4 flat in int i;\r
5 flat in uint u;\r
6 out uint uo;\r
7 out vec4 outp;\r
8 out ivec4 ioutp;\r
9 out uvec4 uoutp;\r
10 uniform sampler2D arrayedSampler[5];\r
11 uniform usampler2DRect samp2dr;\r
12 uniform isampler2DArray isamp2DA;\r
13 uniform sampler2DRectShadow u2drs;\r
14 \r
15 #extension GL_ARB_separate_shader_objects : enable\r
16 \r
17 layout(location = 6) in vec4 vl2;\r
18 \r
19 void foo23()\r
20 {\r
21     const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16));\r
22 \r
23     outp.x += textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), offsets[1]);\r
24 }\r
25 \r
26 void doubles()\r
27 {\r
28     double doublev;\r
29     dvec2 dvec2v;\r
30     dvec3 dvec3v;\r
31     dvec4 dvec4v;\r
32 \r
33     bool boolv;\r
34     bvec2 bvec2v;\r
35     bvec3 bvec3v;\r
36     bvec4 bvec4v;\r
37 \r
38     doublev = sqrt(2.9);\r
39     dvec2v  = sqrt(dvec2(2.7));\r
40     dvec3v  = sqrt(dvec3(2.0));\r
41     dvec4v  = sqrt(dvec4(doublev));\r
42 \r
43     doublev += inversesqrt(doublev);\r
44     dvec2v  += inversesqrt(dvec2v);\r
45     dvec3v  += inversesqrt(dvec3v);\r
46     dvec4v  += inversesqrt(dvec4v);\r
47 \r
48     doublev += abs(doublev);\r
49     dvec2v  += abs(dvec2v);\r
50     dvec3v  += abs(dvec3v);\r
51     dvec4v  += abs(dvec4v);\r
52 \r
53     doublev += sign(doublev);\r
54     dvec2v  += sign(dvec2v);\r
55     dvec3v  += sign(dvec3v);\r
56     dvec4v  += sign(dvec4v);\r
57 \r
58     doublev += floor(doublev);\r
59     dvec2v  += floor(dvec2v);\r
60     dvec3v  += floor(dvec3v);\r
61     dvec4v  += floor(dvec4v);\r
62 \r
63     doublev += trunc(doublev);\r
64     dvec2v  += trunc(dvec2v);\r
65     dvec3v  += trunc(dvec3v);\r
66     dvec4v  += trunc(dvec4v);\r
67 \r
68     doublev += round(doublev);\r
69     dvec2v  += round(dvec2v);\r
70     dvec3v  += round(dvec3v);\r
71     dvec4v  += round(dvec4v);\r
72 \r
73     doublev += roundEven(doublev);\r
74     dvec2v  += roundEven(dvec2v);\r
75     dvec3v  += roundEven(dvec3v);\r
76     dvec4v  += roundEven(dvec4v);\r
77 \r
78     doublev += ceil(doublev);\r
79     dvec2v  += ceil(dvec2v);\r
80     dvec3v  += ceil(dvec3v);\r
81     dvec4v  += ceil(dvec4v);\r
82 \r
83     doublev += fract(doublev);\r
84     dvec2v  += fract(dvec2v);\r
85     dvec3v  += fract(dvec3v);\r
86     dvec4v  += fract(dvec4v);\r
87 \r
88     doublev += mod(doublev, doublev);\r
89     dvec2v  += mod(dvec2v, doublev);\r
90     dvec3v  += mod(dvec3v, doublev);\r
91     dvec4v  += mod(dvec4v, doublev);\r
92     dvec2v  += mod(dvec2v, dvec2v);\r
93     dvec3v  += mod(dvec3v, dvec3v);\r
94     dvec4v  += mod(dvec4v, dvec4v);\r
95 \r
96     doublev += modf(doublev, doublev);\r
97     dvec2v  += modf(dvec2v,  dvec2v);\r
98     dvec3v  += modf(dvec3v,  dvec3v);\r
99     dvec4v  += modf(dvec4v,  dvec4v);\r
100 \r
101     doublev += min(doublev, doublev);\r
102     dvec2v  += min(dvec2v, doublev);\r
103     dvec3v  += min(dvec3v, doublev);\r
104     dvec4v  += min(dvec4v, doublev);\r
105     dvec2v  += min(dvec2v, dvec2v);\r
106     dvec3v  += min(dvec3v, dvec3v);\r
107     dvec4v  += min(dvec4v, dvec4v);\r
108 \r
109     doublev += max(doublev, doublev);\r
110     dvec2v  += max(dvec2v, doublev);\r
111     dvec3v  += max(dvec3v, doublev);\r
112     dvec4v  += max(dvec4v, doublev);\r
113     dvec2v  += max(dvec2v, dvec2v);\r
114     dvec3v  += max(dvec3v, dvec3v);\r
115     dvec4v  += max(dvec4v, dvec4v);\r
116 \r
117     doublev += clamp(doublev, doublev, doublev);\r
118     dvec2v  += clamp(dvec2v, doublev, doublev);\r
119     dvec3v  += clamp(dvec3v, doublev, doublev);\r
120     dvec4v  += clamp(dvec4v, doublev, doublev);\r
121     dvec2v  += clamp(dvec2v, dvec2v, dvec2v);\r
122     dvec3v  += clamp(dvec3v, dvec3v, dvec3v);\r
123     dvec4v  += clamp(dvec4v, dvec4v, dvec4v);\r
124 \r
125     doublev += mix(doublev, doublev, doublev);\r
126     dvec2v  += mix(dvec2v, dvec2v, doublev);\r
127     dvec3v  += mix(dvec3v, dvec3v, doublev);\r
128     dvec4v  += mix(dvec4v, dvec4v, doublev);\r
129     dvec2v  += mix(dvec2v, dvec2v, dvec2v);\r
130     dvec3v  += mix(dvec3v, dvec3v, dvec3v);\r
131     dvec4v  += mix(dvec4v, dvec4v, dvec4v);\r
132     doublev += mix(doublev, doublev, boolv);\r
133     dvec2v  += mix(dvec2v, dvec2v, bvec2v);\r
134     dvec3v  += mix(dvec3v, dvec3v, bvec3v);\r
135     dvec4v  += mix(dvec4v, dvec4v, bvec4v);\r
136 \r
137     doublev += step(doublev, doublev);\r
138     dvec2v  += step(dvec2v, dvec2v);\r
139     dvec3v  += step(dvec3v, dvec3v);\r
140     dvec4v  += step(dvec4v, dvec4v);\r
141     dvec2v  += step(doublev, dvec2v);\r
142     dvec3v  += step(doublev, dvec3v);\r
143     dvec4v  += step(doublev, dvec4v);\r
144 \r
145     doublev += smoothstep(doublev, doublev, doublev);\r
146     dvec2v  += smoothstep(dvec2v, dvec2v, dvec2v);\r
147     dvec3v  += smoothstep(dvec3v, dvec3v, dvec3v);\r
148     dvec4v  += smoothstep(dvec4v, dvec4v, dvec4v);\r
149     dvec2v  += smoothstep(doublev, doublev, dvec2v);\r
150     dvec3v  += smoothstep(doublev, doublev, dvec3v);\r
151     dvec4v  += smoothstep(doublev, doublev, dvec4v);\r
152 \r
153     boolv  = isnan(doublev);\r
154     bvec2v = isnan(dvec2v);\r
155     bvec3v = isnan(dvec3v);\r
156     bvec4v = isnan(dvec4v);\r
157 \r
158     boolv  = boolv ? isinf(doublev) : false;\r
159     bvec2v = boolv ? isinf(dvec2v)  : bvec2(false);\r
160     bvec3v = boolv ? isinf(dvec3v)  : bvec3(false);\r
161     bvec4v = boolv ? isinf(dvec4v)  : bvec4(false);\r
162 \r
163     doublev += length(doublev);\r
164     doublev += length(dvec2v);\r
165     doublev += length(dvec3v);\r
166     doublev += length(dvec4v);\r
167 \r
168     doublev += distance(doublev, doublev);\r
169     doublev += distance(dvec2v, dvec2v);\r
170     doublev += distance(dvec3v, dvec3v);\r
171     doublev += distance(dvec4v, dvec4v);\r
172 \r
173     doublev += dot(doublev, doublev);\r
174     doublev += dot(dvec2v, dvec2v);\r
175     doublev += dot(dvec3v, dvec3v);\r
176     doublev += dot(dvec4v, dvec4v);\r
177 \r
178     dvec3v += cross(dvec3v, dvec3v);\r
179 \r
180     doublev += normalize(doublev);\r
181     dvec2v  += normalize(dvec2v);\r
182     dvec3v  += normalize(dvec3v);\r
183     dvec4v  += normalize(dvec4v);\r
184 \r
185     doublev += faceforward(doublev, doublev, doublev);\r
186     dvec2v  += faceforward(dvec2v, dvec2v, dvec2v);\r
187     dvec3v  += faceforward(dvec3v, dvec3v, dvec3v);\r
188     dvec4v  += faceforward(dvec4v, dvec4v, dvec4v);\r
189 \r
190     doublev += reflect(doublev, doublev);\r
191     dvec2v  += reflect(dvec2v, dvec2v);\r
192     dvec3v  += reflect(dvec3v, dvec3v);\r
193     dvec4v  += reflect(dvec4v, dvec4v);\r
194 \r
195     doublev += refract(doublev, doublev, doublev);\r
196     dvec2v  += refract(dvec2v, dvec2v, doublev);\r
197     dvec3v  += refract(dvec3v, dvec3v, doublev);\r
198     dvec4v  += refract(dvec4v, dvec4v, doublev);\r
199 \r
200     dmat2   dmat2v   = outerProduct(dvec2v, dvec2v);\r
201     dmat3   dmat3v   = outerProduct(dvec3v, dvec3v);\r
202     dmat4   dmat4v   = outerProduct(dvec4v, dvec4v);\r
203     dmat2x3 dmat2x3v = outerProduct(dvec3v, dvec2v);\r
204     dmat3x2 dmat3x2v = outerProduct(dvec2v, dvec3v);\r
205     dmat2x4 dmat2x4v = outerProduct(dvec4v, dvec2v);\r
206     dmat4x2 dmat4x2v = outerProduct(dvec2v, dvec4v);\r
207     dmat3x4 dmat3x4v = outerProduct(dvec4v, dvec3v);\r
208     dmat4x3 dmat4x3v = outerProduct(dvec3v, dvec4v);\r
209 \r
210     dmat2v *= matrixCompMult(dmat2v, dmat2v);
211     dmat3v *= matrixCompMult(dmat3v, dmat3v);
212     dmat4v *= matrixCompMult(dmat4v, dmat4v);
213     dmat2x3v = matrixCompMult(dmat2x3v, dmat2x3v);  // For now, relying on no dead-code elimination\r
214     dmat2x4v = matrixCompMult(dmat2x4v, dmat2x4v);\r
215     dmat3x2v = matrixCompMult(dmat3x2v, dmat3x2v);\r
216     dmat3x4v = matrixCompMult(dmat3x4v, dmat3x4v);\r
217     dmat4x2v = matrixCompMult(dmat4x2v, dmat4x2v);\r
218     dmat4x3v = matrixCompMult(dmat4x3v, dmat4x3v);\r
219 \r
220     dmat2v   *= transpose(dmat2v);\r
221     dmat3v   *= transpose(dmat3v);\r
222     dmat4v   *= transpose(dmat4v);\r
223     dmat2x3v  = transpose(dmat3x2v);  // For now, relying on no dead-code elimination\r
224     dmat3x2v  = transpose(dmat2x3v);\r
225     dmat2x4v  = transpose(dmat4x2v);\r
226     dmat4x2v  = transpose(dmat2x4v);\r
227     dmat3x4v  = transpose(dmat4x3v);\r
228     dmat4x3v  = transpose(dmat3x4v);\r
229 \r
230     doublev += determinant(dmat2v);\r
231     doublev += determinant(dmat3v);\r
232     doublev += determinant(dmat4v);\r
233 \r
234     dmat2v *= inverse(dmat2v);\r
235     dmat3v *= inverse(dmat3v);\r
236     dmat4v *= inverse(dmat4v);\r
237     \r
238     outp *= float(doublev + dvec2v.y + dvec3v.z + dvec4v.w + \r
239                   dmat2v[1][1] + dmat3v[2][2] + dmat4v[3][3] + dmat2x3v[1][1] + dmat3x2v[1][1] + dmat3x4v[2][2] + dmat4x3v[2][2] + dmat2x4v[1][1] + dmat4x2v[1][1] +\r
240                   float(boolv) + float(bvec2v.x) + float(bvec3v.x) + float(bvec4v.x));\r
241 }\r
242 \r
243 void main()\r
244 {\r
245     vec4 v;\r
246     v = texture(arrayedSampler[i], c2D);\r
247     outp.x = gl_ClipDistance[1];\r
248     outp.yzw = v.yzw;\r
249 \r
250     ivec2 offsets[4];\r
251     const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));\r
252     uoutp = textureGatherOffsets(samp2dr, c2D, constOffsets, 2);\r
253     outp += textureGather(arrayedSampler[0], c2D);\r
254     ioutp = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 3);\r
255     ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2);\r
256     ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i));\r
257 \r
258     outp += gl_FragCoord + vl2;\r
259     uo = u % i;\r
260     foo23();\r
261     doubles();\r
262 \r
263     int id = gl_PrimitiveID;\r
264 }\r
265 \r