1#version 450 core
2
3out gl_PerVertex {
4    float gl_CullDistance[3];
5};
6
7void main()
8{
9    gl_CullDistance[2] = 4.5;
10}
11
12out bool outb;         // ERROR
13out sampler2D outo;    // ERROR
14out float outa[4];
15out float outaa[4][2];
16struct S { float f; };
17out S outs;
18out S[4] outasa;
19out S outsa[4];
20struct SA { float f[4]; };
21out SA outSA;
22struct SS { float f; S s; };
23out SS outSS;
24
25layout(binding = 0) uniform atomic_uint aui;
26uint ui;
27
28void foo()
29{
30    SS::f;
31    atomicCounterAdd(aui, ui);           // ERROR, need 4.6
32    atomicCounterSubtract(aui, ui);      // ERROR, need 4.6
33    atomicCounterMin(aui, ui);           // ERROR, need 4.6
34    atomicCounterMax(aui, ui);           // ERROR, need 4.6
35    atomicCounterAnd(aui, ui);           // ERROR, need 4.6
36    atomicCounterOr(aui, ui);            // ERROR, need 4.6
37    atomicCounterXor(aui, ui);           // ERROR, need 4.6
38    atomicCounterExchange(aui, ui);      // ERROR, need 4.6
39    atomicCounterCompSwap(aui, ui, ui);  // ERROR, need 4.6
40
41    int a = gl_BaseVertex + gl_BaseInstance + gl_DrawID; // ERROR, need 4.6
42
43    bool b1;
44    anyInvocation(b1);        // ERROR, need 4.6
45    allInvocations(b1);       // ERROR, need 4.6
46    allInvocationsEqual(b1);  // ERROR, need 4.6
47}
48; // ERROR: no extraneous semicolons
49
50layout(location = 0) uniform locBlock {        // ERROR, no location uniform block
51    int a;
52};
53
54layout(location = 0) buffer locBuffBlock {     // ERROR, no location on buffer block
55    int b;
56};
57