Merge pull request #2892 from greg-lunarg/mb
[platform/upstream/glslang.git] / Test / 310.tesc
1 #version 310 es\r
2 \r
3 #extension GL_OES_tessellation_shader : enable\r
4 \r
5 layout(vertices = 4) out;\r
6 out int outa[gl_out.length()];\r
7 \r
8 layout(quads) in;                   // ERROR\r
9 layout(ccw) out;                    // ERROR\r
10 layout(fractional_even_spacing) in; // ERROR\r
11 \r
12 patch in vec4 patchIn;              // ERROR\r
13 patch out vec4 patchOut;\r
14 \r
15 void main()\r
16 {\r
17     barrier();\r
18 \r
19     int a = gl_MaxTessControlInputComponents +\r
20             gl_MaxTessControlOutputComponents +\r
21             gl_MaxTessControlTextureImageUnits +\r
22             gl_MaxTessControlUniformComponents +\r
23             gl_MaxTessControlTotalOutputComponents;\r
24 \r
25     vec4 p = gl_in[1].gl_Position;\r
26     float ps = gl_in[1].gl_PointSize;        // ERROR, need point_size extension\r
27     float cd = gl_in[1].gl_ClipDistance[2];  // ERROR, not in ES\r
28 \r
29     int pvi = gl_PatchVerticesIn;\r
30     int pid = gl_PrimitiveID;\r
31     int iid = gl_InvocationID;\r
32 \r
33     gl_out[gl_InvocationID].gl_Position = p;\r
34     gl_out[gl_InvocationID].gl_PointSize = ps;        // ERROR, need point_size extension\r
35     gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;  // ERROR, not in ES\r
36 \r
37     gl_TessLevelOuter[3] = 3.2;\r
38     gl_TessLevelInner[1] = 1.3;\r
39 \r
40     if (a > 10)\r
41         barrier();           // ERROR\r
42     else\r
43         barrier();           // ERROR\r
44 \r
45     barrier();\r
46 \r
47     do {\r
48         barrier();           // ERROR\r
49     } while (a > 10);\r
50 \r
51     switch (a) {\r
52     default:\r
53         barrier();           // ERROR\r
54         break;\r
55     }\r
56     a < 12 ? a : (barrier(), a); // ERROR\r
57     {\r
58         barrier();\r
59     }\r
60 \r
61     return;\r
62 \r
63     barrier();               // ERROR\r
64 }\r
65 \r
66 layout(vertices = 4) in;    // ERROR, not on in\r
67 layout(vertices = 5) out;   // ERROR, changing #\r
68 \r
69 void foo()\r
70 {\r
71     gl_out[4].gl_Position;  // ERROR, out of range\r
72 \r
73     barrier();              // ERROR, not in main\r
74 }\r
75 \r
76 in vec2 ina;                // ERROR, not array\r
77 in vec2 inb[];\r
78 in vec2 inc[18];            // ERROR, wrong size\r
79 in vec2 ind[gl_MaxPatchVertices];\r
80 patch out float implA[];    // ERROR, not sized\r
81 \r
82 #extension GL_ARB_separate_shader_objects : enable\r
83 \r
84 layout(location = 3) in vec4 ivla[];\r
85 layout(location = 4) in vec4 ivlb[];\r
86 layout(location = 4) in vec4 ivlc[];  // ERROR, overlapping\r
87 \r
88 layout(location = 3) out vec4 ovla[];\r
89 layout(location = 4) out vec4 ovlb[];\r
90 layout(location = 4) out vec4 ovlc[];  // ERROR, overlapping\r
91 \r
92 void foop()\r
93 {\r
94     precise float d;                  // ERROR without gpu_shader5\r
95     d = fma(d, d, d);                 // ERROR without gpu_shader5\r
96 }\r
97 \r
98 patch out pinbn {\r
99     int a;\r
100 } pinbi;\r
101 \r
102 centroid out vec3 myColor2[];\r
103 centroid in vec3 centr[];\r
104 sample out vec4 perSampleColor[];   // ERROR without sample extensions\r
105 \r
106 layout(vertices = 4) out float badlay[];   // ERROR, not on a variable\r
107 out float misSized[5];              // ERROR, size doesn't match\r
108 out float okaySize[4];\r
109 \r
110 #extension GL_OES_tessellation_point_size : enable\r
111 \r
112 void pointSize2()\r
113 {\r
114     float ps = gl_in[1].gl_PointSize;\r
115     gl_out[gl_InvocationID].gl_PointSize = ps;\r
116 }\r
117 \r
118 #extension GL_OES_gpu_shader5 : enable\r
119 \r
120 precise vec3 pv3;\r
121 \r
122 void goodfoop()\r
123 {\r
124     precise float d;\r
125 \r
126     pv3 *= pv3;\r
127     pv3 = fma(pv3, pv3, pv3);\r
128     d = fma(d, d, d);\r
129 }\r
130 \r
131 void bbextBad()\r
132 {\r
133     gl_BoundingBoxEXT;  // ERROR without GL_EXT_primitive_bounding_box\r
134     gl_BoundingBox;  // ERROR, version < 320\r
135 }\r
136 \r
137 #extension GL_EXT_primitive_bounding_box : enable\r
138 \r
139 void bbext()\r
140 {\r
141     gl_BoundingBoxEXT[0] = vec4(0.0);\r
142     gl_BoundingBoxEXT[1] = vec4(1.0);\r
143     gl_BoundingBoxEXT[2] = vec4(2.0);  // ERROR, overflow\r
144 }\r
145 \r
146 void bbBad()\r
147 {\r
148     gl_BoundingBoxOES;  // ERROR without GL_OES_primitive_bounding_box \r
149 }\r
150 \r
151 #extension GL_OES_primitive_bounding_box : enable\r
152 \r
153 void bb()\r
154 {\r
155     gl_BoundingBoxOES[0] = vec4(0.0);\r
156     gl_BoundingBoxOES[1] = vec4(1.0);\r
157     gl_BoundingBoxOES[2] = vec4(2.0);  // ERROR, overflow\r
158 }\r
159 \r
160 out patch badpatchBName {  // ERROR, array size required\r
161     float f;\r
162 } badpatchIName[];\r
163 \r
164 out patch patchBName {\r
165     float f;\r
166 } patchIName[4];\r
167 \r
168 void outputtingOutparam(out int a)\r
169 {\r
170     a = 2;\r
171 }\r
172 \r
173 void outputting()\r
174 {\r
175     outa[gl_InvocationID] = 2;\r
176     outa[1] = 2;                         // ERROR, not gl_InvocationID\r
177     gl_out[0].gl_Position = vec4(1.0);   // ERROR, not gl_InvocationID\r
178     outa[1];\r
179     gl_out[0];\r
180     outputtingOutparam(outa[0]);         // ERROR, not gl_InvocationID\r
181     outputtingOutparam(outa[gl_InvocationID]);\r
182     patchIName[1].f = 3.14;\r
183     outa[(gl_InvocationID)] = 2;\r
184 }\r