blob: d6083c0622648f3ddfbe7be684810103aada9ee6 [file] [log] [blame]
John Kessenichab41fe52013-10-24 01:25:40 +00001#version 330 compatibility
John Kessenichef8ae2e2013-02-27 19:02:52 +00002
3in vec4 inVar;
4out vec4 outVar;
5
6varying vec4 varyingVar;
7
8void main()
9{
John Kessenich5134b9c2013-11-20 21:12:43 +000010 gl_FragColor = varyingVar; // link ERROR: user output was used
11 gl_FragData[1] = inVar; // link ERROR: user output was used
John Kessenichc2ff7702013-04-25 16:44:03 +000012 int buffer = 4;
John Kessenichef8ae2e2013-02-27 19:02:52 +000013}
John Kessenichab41fe52013-10-24 01:25:40 +000014
15#extension GL_ARB_separate_shader_objects : enable
16
17in gl_PerFragment {
18 vec4 gl_Color;
19};
20
21void foo()
22{
23 vec4 c = gl_Color;
John Kessenich5134b9c2013-11-20 21:12:43 +000024 outVar = inVar;
John Kessenichab41fe52013-10-24 01:25:40 +000025}
John Kessenichc7194812013-12-09 00:37:46 +000026
27in gl_block { // ERROR
28 int gl_i;
29} gl_name;
30
31in myBlock {
32 int gl_i; // ERROR
33} gl_name; // ERROR
34
35in gl_PerVertex { // ERROR
36 vec4 gl_FragCoord;
37} gl_in[];
38
39in gl_PerVertex { // ERROR
40 vec4 gl_FragCoord;
41}; // ERROR
John Kessenichb76d6d62014-01-07 18:14:48 +000042
43const int start = 6;
44layout(location = -2) in vec4 v1; // ERROR
45layout(location = start + 2) in vec4 v2; // ERROR
46layout(location = 4.7e10) in vec4 v20; // ERROR
John Kessenichb35e9bf2014-02-24 21:16:19 +000047layout(location = +60) in float v21; // ERROR
48layout(location = (2)) in float v22; // ERROR
John Kessenichb76d6d62014-01-07 18:14:48 +000049
John Kessenich68546c62014-01-08 23:25:18 +000050struct S {
51 float f1;
52 layout(location = 3) float f2; // ERROR
53};
54
55layout(location = 1) in inblock { // ERROR
56 float f1;
57 layout(location = 3) float f2; // ERROR
58};
59
60layout(location = 1) uniform ublock { // ERROR
61 float f1;
62 layout(location = 3) float f2; // ERROR
63} uinst;
64
John Kessenichb76d6d62014-01-07 18:14:48 +000065#extension GL_ARB_enhanced_layouts : enable
66
67layout(location = start) in vec4 v3;
68layout(location = -2) in vec4 v4; // ERROR
69layout(location = -start) in vec4 v5; // ERROR
John Kessenich68546c62014-01-08 23:25:18 +000070layout(location = start*start - 2 - 4) in vec4 v6;
John Kessenichb35e9bf2014-02-24 21:16:19 +000071layout(location = +61) in float v23;
72layout(location = (62)) in float v24;
John Kessenich68546c62014-01-08 23:25:18 +000073
74struct S2 {
75 float f1;
76 layout(location = 3) float f2; // ERROR
77};
78
79layout(location = 28) in inblock2 {
80 bool b1;
81 float f1;
82 layout(location = 25) float f2;
83 vec4 f3;
84 layout(location = 21) S2 s2;
85 vec4 f4;
86 vec4 f5;
87} ininst2;
88
89layout(location = 13) uniform ublock2 { // ERROR
90 float f1;
91 layout(location = 3) float f2; // ERROR
92} uinst2;
93
94in inblock3 { // ERROR, mix of location internal with no location external
95 float f1;
96 layout(location = 40) float f2;
97} in3;
98
99in ublock4 {
100 layout(location = 50) float f1;
101 layout(location = 51) float f2;
102} in4;
103
104layout(location = 33) in struct SS {
105 vec3 a; // gets location 33
106 mat2 b; // gets locations 34 and 35
107 vec4 c[2]; // gets locations 36 and 37
108 layout (location = 38) vec2 A; // ERROR, can't use on struct member
109} s;
110
111layout(location = 44) in block {
112 vec4 d; // gets location 44
113 vec4 e; // gets location 45
114 layout(location = 47) vec4 f; // gets location 47
115 vec4 g; // gets location 48
116 layout (location = 41) vec4 h; // gets location 41
117 vec4 i; // gets location 42
118 vec4 j; // gets location 43
119 vec4 k; // ERROR, location 44 already used
120};