summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/glslang/src/Test/420.vert
blob: d3e583cab2084f6fccb31aff7ba9f03782d71f89 (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
153
154
155
156
157
158
159
#version 420 core
#version 420 core
varying vec2 v2;               // ERROR, varying reserved
in vec4 bad[10];
highp in vec4 badorder;
out invariant vec4 badorder2;
in centroid vec4 badorder4;    // ERROR, no centroid input to vertex stage
out flat vec4 badorder3;
void bar(in const float a);
void bar2(highp in float b);
smooth flat out vec4 rep;      // ERROR, replicating interpolation qualification
centroid sample out vec4 rep2; // ERROR, replicating auxiliary qualification
in uniform vec4 rep3;          // ERROR, replicating storage qualification

int anonconst;
const int aconst = 5;
const int a = aconst;
const int b = anonconst;       // ERROR at global scope

const int foo()                // ERROR, no const functions
{
    const int a = aconst;
    const int b = anonconst;
    const int c = a;          // still compile-time const
    const int d = b;          // not a compile-time const
    float x[c];               // okay
    float y[d];               // ERROR

    return b;
}

void main()
{
    int i;
    if (i == 3)
        int j = i;
    else
        int k = j;              // ERROR, j is undeclared
    int m = k;                  // ERROR, k is undeclared
    int n = j;                  // ERROR, j is undeclared

    while (true)
        int jj;
    int kk = jj;                // ERROR, jj is undeclared
}

const float cx = 4.20;
const float dx = 4.20;

void bar(in highp volatile vec4 v)
{
    int s;
    s.x;       // okay
    s.y;       // ERROR
    if (bad[0].x == cx.x)
        ;
    if (cx.x == dx.x)
        badorder3 = bad[0];

    float f;
    vec3 smeared = f.xxx;
    f.xxxxx;   // ERROR
    f.xxy;     // ERROR
}

layout(binding = 3) uniform;  // ERROR
layout(binding = 3) uniform boundblock { int aoeu; } boundInst;
layout(binding = 7) uniform anonblock { int aoeu; } ;
layout(location = 1) in;      // ERROR
layout(binding = 1) in inblock { int aoeua; };       // ERROR
layout(binding = 100000) uniform anonblock2 { int aooeu; } ;
layout(binding = 4) uniform sampler2D sampb1;
layout(binding = 5) uniform sampler2D sampb2[10];
layout(binding = 80) uniform sampler2D sampb3; // ERROR, binding too big
layout(binding = 31) uniform sampler2D sampb4;
layout(binding = 79) uniform sampler2D sampb5[2]; // ERROR, binding too big

int fgfg(float f, mediump int i);
int fgfg(float f, highp int i);

out gl_PerVertex {
    float gl_ClipDistance[4];
};

patch in vec4 patchIn;              // ERROR
patch out vec4 patchOut;            // ERROR

void bar23444()
{
    mat4x3 m43;  \
    float a1 = m43[3].y;
    vec3 v3;
    int a2 = m43.length();
    a2 += m43[1].length();
    a2 += v3.length();
    const float b = 2 * a1;
    int a = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset;
}

const int comma0 = (2, 3);  // ERROR
int comma1[(2, 3)];   // ERROR

layout(r32i) uniform iimage2D iimg2D;
layout(rgba32i) uniform iimage2D iimg2Drgba;
layout(rgba32f) uniform image2D img2Drgba;
layout(r32ui) uniform uimage2D uimg2D;
uniform image2DMS img2DMS; // ERROR image variables not declared writeonly must have format layout qualifier
uniform writeonly image2DMS img2DMSWO;
void qux()
{
    int i = aoeu;
    imageAtomicCompSwap(iimg2D, ivec2(i,i), i, i);
    imageAtomicAdd(uimg2D, ivec2(i,i), uint(i));
    imageAtomicMin(iimg2Drgba, ivec2(i,i), i); // ERROR iimg2Drgba does not have r32i layout
    imageAtomicMax(img2Drgba, ivec2(i,i), i);  // ERROR img2Drgba is not integer image
    ivec4 pos = imageLoad(iimg2D, ivec2(i,i));
    vec4 col = imageLoad(img2DMS, ivec2(i,i), i);
    imageStore(img2DMSWO, ivec2(i,i), i, vec4(0));
    imageLoad(img2DMSWO, ivec2(i,i), i);       // ERROR, drops writeonly
}

volatile float vol; // ERROR, not an image
readonly int vol2;  // ERROR, not an image

void passr(coherent readonly iimage2D image)
{
}

layout(r32i) coherent readonly uniform iimage2D qualim1;
layout(r32i) coherent volatile readonly uniform iimage2D qualim2;

void passrc()
{
    passr(qualim1);
    passr(qualim2);   // ERROR, drops volatile
    passr(iimg2D);
}

layout(rg8i) uniform uimage2D i1bad;     // ERROR, type mismatch
layout(rgba32i) uniform image2D i2bad;   // ERROR, type mismatch
layout(rgba32f) uniform uimage2D i3bad;  // ERROR, type mismatch
layout(r8_snorm) uniform iimage2D i4bad; // ERROR, type mismatch
layout(rgba32ui) uniform iimage2D i5bad; // ERROR, type mismatch
layout(r8ui) uniform iimage2D i6bad;     // ERROR, type mismatch

uniform offcheck {
    layout(offset = 16) int foo;   // ERROR
} offcheckI;

uniform sampler1D samp1D;
uniform sampler1DShadow samp1Ds;

void qlod()
{
    int levels;

    levels = textureQueryLevels(samp1D);   // ERROR, not until 430
    levels = textureQueryLevels(samp1Ds);  // ERROR, not until 430
}