Merge pull request #3031 from rg3igalia/sub-group-size-arb-flat-fix
[platform/upstream/glslang.git] / Test / 330.frag
1 #version 330 compatibility
2
3 in vec4 inVar;
4 layout(location=0, index=0) out vec4 outVar;
5
6 varying vec4 varyingVar;
7
8 void main()
9 {
10     gl_FragColor = varyingVar;  // link ERROR: user output was used
11     gl_FragData[1] = inVar;     // link ERROR: user output was used
12     int buffer = 4;
13 }
14
15 #extension GL_ARB_separate_shader_objects : enable
16
17 in gl_PerFragment {
18     vec4 gl_Color;
19 };
20
21 void foo()
22 {
23     vec4 c = gl_Color;
24     outVar = inVar;
25 }
26
27 in gl_block { // ERROR
28     int gl_i;
29 } gl_name;
30
31 in myBlock {
32     int gl_i;  // ERROR
33 } gl_name;     // ERROR
34
35 in gl_PerVertex {  // ERROR
36     vec4 gl_FragCoord;
37 } gl_in[];
38
39 in gl_PerVertex {  // ERROR
40     vec4 gl_FragCoord;
41 };  // ERROR
42
43 const int start = 6;
44 layout(location = -2) in vec4 v1;         // ERROR
45 layout(location = start + 2) in vec4 v2;  // ERROR
46 layout(location = 4.7e10) in vec4 v20;    // ERROR
47 layout(location = +60) in float v21;      // ERROR
48 layout(location = (2)) in float v22;      // ERROR
49
50 struct S {
51     float f1;
52     layout(location = 3) float f2;        // ERROR
53 };
54
55 layout(location = 1) in inblock {         // ERROR
56     float f1;
57     layout(location = 3) float f2;        // ERROR
58 };
59
60 layout(location = 1) uniform ublock {     // ERROR
61     float f1;
62     layout(location = 3) float f2;        // ERROR
63 } uinst;
64
65 #extension GL_ARB_enhanced_layouts : enable
66
67 layout(location = start) in vec4 v3;
68 layout(location = -2) in vec4 v4;         // ERROR
69 layout(location = -start) in vec4 v5;     // ERROR
70 layout(location = start*start - 2 - 4) in vec4 v6;
71 layout(location = +61) in float v23;
72 layout(location = (62)) in float v24;
73
74 struct S2 {
75     float f1;
76     layout(location = 3) float f2;        // ERROR
77 };
78
79 layout(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
89 layout(location = 13) uniform ublock2 {   // ERROR
90     float f1;
91     layout(location = 3) float f2;        // ERROR
92 } uinst2;
93
94 in inblock3 {                             // ERROR, mix of location internal with no location external
95     float f1;
96     layout(location = 40) float f2;
97 } in3;
98
99 in ublock4 {
100     layout(location = 50) float f1;
101     layout(location = 51) float f2;
102 } in4;
103
104 layout(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
111 layout(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 };
121
122 layout(index=0) out vec4 outVar2; // ERROR: missing explicit location
123 layout(location=0, index=1) out vec4 outVar3; // no error even though location is overlapping
124 layout(location=0, index=1) out vec4 outVar4; // ERROR overlapping
125 layout(location=27, index=0) in vec4 indexIn; // ERROR, not on in
126 layout(location=0, index=0) in; // ERROR, not just on in
127 layout(location=0, index=0) out; // ERROR, need a variable
128 layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block
129
130 int precise;                // okay, not a keyword yet
131 struct SKeyMem { int precise; } KeyMem; // okay, not a keyword yet
132
133 void fooKeyMem()
134 {
135     KeyMem.precise;
136 }
137
138 layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range
139
140 layout(location=4) uniform vec4 ucolor0; // ERROR: extension is not enabled
141
142 #extension GL_ARB_explicit_uniform_location : enable
143
144 layout(location=5) uniform vec4 ucolor1;
145
146 layout(location=6) uniform ColorsBuffer // ERROR: location cannot be applied in uniform buffer block
147 {
148     vec4 colors[128];
149 } colorsBuffer;
150
151
152 void testOverload() {
153     float overloadTest = 42;
154     overloadTest = smoothstep(0, 1, overloadTest);
155 }