Merge pull request #2892 from greg-lunarg/mb
[platform/upstream/glslang.git] / Test / 320.frag
1 #version 320 es\r
2 \r
3 out outbname { int a; } outbinst;   // ERROR, not out block in fragment shader\r
4 \r
5 in inbname {\r
6     int a;\r
7     vec4 v;\r
8     struct { int b; } s;     // ERROR, nested struct definition\r
9 } inbinst;\r
10 \r
11 in inbname2 {\r
12     layout(location = 12) int aAnon;\r
13     layout(location = 13) centroid in vec4 vAnon;\r
14 };\r
15 \r
16 in layout(location = 13) vec4 aliased; // ERROR, aliased\r
17 \r
18 in inbname2 {                // ERROR, reuse of block name\r
19     int aAnon;\r
20     centroid in vec4 vAnon;\r
21 };\r
22 \r
23 in badmember {               // ERROR, aAnon already in global scope\r
24     int aAnon;\r
25 };\r
26 \r
27 int inbname;                 // ERROR, redefinition of block name\r
28 \r
29 vec4 vAnon;                  // ERROR, anon in global scope; redefinition\r
30 \r
31 in arrayed {\r
32     float f;\r
33 } arrayedInst[4];\r
34 uniform int i;\r
35 void fooIO()\r
36 {\r
37     vec4 v = inbinst.v + vAnon;\r
38     v *= arrayedInst[2].f;\r
39     v *= arrayedInst[i].f;\r
40 }\r
41 \r
42 in vec4 gl_FragCoord;\r
43 layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord;  // ERROR, non-ES\r
44 \r
45 layout(early_fragment_tests) in;\r
46 out float gl_FragDepth;\r
47 layout(depth_any) out float gl_FragDepth;  // ERROR, non-ES\r
48 \r
49 void main()\r
50 {\r
51     gl_FragDepth = 0.2;  // ERROR, early_fragment_tests declared\r
52     bool f = gl_FrontFacing;\r
53 }\r
54 \r
55 out float gl_FragDepth;\r
56 \r
57 void foo_GS()\r
58 {\r
59     highp int l = gl_Layer;\r
60     highp int p = gl_PrimitiveID;\r
61 }\r
62 \r
63 in vec2 inf, ing;\r
64 uniform ivec2 offsets[4];\r
65 uniform sampler2D sArray[4];\r
66 uniform int sIndex;\r
67 layout(binding = 0) uniform atomic_uint auArray[2];\r
68 uniform ubName { int i; } ubInst[4];\r
69 buffer bbName { int i; } bbInst[4];\r
70 highp uniform writeonly image2D iArray[5];\r
71 const ivec2 constOffsets[4] = ivec2[4](ivec2(0.1), ivec2(0.2), ivec2(0.3), ivec2(0.4));\r
72 \r
73 void pfoo()\r
74 {\r
75     precise vec2 h;\r
76     h = fma(inf, ing, h);\r
77     textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf));\r
78     textureGatherOffsets(sArray[0], vec2(0.1), constOffsets);\r
79     textureGatherOffsets(sArray[0], vec2(0.1), offsets);       // ERROR, offset not constant\r
80 }\r
81 \r
82 precision highp imageCubeArray        ;\r
83 precision highp iimageCubeArray       ;\r
84 precision highp uimageCubeArray       ;\r
85 \r
86 precision highp samplerCubeArray      ;\r
87 precision highp samplerCubeArrayShadow;\r
88 precision highp isamplerCubeArray     ;\r
89 precision highp usamplerCubeArray     ;\r
90 \r
91 uniform writeonly imageCubeArray  CA1;\r
92 uniform writeonly iimageCubeArray CA2;\r
93 uniform writeonly uimageCubeArray CA3;\r
94 \r
95 #ifdef GL_EXT_texture_cube_map_array\r
96 uniform samplerCubeArray          CA4;\r
97 uniform samplerCubeArrayShadow    CA5;\r
98 uniform isamplerCubeArray         CA6;\r
99 uniform usamplerCubeArray         CA7;\r
100 #endif\r
101 \r
102 void CAT()\r
103 {\r
104     highp vec4 b4 = texture(CA4, vec4(0.5), 0.24);\r
105     highp ivec4 b6 = texture(CA6, vec4(0.5), 0.26);\r
106     highp uvec4 b7 = texture(CA7, vec4(0.5), 0.27);\r
107 }\r
108 \r
109 void goodSample()\r
110 {\r
111     lowp     int  a1 = gl_SampleID;       \r
112     mediump  vec2 a2 = gl_SamplePosition; \r
113     highp    int  a3 = gl_SampleMaskIn[0];\r
114     gl_SampleMask[0] = a3;\r
115     mediump int n1 = gl_MaxSamples;\r
116     mediump int n2 = gl_NumSamples;\r
117 }\r
118 \r
119 uniform layout(r32f)  highp  image2D im2Df;\r
120 uniform layout(r32ui) highp uimage2D im2Du;\r
121 uniform layout(r32i)  highp iimage2D im2Di;\r
122 uniform ivec2 P;\r
123 \r
124 uniform layout(rgba32f)  highp  image2D badIm2Df;  // ERROR, needs readonly or writeonly\r
125 uniform layout(rgba8ui) highp uimage2D badIm2Du;   // ERROR, needs readonly or writeonly\r
126 uniform layout(rgba16i)  highp iimage2D badIm2Di;  // ERROR, needs readonly or writeonly\r
127 \r
128 void goodImageAtom()\r
129 {\r
130     float datf;\r
131     int dati;\r
132     uint datu;\r
133 \r
134     imageAtomicAdd(     im2Di, P, dati);
135     imageAtomicAdd(     im2Du, P, datu);
136     imageAtomicMin(     im2Di, P, dati);
137     imageAtomicMin(     im2Du, P, datu);
138     imageAtomicMax(     im2Di, P, dati);
139     imageAtomicMax(     im2Du, P, datu);
140     imageAtomicAnd(     im2Di, P, dati);
141     imageAtomicAnd(     im2Du, P, datu);
142     imageAtomicOr(      im2Di, P, dati);
143     imageAtomicOr(      im2Du, P, datu);
144     imageAtomicXor(     im2Di, P, dati);
145     imageAtomicXor(     im2Du, P, datu);
146     imageAtomicExchange(im2Di, P, dati);
147     imageAtomicExchange(im2Du, P, datu);
148     imageAtomicExchange(im2Df, P, datf);
149     imageAtomicCompSwap(im2Di, P,  3, dati);\r
150     imageAtomicCompSwap(im2Du, P, 5u, datu);\r
151 \r
152     imageAtomicMax(badIm2Di, P, dati);      // ERROR, not an allowed layout() on the image
153     imageAtomicMax(badIm2Du, P, datu);      // ERROR, not an allowed layout() on the image
154     imageAtomicExchange(badIm2Df, P, datf); // ERROR, not an allowed layout() on the image
155 }\r
156 \r
157 centroid out vec4 colorCentroidBad;  // ERROR\r
158 flat out vec4 colorBadFlat;          // ERROR\r
159 smooth out vec4 colorBadSmooth;      // ERROR\r
160 noperspective out vec4 colorBadNo;   // ERROR\r
161 flat centroid in vec2 colorfc;\r
162 in float scalarIn;\r
163 \r
164 sample in vec4 colorSampIn;\r
165 sample out vec4 colorSampleBad;     // ERROR\r
166 flat sample in vec4 colorfsi;\r
167 sample in vec3 sampInArray[4];\r
168 \r
169 void interp()\r
170 {\r
171     float res;\r
172     vec2 res2;\r
173     vec3 res3;\r
174     vec4 res4;\r
175 \r
176     res2 = interpolateAtCentroid(colorfc);\r
177     res4 = interpolateAtCentroid(colorSampIn);\r
178     res4 = interpolateAtCentroid(colorfsi);\r
179     res  = interpolateAtCentroid(scalarIn);\r
180     res3 = interpolateAtCentroid(sampInArray);         // ERROR\r
181     res3 = interpolateAtCentroid(sampInArray[2]);\r
182     res2 = interpolateAtCentroid(sampInArray[2].xy);   // ERROR\r
183 \r
184     res3 = interpolateAtSample(sampInArray, 1);        // ERROR\r
185     res3 = interpolateAtSample(sampInArray[i], 0);\r
186     res2 = interpolateAtSample(sampInArray[2].xy, 2);  // ERROR\r
187     res  = interpolateAtSample(scalarIn, 1);\r
188 \r
189     res3 = interpolateAtOffset(sampInArray, vec2(0.2));         // ERROR\r
190     res3 = interpolateAtOffset(sampInArray[2], vec2(0.2));\r
191     res2 = interpolateAtOffset(sampInArray[2].xy, vec2(0.2));   // ERROR, no swizzle\r
192     res  = interpolateAtOffset(scalarIn + scalarIn, vec2(0.2)); // ERROR, no binary ops other than dereference\r
193     res  = interpolateAtOffset(scalarIn, vec2(0.2));\r
194 \r
195     float f;\r
196     res  = interpolateAtCentroid(f);           // ERROR, not interpolant\r
197     res4 = interpolateAtSample(outp, 0);       // ERROR, not interpolant\r
198 }\r
199 \r
200 layout(blend_support_multiply) out;
201 layout(blend_support_screen) out;
202 layout(blend_support_overlay) out;
203 layout(blend_support_darken, blend_support_lighten) out;
204 layout(blend_support_colordodge) layout(blend_support_colorburn) out;
205 layout(blend_support_hardlight) out;
206 layout(blend_support_softlight) out;
207 layout(blend_support_difference) out;
208 layout(blend_support_exclusion) out;
209 layout(blend_support_hsl_hue) out;
210 layout(blend_support_hsl_saturation) out;
211 layout(blend_support_hsl_color) out;
212 layout(blend_support_hsl_luminosity) out;
213 layout(blend_support_all_equations) out;
214
215 layout(blend_support_hsl_luminosity) out;              // okay to repeat
216
217 layout(blend_support_hsl_luminosity) in;                       // ERROR, only on "out"
218 layout(blend_support_hsl_luminosity) out vec4;                 // ERROR, only on standalone
219 layout(blend_support_hsl_luminosity) out vec4 badout;          // ERROR, only on standalone
220 layout(blend_support_hsl_luminosity) struct badS {int i;};     // ERROR, only on standalone
221 layout(blend_support_hsl_luminosity) void blendFoo() { }       // ERROR, only on standalone
222 void blendFoo(layout(blend_support_hsl_luminosity) vec3 v) { } // ERROR, only on standalone
223 layout(blend_support_flizbit) out;                             // ERROR, no flizbit
224
225 out vec4 outAA[2][2];  // ERROR