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