Implement 'index' layout qualifier for fragment outputs. Based partly on a submission.
[platform/upstream/glslang.git] / Test / 430.vert
1 #version 430 core\r
2 \r
3 layout(location = 3) vec4 v4;  // ERROR\r
4 \r
5 layout(location = 4) uniform vec4 uv4;\r
6 \r
7 layout(location = 2) in   inb1 { vec4 v; } b1;  // ERROR\r
8 layout(location = 2) out outb1 { vec4 v; } b2;  // ERROR\r
9 \r
10 out gl_PerVertex {\r
11     float gl_ClipDistance[];\r
12 };\r
13 \r
14 void foo()\r
15 {\r
16     gl_ClipDistance[2] = 3.7;\r
17 }\r
18 \r
19 struct sp {\r
20     highp float f;\r
21     in float g;             // ERROR\r
22     uniform float h;        // ERROR\r
23     invariant float i;      // ERROR\r
24     volatile float j;       // ERROR\r
25     layout(row_major) mat3 m3; // ERROR\r
26 };\r
27 \r
28 void foo3(invariant vec4 v4,                 // ERROR\r
29           volatile vec3 v3,\r
30           layout(location = 3) vec2 v2,      // ERROR\r
31           centroid vec3 cv3)                 // ERROR\r
32 {\r
33 }\r
34 \r
35 struct S {\r
36     mat3x2 m[7];  // needs 7*3 locations\r
37     float f;      // needs 1 location\r
38 };                // needs 22 locations\r
39 \r
40 layout(location = 10) out S cs[2];     // 10 through 10 + 2 * 22 - 1 = 53\r
41 layout(location = 54) out float cf;\r
42 layout(location = 53) out float cg; // ERROR, collision at 31\r
43 \r
44 layout(location = 10) in vec4 alias1;\r
45 layout(location = 10) in vec4 alias2;  // okay for vertex input on desktop\r
46 \r
47 out float gl_ClipDistance[17];  // ERROR, size too big\r
48 \r
49 // enhanced_layouts (most tests are in 440.*)\r
50 \r
51 layout(location = start*start - 2 - 4) in vec4 v6e;    // ERROR\r
52 \r
53 layout(location = 28) in inblock2e {\r
54     layout(location = 25) float f2;                     // ERROR\r
55 } ininst2e;\r
56 \r
57 in ublock4e {\r
58     layout(location = 50) float f1;                      // ERROR\r
59     layout(location = 51) float f2;                      // ERROR\r
60 } in4e;\r
61 \r
62 layout(align=16, std140) uniform  ubl4e { int a; } inst4e;// ERROR\r
63 \r
64 layout(align=32) uniform ubl9e {                          // ERROR\r
65     layout(offset=12, align=4) float f;                   // ERROR\r
66     layout(offset=20) float g;                            // ERROR\r
67 } inst9e;\r
68 \r
69 layout(std140) uniform blocke {\r
70                         vec4   a;\r
71     layout(offset = 32) vec3   b;                          // ERROR\r
72 } spinste;\r
73 \r
74 int aconste[gl_MaxTransformFeedbackBuffers];               // ERROR\r
75 int bconste[gl_MaxTransformFeedbackInterleavedComponents]; // ERROR\r
76 \r
77 out bblck2 {\r
78     layout(xfb_offset=64) vec4 bbv;                              // ERROR\r
79 } bbinst2;\r
80 \r
81 layout(xfb_buffer = 3, xfb_stride = 64) out;                     // ERROR\r
82 \r
83 layout(xfb_buffer=2, xfb_offset=48, xfb_stride=80) out vec4 bge; // ERROR\r
84 layout(              xfb_offset=32, xfb_stride=64) out vec4 bhe; // ERROR\r
85 \r
86 layout(xfb_stride=80, xfb_buffer=2, xfb_offset=16) out bblck4e { // ERROR\r
87     vec4 bbv1;\r
88     vec4 bbv2;\r
89 } bbinst4e;\r
90 \r
91 out bblck5e {\r
92     layout(xfb_offset=0) vec4 bbv1;                               // ERROR\r
93     layout(xfb_stride=64, xfb_buffer=3, xfb_offset=48) vec4 bbv2; // ERROR\r
94 } bbinst5e;\r
95 \r
96 #extension GL_ARB_enhanced_layouts : enable\r
97 \r
98 layout(align=16, std140) uniform  ubl4 { int a; } inst4;\r
99 layout(std430) uniform;\r
100 \r
101 layout(align=32) uniform ubl9 {\r
102     layout(offset=12, align=4) float f;\r
103     layout(offset=20) float g;\r
104 } inst9;\r
105 \r
106 layout(std140) uniform block {\r
107                         vec4   a;     // a takes offsets 0-15\r
108     layout(offset = 32) vec3   b;     // b takes offsets 32-43\r
109 } spinst;\r
110 \r
111 int aconst[gl_MaxTransformFeedbackBuffers];\r
112 int bconst[gl_MaxTransformFeedbackInterleavedComponents];\r
113 \r
114 const int start2 = 5;\r
115 layout(location = start2 * start2 - 2 - 4) in vec4 v6;\r
116 \r
117 layout(location = 28) in inblock2 {  // ERROR, input block in vertex shader, other errors are valid checks still...\r
118     bool b1;\r
119     float f1;\r
120     layout(location = 25) float f2;\r
121 } ininst2;\r
122 \r
123 in ublock4 {                         // ERROR, input block in vertex shader, other errors are valid checks still...\r
124     layout(location = 50) float f1;\r
125     layout(location = 51) float f2;\r
126 } in4;\r
127 \r
128 out bblck2g {\r
129     layout(xfb_offset=64) vec4 bbv;\r
130 } bbinst2g;\r
131 \r
132 layout(xfb_buffer = 1, xfb_stride = 80) out;  // default buffer is 3\r
133 \r
134 layout(xfb_buffer=1, xfb_offset=48, xfb_stride=80) out vec4 bg;\r
135 layout(              xfb_offset=32, xfb_stride=80) out vec4 bh;\r
136 \r
137 layout(xfb_stride=80, xfb_buffer=1, xfb_offset=16) out bblck4 {\r
138     vec4 bbv1;\r
139 } bbinst4;\r
140 \r
141 out bblck5 {\r
142     layout(xfb_offset=0) vec4 bbv1;\r
143     layout(xfb_stride=80, xfb_buffer=1, xfb_offset=64) vec4 bbv2;\r
144 } bbinst5;\r
145 \r
146 shared vec4 sharedv;                // ERROR\r
147 \r
148 void fooBarrier()\r
149 {\r
150     barrier();                       // ERROR\r
151     memoryBarrier();\r
152     memoryBarrierAtomicCounter();\r
153     memoryBarrierBuffer();\r
154     memoryBarrierShared();           // ERROR\r
155     memoryBarrierImage();\r
156     groupMemoryBarrier();            // ERROR\r
157 }\r
158 \r
159 buffer vec4 v;  // ERROR\r
160 \r
161 uniform sampler2DMS s2dms;\r
162 uniform usampler2DMSArray us2dmsa;\r
163 layout(rgba32i) uniform iimage2DMS ii2dms;\r
164 layout(rgba32f) uniform image2DMSArray i2dmsa;\r
165 \r
166 void fooq()\r
167 {\r
168     int s = textureSamples(s2dms); // ERROR\r
169     s += textureSamples(us2dmsa);  // ERROR\r
170     s += imageSamples(ii2dms);     // ERROR\r
171     s += imageSamples(i2dmsa);     // ERROR\r
172 }\r
173 \r
174 #extension GL_ARB_shader_texture_image_samples : enable\r
175 \r
176 void fooq2()\r
177 {\r
178     int s = textureSamples(s2dms);\r
179     s += textureSamples(us2dmsa); \r
180     s += imageSamples(ii2dms);    \r
181     s += imageSamples(i2dmsa);    \r
182 }\r