1617a3babSopenharmony_ci#version 150 core 2617a3babSopenharmony_ci 3617a3babSopenharmony_ciin fromVertex { 4617a3babSopenharmony_ci in vec3 color; 5617a3babSopenharmony_ci} fromV[]; 6617a3babSopenharmony_ci 7617a3babSopenharmony_ciout toFragment { 8617a3babSopenharmony_ci out vec3 color; 9617a3babSopenharmony_ci} toF; 10617a3babSopenharmony_ci 11617a3babSopenharmony_ciout fromVertex { // okay to reuse a block name for another block name 12617a3babSopenharmony_ci vec3 color; 13617a3babSopenharmony_ci}; 14617a3babSopenharmony_ci 15617a3babSopenharmony_ciout fooB { 16617a3babSopenharmony_ci vec2 color; 17617a3babSopenharmony_ci} fromVertex; // ERROR, cannot reuse block name as block instance 18617a3babSopenharmony_ci 19617a3babSopenharmony_ciint fromVertex; // ERROR, cannot reuse a block name for something else 20617a3babSopenharmony_ci 21617a3babSopenharmony_ciout fooC { 22617a3babSopenharmony_ci vec2 color; 23617a3babSopenharmony_ci} fooC; // ERROR, cannot have same name for block and instance name 24617a3babSopenharmony_ci 25617a3babSopenharmony_civoid main() 26617a3babSopenharmony_ci{ 27617a3babSopenharmony_ci EmitVertex(); 28617a3babSopenharmony_ci EndPrimitive(); 29617a3babSopenharmony_ci EmitStreamVertex(1); // ERROR 30617a3babSopenharmony_ci EndStreamPrimitive(0); // ERROR 31617a3babSopenharmony_ci 32617a3babSopenharmony_ci color = fromV[0].color; 33617a3babSopenharmony_ci gl_ClipDistance[3] = gl_in[1].gl_ClipDistance[2]; 34617a3babSopenharmony_ci gl_Position = gl_in[0].gl_Position; 35617a3babSopenharmony_ci gl_PointSize = gl_in[3].gl_PointSize; 36617a3babSopenharmony_ci gl_PrimitiveID = gl_PrimitiveIDIn; 37617a3babSopenharmony_ci gl_Layer = 2; 38617a3babSopenharmony_ci} 39617a3babSopenharmony_ci 40617a3babSopenharmony_ciout vec4 ov0; // stream should be 0 41617a3babSopenharmony_cilayout(stream = 4) out vec4 ov4; 42617a3babSopenharmony_ciout vec4 o1v0; // stream should be 0 43617a3babSopenharmony_ci 44617a3babSopenharmony_cilayout(stream = 3) uniform; // ERROR 45617a3babSopenharmony_cilayout(stream = 3) in; // ERROR 46617a3babSopenharmony_cilayout(stream = 3) uniform int ua; // ERROR 47617a3babSopenharmony_cilayout(stream = 3) uniform ubb { int ua; } ibb; // ERROR 48617a3babSopenharmony_ci 49617a3babSopenharmony_cilayout(line_strip, points, triangle_strip, stream = 3, points, triangle_strip) out; // just means "stream = 3, triangle_strip" 50617a3babSopenharmony_cilayout(stream = 3, triangle_strip) out; 51617a3babSopenharmony_ciout vec4 ov3; // stream should be 3 52617a3babSopenharmony_ci 53617a3babSopenharmony_cilayout(stream = 6) out ooutb { vec4 a; } ouuaa6; 54617a3babSopenharmony_ci 55617a3babSopenharmony_cilayout(stream = 6) out ooutb2 { 56617a3babSopenharmony_ci layout(stream = 6) vec4 a; 57617a3babSopenharmony_ci} ouua6; 58617a3babSopenharmony_ci 59617a3babSopenharmony_cilayout(stream = 7) out ooutb3 { 60617a3babSopenharmony_ci layout(stream = 6) vec4 a; // ERROR 61617a3babSopenharmony_ci} ouua7; 62617a3babSopenharmony_ci 63617a3babSopenharmony_ciout vec4 ov2s3; // stream should be 3 64617a3babSopenharmony_ci 65617a3babSopenharmony_cilayout(max_vertices = 200) out; 66617a3babSopenharmony_cilayout(max_vertices = 300) out; // ERROR, too big 67617a3babSopenharmony_civoid foo(layout(max_vertices = 4) int a) // ERROR 68617a3babSopenharmony_ci{ 69617a3babSopenharmony_ci ouuaa6.a = vec4(1.0); 70617a3babSopenharmony_ci} 71617a3babSopenharmony_ci 72617a3babSopenharmony_cilayout(line_strip, points, triangle_strip, stream = 3, points) out; // ERROR, changing output primitive 73617a3babSopenharmony_cilayout(line_strip, points, stream = 3) out; // ERROR, changing output primitive 74617a3babSopenharmony_cilayout(triangle_strip) in; // ERROR, not an input primitive 75617a3babSopenharmony_cilayout(triangle_strip) uniform; // ERROR 76617a3babSopenharmony_cilayout(triangle_strip) out vec4 badv4; // ERROR, not on a variable 77617a3babSopenharmony_cilayout(triangle_strip) in vec4 bad2v4[]; // ERROR, not on a variable or input 78617a3babSopenharmony_cilayout(invocations = 3) out outbn { int a; }; // 2 ERROR, not on a block, not until 4.0 79617a3babSopenharmony_ciout outbn2 { 80617a3babSopenharmony_ci layout(invocations = 3) int a; // 2 ERRORs, not on a block member, not until 4.0 81617a3babSopenharmony_ci layout(max_vertices = 3) int b; // ERROR, not on a block member 82617a3babSopenharmony_ci layout(triangle_strip) int c; // ERROR, not on a block member 83617a3babSopenharmony_ci} outbi; 84617a3babSopenharmony_ci 85617a3babSopenharmony_cilayout(lines) out; // ERROR, not on output 86617a3babSopenharmony_cilayout(lines_adjacency) in; 87617a3babSopenharmony_cilayout(triangles) in; // ERROR, can't change it 88617a3babSopenharmony_cilayout(triangles_adjacency) in; // ERROR, can't change it 89617a3babSopenharmony_cilayout(invocations = 4) in; // ERROR, not until 4.0 90617a3babSopenharmony_ci 91617a3babSopenharmony_ciin inbn { 92617a3babSopenharmony_ci layout(stream = 2) int a; // ERROR, stream on input 93617a3babSopenharmony_ci} inbi[]; 94617a3babSopenharmony_ci 95617a3babSopenharmony_ciin sameName { 96617a3babSopenharmony_ci int a15; 97617a3babSopenharmony_ci} insn[]; 98617a3babSopenharmony_ci 99617a3babSopenharmony_ciout sameName { 100617a3babSopenharmony_ci float f15; 101617a3babSopenharmony_ci}; 102617a3babSopenharmony_ci 103617a3babSopenharmony_ciuniform sameName { 104617a3babSopenharmony_ci bool b15; 105617a3babSopenharmony_ci}; 106617a3babSopenharmony_ci 107617a3babSopenharmony_cifloat summ = gl_MaxVertexAttribs + 108617a3babSopenharmony_ci gl_MaxVertexUniformComponents + 109617a3babSopenharmony_ci gl_MaxVaryingFloats + 110617a3babSopenharmony_ci gl_MaxVaryingComponents + 111617a3babSopenharmony_ci gl_MaxVertexOutputComponents + 112617a3babSopenharmony_ci gl_MaxGeometryInputComponents + 113617a3babSopenharmony_ci gl_MaxGeometryOutputComponents + 114617a3babSopenharmony_ci gl_MaxFragmentInputComponents + 115617a3babSopenharmony_ci gl_MaxVertexTextureImageUnits + 116617a3babSopenharmony_ci gl_MaxCombinedTextureImageUnits + 117617a3babSopenharmony_ci gl_MaxTextureImageUnits + 118617a3babSopenharmony_ci gl_MaxFragmentUniformComponents + 119617a3babSopenharmony_ci gl_MaxDrawBuffers + 120617a3babSopenharmony_ci gl_MaxClipDistances + 121617a3babSopenharmony_ci gl_MaxGeometryTextureImageUnits + 122617a3babSopenharmony_ci gl_MaxGeometryOutputVertices + 123617a3babSopenharmony_ci gl_MaxGeometryTotalOutputComponents + 124617a3babSopenharmony_ci gl_MaxGeometryUniformComponents + 125617a3babSopenharmony_ci gl_MaxGeometryVaryingComponents; 126617a3babSopenharmony_ci 127617a3babSopenharmony_civoid fooe1() 128617a3babSopenharmony_ci{ 129617a3babSopenharmony_ci gl_ViewportIndex = gl_MaxViewports - 1; 130617a3babSopenharmony_ci} 131617a3babSopenharmony_ci 132617a3babSopenharmony_ci#extension GL_ARB_viewport_array : enable 133617a3babSopenharmony_ci 134617a3babSopenharmony_civoid fooe2() 135617a3babSopenharmony_ci{ 136617a3babSopenharmony_ci gl_ViewportIndex = gl_MaxViewports - 1; 137617a3babSopenharmony_ci} 138617a3babSopenharmony_ci 139617a3babSopenharmony_ciout int gl_ViewportIndex; 140