summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/glslang/src/Test/310.tesc
blob: f3df4b272798d78a6bc089a324d83c1221f7f7b4 (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
160
161
162
163
164
165
166
167
168
169
#version 310 es

#extension GL_OES_tessellation_shader : enable

layout(vertices = 4) out;
out int outa[gl_out.length()];

layout(quads) in;                   // ERROR
layout(ccw) out;                    // ERROR
layout(fractional_even_spacing) in; // ERROR

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

void main()
{
    barrier();

    int a = gl_MaxTessControlInputComponents +
            gl_MaxTessControlOutputComponents +
            gl_MaxTessControlTextureImageUnits +
            gl_MaxTessControlUniformComponents +
            gl_MaxTessControlTotalOutputComponents;

    vec4 p = gl_in[1].gl_Position;
    float ps = gl_in[1].gl_PointSize;        // ERROR, need point_size extension
    float cd = gl_in[1].gl_ClipDistance[2];  // ERROR, not in ES

    int pvi = gl_PatchVerticesIn;
    int pid = gl_PrimitiveID;
    int iid = gl_InvocationID;

    gl_out[gl_InvocationID].gl_Position = p;
    gl_out[gl_InvocationID].gl_PointSize = ps;        // ERROR, need point_size extension
    gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;  // ERROR, not in ES

    gl_TessLevelOuter[3] = 3.2;
    gl_TessLevelInner[1] = 1.3;

    if (a > 10)
        barrier();           // ERROR
    else
        barrier();           // ERROR

    barrier();

    do {
        barrier();           // ERROR
    } while (a > 10);

    switch (a) {
    default:
        barrier();           // ERROR
        break;
    }
    a < 12 ? a : (barrier(), a); // ERROR
    {
        barrier();
    }

    return;

    barrier();               // ERROR
}

layout(vertices = 4) in;    // ERROR, not on in
layout(vertices = 5) out;   // ERROR, changing #

void foo()
{
    gl_out[4].gl_Position;  // ERROR, out of range

    barrier();              // ERROR, not in main
}

in vec2 ina;                // ERROR, not array
in vec2 inb[];
in vec2 inc[18];            // ERROR, wrong size
in vec2 ind[gl_MaxPatchVertices];
patch out float implA[];    // ERROR, not sized

#extension GL_ARB_separate_shader_objects : enable

layout(location = 3) in vec4 ivla[];
layout(location = 4) in vec4 ivlb[];
layout(location = 4) in vec4 ivlc[];  // ERROR, overlapping

layout(location = 3) out vec4 ovla[];
layout(location = 4) out vec4 ovlb[];
layout(location = 4) out vec4 ovlc[];  // ERROR, overlapping

void foop()
{
    precise float d;                  // ERROR without gpu_shader5
    d = fma(d, d, d);                 // ERROR without gpu_shader5
}

patch out pinbn {
    int a;
} pinbi;

centroid out vec3 myColor2[];
centroid in vec3 centr[];
sample out vec4 perSampleColor[];   // ERROR without sample extensions

layout(vertices = 4) out float badlay[];   // ERROR, not on a variable
out float misSized[5];              // ERROR, size doesn't match
out float okaySize[4];

#extension GL_OES_tessellation_point_size : enable

void pointSize2()
{
    float ps = gl_in[1].gl_PointSize;
    gl_out[gl_InvocationID].gl_PointSize = ps;
}

#extension GL_OES_gpu_shader5 : enable

precise vec3 pv3;

void goodfoop()
{
    precise float d;

    pv3 *= pv3;
    pv3 = fma(pv3, pv3, pv3);
    d = fma(d, d, d);
}

void bbBad()
{
    gl_BoundingBoxOES;  // ERROR without GL_OES_primitive_bounding_box 
}

#extension GL_OES_primitive_bounding_box : enable

void bb()
{
    gl_BoundingBoxOES[0] = vec4(0.0);
    gl_BoundingBoxOES[1] = vec4(1.0);
    gl_BoundingBoxOES[2] = vec4(2.0);  // ERROR, overflow
}

out patch badpatchBName {  // ERROR, array size required
    float f;
} badpatchIName[];

out patch patchBName {
    float f;
} patchIName[4];

void outputtingOutparam(out int a)
{
    a = 2;
}

void outputting()
{
    outa[gl_InvocationID] = 2;
    outa[1] = 2;                         // ERROR, not gl_InvocationID
    gl_out[0].gl_Position = vec4(1.0);   // ERROR, not gl_InvocationID
    outa[1];
    gl_out[0];
    outputtingOutparam(outa[0]);         // ERROR, not gl_InvocationID
    outputtingOutparam(outa[gl_InvocationID]);
    patchIName[1].f = 3.14;
    outa[(gl_InvocationID)] = 2;
}