summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/glslang/src/Test/330.frag
blob: 8b0cb25f5456d9db07d73c167f783f42e3e07e50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#version 330 compatibility

in vec4 inVar;
layout(location=0, index=0) out vec4 outVar;

varying vec4 varyingVar;

void main()
{
    gl_FragColor = varyingVar;  // link ERROR: user output was used
    gl_FragData[1] = inVar;     // link ERROR: user output was used
    int buffer = 4;
}

#extension GL_ARB_separate_shader_objects : enable

in gl_PerFragment {
    vec4 gl_Color;
};

void foo()
{
    vec4 c = gl_Color;
    outVar = inVar;
}

in gl_block { // ERROR
    int gl_i;
} gl_name;

in myBlock {
    int gl_i;  // ERROR
} gl_name;     // ERROR

in gl_PerVertex {  // ERROR
    vec4 gl_FragCoord;
} gl_in[];

in gl_PerVertex {  // ERROR
    vec4 gl_FragCoord;
};  // ERROR

const int start = 6;
layout(location = -2) in vec4 v1;         // ERROR
layout(location = start + 2) in vec4 v2;  // ERROR
layout(location = 4.7e10) in vec4 v20;    // ERROR
layout(location = +60) in float v21;      // ERROR
layout(location = (2)) in float v22;      // ERROR

struct S {
    float f1;
    layout(location = 3) float f2;        // ERROR
};

layout(location = 1) in inblock {         // ERROR
    float f1;
    layout(location = 3) float f2;        // ERROR
};

layout(location = 1) uniform ublock {     // ERROR
    float f1;
    layout(location = 3) float f2;        // ERROR
} uinst;

#extension GL_ARB_enhanced_layouts : enable

layout(location = start) in vec4 v3;
layout(location = -2) in vec4 v4;         // ERROR
layout(location = -start) in vec4 v5;     // ERROR
layout(location = start*start - 2 - 4) in vec4 v6;
layout(location = +61) in float v23;
layout(location = (62)) in float v24;

struct S2 {
    float f1;
    layout(location = 3) float f2;        // ERROR
};

layout(location = 28) in inblock2 {
    bool b1;
    float f1;
    layout(location = 25) float f2;
    vec4 f3;
    layout(location = 21) S2 s2;
    vec4 f4;
    vec4 f5;
} ininst2;

layout(location = 13) uniform ublock2 {   // ERROR
    float f1;
    layout(location = 3) float f2;        // ERROR
} uinst2;

in inblock3 {                             // ERROR, mix of location internal with no location external
    float f1;
    layout(location = 40) float f2;
} in3;

in ublock4 {
    layout(location = 50) float f1;
    layout(location = 51) float f2;
} in4;

layout(location = 33) in struct SS {
    vec3 a;    // gets location 33
    mat2 b;    // gets locations 34 and 35
    vec4 c[2]; // gets locations 36 and 37
    layout (location = 38) vec2 A; // ERROR, can't use on struct member
} s;

layout(location = 44) in block {
    vec4 d; // gets location 44
    vec4 e; // gets location 45
    layout(location = 47) vec4 f; // gets location 47
    vec4 g; // gets location 48
    layout (location = 41) vec4 h; // gets location 41
    vec4 i; // gets location 42
    vec4 j; // gets location 43
    vec4 k; // ERROR, location 44 already used
};

layout(index=0) out vec4 outVar2; // ERROR: missing explicit location
layout(location=0, index=1) out vec4 outVar3; // no error even though location is overlapping
layout(location=0, index=1) out vec4 outVar4; // ERROR overlapping
layout(location=27, index=0) in vec4 indexIn; // ERROR, not on in
layout(location=0, index=0) in; // ERROR, not just on in
layout(location=0, index=0) out; // ERROR, need a variable
layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block

uniform sampler1D samp1D;
uniform sampler2DShadow samp2Ds;

void qlod()
{
    vec2 lod;
    float pf;
    vec2 pf2;
    vec3 pf3;

    lod = textureQueryLod(samp1D, pf);      // ERROR, not until 400
    lod = textureQueryLod(samp2Ds, pf2);    // ERROR, not until 400
}

int precise;                // okay, not a keyword yet
struct SKeyMem { int precise; } KeyMem; // okay, not a keyword yet

void fooKeyMem()
{
    KeyMem.precise;
}

layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range