Merge pull request #2892 from greg-lunarg/mb
[platform/upstream/glslang.git] / Test / 130.frag
1 #version 130
2
3 lowp vec3 a;
4 mediump float b;
5 highp int c;
6
7 precision highp float;
8
9 in vec4 i;
10 out vec4 o;
11
12 flat in float fflat;
13 smooth in float fsmooth;
14 noperspective in float fnop;
15
16 void main()
17 {
18     float clip = gl_ClipDistance[3];
19 }
20
21 uniform samplerCube sampC;
22
23 void foo()
24 {
25     vec4 s = textureGather(sampC, vec3(0.2));
26 }
27
28 #extension GL_ARB_texture_gather : enable
29
30 void bar()
31 {
32     vec4 s = textureGather(sampC, vec3(0.2));
33 }
34
35 flat in vec3 gl_Color;     // ERROR, type
36 in vec4 gl_Color;
37 flat in vec4 gl_Color;
38 flat in vec4 gl_Color[2];  // ERROR, array 
39 vec4 gl_Color;             // ERROR, storage
40
41 #extension GL_ARB_texture_gather : warn
42
43 void bar2()
44 {
45     vec4 s = textureGather(sampC, vec3(0.2));
46
47     uvec3 uv3;
48     bvec3 b3;
49     b3 = lessThan(uv3, uv3);
50     b3 = equal(uv3, uv3);
51     const bvec2 bl1 = greaterThanEqual(uvec2(2, 3), uvec2(3,3));
52     const bvec2 bl2 = equal(uvec2(2, 3), uvec2(3,3));
53     const bvec2 bl3 = equal(bl1, bl2);  // yes, equal
54     int a1[int(bl3.x)];
55     int a2[int(bl3.y)];
56     a1[0];  // size 1
57     a2[0];  // size 1
58     const bvec4 bl4 = notEqual(greaterThan(uvec4(1,2,3,4), uvec4(0,2,0,6)), lessThanEqual(uvec4(7,8,9,10), uvec4(6, 8, 0, 11)));  // compare (t,f,t,f) with (f,t,f,t)
59     int a3[int(bl4.x)+int(bl4.y)+int(bl4.z)+int(bl4.w)];
60     a3[3];  // size 4
61     b3 != b3;
62     b3 < b3;                   // ERROR
63     uv3 > uv3;                 // ERROR
64     uvec2(2, 3) >= uvec2(3,3); // ERROR
65     int samples = gl_NumSamples; // ERROR
66     int(bl4) <= int(bl4);      // true
67     int(bl4.x) > int(bl4.y);   // false
68 }
69
70 #extension GL_ARB_texture_gather : enable
71 #extension GL_ARB_texture_rectangle : enable
72 #extension GL_ARB_sample_shading : enable
73
74 uniform sampler2D samp2D;
75 uniform sampler2DShadow samp2DS;
76 uniform sampler2DRect samp2DR;
77 uniform sampler2DArray samp2DA;
78
79 void bar23()
80 {
81     vec4 s;
82     s = textureGatherOffset(sampC, vec3(0.3), ivec2(1));        // ERROR
83     s = textureGatherOffset(samp2DR, vec2(0.3), ivec2(1));      // ERROR
84     s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1));
85     s = textureGatherOffset(samp2DA, vec3(0.3), ivec2(1));
86     s = textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1)); // ERROR
87     s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2);    // ERROR
88     int samples = gl_NumSamples;
89 }
90
91 #extension GL_ARB_gpu_shader5 : enable
92
93 void bar234()
94 {
95     vec4 s;
96     s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1));
97     s = textureGatherOffset(samp2DA, vec3(0.3), ivec2(1));
98     s = textureGatherOffset(samp2DR, vec2(0.3), ivec2(1));
99     s = textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1));
100     s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2);
101 }
102
103 #extension GL_ARB_texture_cube_map_array : enable
104
105 uniform  samplerCubeArray Sca;
106 uniform isamplerCubeArray Isca;
107 uniform usamplerCubeArray Usca;
108 uniform samplerCubeArrayShadow Scas;
109
110 void bar235()
111 {
112     ivec3 a = textureSize(Sca, 3);
113     vec4 b = texture(Sca, i);
114     ivec4 c = texture(Isca, i, 0.7);
115     uvec4 d = texture(Usca, i);
116     
117     b = textureLod(Sca, i, 1.7);
118     a = textureSize(Scas, a.x);
119     float f = texture(Scas, i, b.y);
120     c = textureGrad(Isca, i, vec3(0.1), vec3(0.2));
121 }
122
123 int \
124     x;  // ERROR until 420pack is turned on
125
126 #extension GL_ARB_shading_language_420pack : enable
127
128 const int ai[3] = { 10, 23, 32 };
129 layout(binding=0) uniform blockname { int a; } instanceName;  // ERROR
130 uniform layout(binding=0) sampler2D bounds;
131
132 void bar23444()
133 {
134     mat4x3 m43;  \
135     float a1 = m43[3].y;
136     vec3 v3;
137     int a2 = m43.length();
138     a2 += m43[1].length();
139     a2 += v3.length();
140     const float b = 2 * a1;
141     a.x = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset;
142     bool boolb;
143     boolb.length();     // ERROR
144     m43[3][1].length(); // ERROR
145     v3.length;          // ERROR
146     v3.length(b);       // ERROR
147 }
148
149 in float gl_FogFragCoord;
150
151 #extension GL_ARB_separate_shader_objects : enable
152
153 in float gl_FogFragCoord;
154 in int gl_FogFragCoord;    // ERROR
155
156 layout(early_fragment_tests) in;         // ERROR
157 layout(r32i) uniform iimage2D iimg2Dbad; // ERROR
158
159 #extension GL_ARB_shader_image_load_store : enable
160
161 layout(early_fragment_tests) in;
162
163 layout(r32i) uniform iimage2D iimg2D;
164
165 void qux2()
166 {
167     int i;
168     imageAtomicCompSwap(iimg2D, ivec2(i,i), i, i);
169     ivec4 pos = imageLoad(iimg2D, ivec2(i,i));
170 }
171
172 layout(early_fragment_tests) out;         // ERROR
173
174 #extension GL_ARB_explicit_uniform_location : enable
175
176 layout(location = 3) uniform vec4 ucolor0; // ERROR: explicit attrib location is also required for version < 330
177
178 #extension GL_ARB_explicit_attrib_location : enable
179
180 layout(location = 4) uniform vec4 ucolor1;
181