summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/glslang/src/Test/150.geom
blob: d2ff4eb15f0a41c1f16367ea010145faed413440 (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
#version 150 core

in fromVertex {
    in vec3 color;
} fromV[];

out toFragment {
    out vec3 color;
} toF;

out fromVertex {  // okay to reuse a block name for another block name
    vec3 color;
};

out fooB {
    vec2 color;
} fromVertex;     // ERROR, cannot reuse block name as block instance

int fromVertex;   // ERROR, cannot reuse a block name for something else

out fooC {
    vec2 color;
} fooC;           // ERROR, cannot have same name for block and instance name

void main()
{
    EmitVertex();
    EndPrimitive();
    EmitStreamVertex(1);    // ERROR
    EndStreamPrimitive(0);  // ERROR

    color = fromV[0].color;
    gl_ClipDistance[3] = gl_in[1].gl_ClipDistance[2];
    gl_Position = gl_in[0].gl_Position;
    gl_PointSize = gl_in[3].gl_PointSize;
    gl_PrimitiveID = gl_PrimitiveIDIn;
    gl_Layer = 2;
}

out vec4 ov0;  // stream should be 0
layout(stream = 4) out vec4 ov4;
out vec4 o1v0;  // stream should be 0

layout(stream = 3) uniform;        // ERROR
layout(stream = 3) in;             // ERROR
layout(stream = 3) uniform int ua; // ERROR
layout(stream = 3) uniform ubb { int ua; } ibb; // ERROR

layout(line_strip, points, triangle_strip, stream = 3, points, triangle_strip) out;  // just means "stream = 3, triangle_strip"
layout(stream = 3, triangle_strip) out;
out vec4 ov3;  // stream should be 3

layout(stream = 6) out ooutb { vec4 a; } ouuaa6;

layout(stream = 6) out ooutb2 {
    layout(stream = 6) vec4 a;
} ouua6;

layout(stream = 7) out ooutb3 {
    layout(stream = 6) vec4 a;  // ERROR
} ouua7;

out vec4 ov2s3;  // stream should be 3

layout(max_vertices = 200) out;
layout(max_vertices = 300) out;   // ERROR, too big
void foo(layout(max_vertices = 4) int a)  // ERROR
{
    ouuaa6.a = vec4(1.0);
}

layout(line_strip, points, triangle_strip, stream = 3, points) out;  // ERROR, changing output primitive
layout(line_strip, points, stream = 3) out; // ERROR, changing output primitive
layout(triangle_strip) in; // ERROR, not an input primitive
layout(triangle_strip) uniform; // ERROR
layout(triangle_strip) out vec4 badv4;  // ERROR, not on a variable
layout(triangle_strip) in vec4 bad2v4[];  // ERROR, not on a variable or input
layout(invocations = 3) out outbn { int a; }; // 2 ERROR, not on a block, not until 4.0
out outbn2 {
    layout(invocations = 3)  int a; // 2 ERRORs, not on a block member, not until 4.0
    layout(max_vertices = 3) int b; // ERROR, not on a block member
    layout(triangle_strip)   int c; // ERROR, not on a block member
} outbi;

layout(lines) out;  // ERROR, not on output
layout(lines_adjacency) in;
layout(triangles) in;             // ERROR, can't change it
layout(triangles_adjacency) in;   // ERROR, can't change it
layout(invocations = 4) in;       // ERROR, not until 4.0

in inbn {
    layout(stream = 2) int a;     // ERROR, stream on input
} inbi[];

in sameName {
    int a15;
} insn[];

out sameName {
    float f15;
};

uniform sameName {
    bool b15;
};

float summ = gl_MaxVertexAttribs +
             gl_MaxVertexUniformComponents +
             gl_MaxVaryingFloats +
             gl_MaxVaryingComponents +
             gl_MaxVertexOutputComponents  +
             gl_MaxGeometryInputComponents  +
             gl_MaxGeometryOutputComponents  +
             gl_MaxFragmentInputComponents  +
             gl_MaxVertexTextureImageUnits +
             gl_MaxCombinedTextureImageUnits +
             gl_MaxTextureImageUnits +
             gl_MaxFragmentUniformComponents +
             gl_MaxDrawBuffers +
             gl_MaxClipDistances  +
             gl_MaxGeometryTextureImageUnits +
             gl_MaxGeometryOutputVertices +
             gl_MaxGeometryTotalOutputComponents  +
             gl_MaxGeometryUniformComponents  +
             gl_MaxGeometryVaryingComponents;

void fooe1()
{
    gl_ViewportIndex = gl_MaxViewports - 1;
}

#extension GL_ARB_viewport_array : enable

void fooe2()
{
    gl_ViewportIndex = gl_MaxViewports - 1;
}

out int gl_ViewportIndex;