Add the bitField built-in functions. Mark 330 as being complete.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@27728 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich
2014-08-13 20:04:19 +00:00
parent cd77f8e922
commit be70339296
14 changed files with 560 additions and 19 deletions

View File

@@ -59,3 +59,12 @@ void foo23()
uvec3 um3 = mix(uvec3(i), uvec3(i), bvec3(b));
ivec4 im4 = mix(ivec4(i), ivec4(i), bvec4(b));
}
layout(binding=3) uniform sampler2D s1;
layout(binding=3) uniform sampler2D s2; // ERROR: overlapping bindings? Don't see that in the 310 spec.
layout(binding=2) uniform writeonly image2D i2D;
layout(binding = 1) uniform bb {
int foo;
layout(binding = 2) float f; // ERROR
} bbi;

View File

@@ -8,3 +8,31 @@ layout(location = 2) uniform mat4 x;
layout(location = 3) uniform mat4 y;
layout(location = 2) out mat4 xi;
layout(location = 3) out mat4 yi; // ERROR, locations conflict with xi
void main()
{
uvec2 u2;
u2 = uaddCarry(u2, u2, u2);
uint u1;
u1 = usubBorrow(u1, u1, u1);
uvec4 u4;
umulExtended(u4, u4, u4, u4);
ivec4 i4;
imulExtended(i4, i4, i4, i4);
int i1;
i1 = bitfieldExtract(i1, 4, 5);
uvec3 u3;
u3 = bitfieldExtract(u3, 4, 5);
ivec3 i3;
i3 = bitfieldInsert(i3, i3, 4, 5);
u1 = bitfieldInsert(u1, u1, 4, 5);
ivec2 i2;
i2 = bitfieldReverse(i2);
u4 = bitfieldReverse(u4);
i1 = bitCount(i1);
i3 = bitCount(u3);
i2 = findLSB(i2);
i4 = findLSB(u4);
i1 = findMSB(i1);
i2 = findMSB(u2);
}

View File

@@ -71,3 +71,31 @@ in inblockscalar {
in inblocka {
int a;
} inbla[17]; // ERROR, wrong array size
void bits()
{
uvec2 u2;
u2 = uaddCarry(u2, u2, u2);
uint u1;
u1 = usubBorrow(u1, u1, u1);
uvec4 u4;
umulExtended(u4, u4, u4, u4);
ivec4 i4;
imulExtended(i4, i4, i4, i4);
int i1;
i1 = bitfieldExtract(i1, 4, 5);
uvec3 u3;
u3 = bitfieldExtract(u3, 4, 5);
ivec3 i3;
i3 = bitfieldInsert(i3, i3, 4, 5);
u1 = bitfieldInsert(u1, u1, 4, 5);
ivec2 i2;
i2 = bitfieldReverse(i2);
u4 = bitfieldReverse(u4);
i1 = bitCount(i1);
i3 = bitCount(u3);
i2 = findLSB(i2);
i4 = findLSB(u4);
i1 = findMSB(i1);
i2 = findMSB(u2);
}

View File

@@ -16,7 +16,8 @@ ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset,
ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
ERROR: 16 compilation errors. No code generated.
ERROR: 0:69: 'binding' : requires block, or sampler/image, or atomic-counter type
ERROR: 17 compilation errors. No code generated.
Shader version: 310
@@ -203,6 +204,10 @@ ERROR: node is still EOpNull!
0:? 'c2D' (smooth in mediump 2-component vector of float)
0:? 'i' (uniform mediump int)
0:? 'outp' (out mediump 4-component vector of float)
0:? 's1' (layout(binding=3 ) uniform highp sampler2D)
0:? 's2' (layout(binding=3 ) uniform highp sampler2D)
0:? 'i2D' (layout(binding=2 ) writeonly uniform highp image2D)
0:? 'bbi' (layout(binding=1 column_major shared ) uniform block{layout(column_major shared ) uniform mediump int foo, layout(binding=2 column_major shared ) uniform mediump float f})
Linked fragment stage:
@@ -392,4 +397,8 @@ ERROR: node is still EOpNull!
0:? 'c2D' (smooth in mediump 2-component vector of float)
0:? 'i' (uniform mediump int)
0:? 'outp' (out mediump 4-component vector of float)
0:? 's1' (layout(binding=3 ) uniform highp sampler2D)
0:? 's2' (layout(binding=3 ) uniform highp sampler2D)
0:? 'i2D' (layout(binding=2 ) writeonly uniform highp image2D)
0:? 'bbi' (layout(binding=1 column_major shared ) uniform block{layout(column_major shared ) uniform mediump int foo, layout(binding=2 column_major shared ) uniform mediump float f})

View File

@@ -9,6 +9,97 @@ ERROR: 4 compilation errors. No code generated.
Shader version: 310
ERROR: node is still EOpNull!
0:12 Function Definition: main( (void)
0:12 Function Parameters:
0:? Sequence
0:15 move second child to first child (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:15 Function Call: uaddCarry(vu2;vu2;vu2; (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:17 move second child to first child (highp uint)
0:17 'u1' (highp uint)
0:17 Function Call: usubBorrow(u1;u1;u1; (highp uint)
0:17 'u1' (highp uint)
0:17 'u1' (highp uint)
0:17 'u1' (highp uint)
0:19 Function Call: umulExtended(vu4;vu4;vu4;vu4; (void)
0:19 'u4' (highp 4-component vector of uint)
0:19 'u4' (highp 4-component vector of uint)
0:19 'u4' (highp 4-component vector of uint)
0:19 'u4' (highp 4-component vector of uint)
0:21 Function Call: imulExtended(vi4;vi4;vi4;vi4; (void)
0:21 'i4' (highp 4-component vector of int)
0:21 'i4' (highp 4-component vector of int)
0:21 'i4' (highp 4-component vector of int)
0:21 'i4' (highp 4-component vector of int)
0:23 move second child to first child (highp int)
0:23 'i1' (highp int)
0:23 Function Call: bitfieldExtract(i1;i1;i1; (highp int)
0:23 'i1' (highp int)
0:23 Constant:
0:23 4 (const int)
0:23 Constant:
0:23 5 (const int)
0:25 move second child to first child (highp 3-component vector of uint)
0:25 'u3' (highp 3-component vector of uint)
0:25 Function Call: bitfieldExtract(vu3;i1;i1; (highp 3-component vector of uint)
0:25 'u3' (highp 3-component vector of uint)
0:25 Constant:
0:25 4 (const int)
0:25 Constant:
0:25 5 (const int)
0:27 move second child to first child (highp 3-component vector of int)
0:27 'i3' (highp 3-component vector of int)
0:27 Function Call: bitfieldInsert(vi3;vi3;i1;i1; (highp 3-component vector of int)
0:27 'i3' (highp 3-component vector of int)
0:27 'i3' (highp 3-component vector of int)
0:27 Constant:
0:27 4 (const int)
0:27 Constant:
0:27 5 (const int)
0:28 move second child to first child (highp uint)
0:28 'u1' (highp uint)
0:28 Function Call: bitfieldInsert(u1;u1;i1;i1; (highp uint)
0:28 'u1' (highp uint)
0:28 'u1' (highp uint)
0:28 Constant:
0:28 4 (const int)
0:28 Constant:
0:28 5 (const int)
0:30 move second child to first child (highp 2-component vector of int)
0:30 'i2' (highp 2-component vector of int)
0:30 Function Call: bitfieldReverse(vi2; (highp 2-component vector of int)
0:30 'i2' (highp 2-component vector of int)
0:31 move second child to first child (highp 4-component vector of uint)
0:31 'u4' (highp 4-component vector of uint)
0:31 Function Call: bitfieldReverse(vu4; (highp 4-component vector of uint)
0:31 'u4' (highp 4-component vector of uint)
0:32 move second child to first child (highp int)
0:32 'i1' (highp int)
0:32 Function Call: bitCount(i1; (highp int)
0:32 'i1' (highp int)
0:33 move second child to first child (highp 3-component vector of int)
0:33 'i3' (highp 3-component vector of int)
0:33 Function Call: bitCount(vu3; (highp 3-component vector of int)
0:33 'u3' (highp 3-component vector of uint)
0:34 move second child to first child (highp 2-component vector of int)
0:34 'i2' (highp 2-component vector of int)
0:34 Function Call: findLSB(vi2; (highp 2-component vector of int)
0:34 'i2' (highp 2-component vector of int)
0:35 move second child to first child (highp 4-component vector of int)
0:35 'i4' (highp 4-component vector of int)
0:35 Function Call: findLSB(vu4; (highp 4-component vector of int)
0:35 'u4' (highp 4-component vector of uint)
0:36 move second child to first child (highp int)
0:36 'i1' (highp int)
0:36 Function Call: findMSB(i1; (highp int)
0:36 'i1' (highp int)
0:37 move second child to first child (highp 2-component vector of int)
0:37 'i2' (highp 2-component vector of int)
0:37 Function Call: findMSB(vu2; (highp 2-component vector of int)
0:37 'u2' (highp 2-component vector of uint)
0:? Linker Objects
0:? 's' (shared highp 4-component vector of float)
0:? 'v' (buffer highp 4-component vector of float)
@@ -22,10 +113,100 @@ ERROR: node is still EOpNull!
Linked vertex stage:
ERROR: Linking vertex stage: Missing entry point: Each stage requires one "void main()" entry point
Shader version: 310
ERROR: node is still EOpNull!
0:12 Function Definition: main( (void)
0:12 Function Parameters:
0:? Sequence
0:15 move second child to first child (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:15 Function Call: uaddCarry(vu2;vu2;vu2; (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:15 'u2' (highp 2-component vector of uint)
0:17 move second child to first child (highp uint)
0:17 'u1' (highp uint)
0:17 Function Call: usubBorrow(u1;u1;u1; (highp uint)
0:17 'u1' (highp uint)
0:17 'u1' (highp uint)
0:17 'u1' (highp uint)
0:19 Function Call: umulExtended(vu4;vu4;vu4;vu4; (void)
0:19 'u4' (highp 4-component vector of uint)
0:19 'u4' (highp 4-component vector of uint)
0:19 'u4' (highp 4-component vector of uint)
0:19 'u4' (highp 4-component vector of uint)
0:21 Function Call: imulExtended(vi4;vi4;vi4;vi4; (void)
0:21 'i4' (highp 4-component vector of int)
0:21 'i4' (highp 4-component vector of int)
0:21 'i4' (highp 4-component vector of int)
0:21 'i4' (highp 4-component vector of int)
0:23 move second child to first child (highp int)
0:23 'i1' (highp int)
0:23 Function Call: bitfieldExtract(i1;i1;i1; (highp int)
0:23 'i1' (highp int)
0:23 Constant:
0:23 4 (const int)
0:23 Constant:
0:23 5 (const int)
0:25 move second child to first child (highp 3-component vector of uint)
0:25 'u3' (highp 3-component vector of uint)
0:25 Function Call: bitfieldExtract(vu3;i1;i1; (highp 3-component vector of uint)
0:25 'u3' (highp 3-component vector of uint)
0:25 Constant:
0:25 4 (const int)
0:25 Constant:
0:25 5 (const int)
0:27 move second child to first child (highp 3-component vector of int)
0:27 'i3' (highp 3-component vector of int)
0:27 Function Call: bitfieldInsert(vi3;vi3;i1;i1; (highp 3-component vector of int)
0:27 'i3' (highp 3-component vector of int)
0:27 'i3' (highp 3-component vector of int)
0:27 Constant:
0:27 4 (const int)
0:27 Constant:
0:27 5 (const int)
0:28 move second child to first child (highp uint)
0:28 'u1' (highp uint)
0:28 Function Call: bitfieldInsert(u1;u1;i1;i1; (highp uint)
0:28 'u1' (highp uint)
0:28 'u1' (highp uint)
0:28 Constant:
0:28 4 (const int)
0:28 Constant:
0:28 5 (const int)
0:30 move second child to first child (highp 2-component vector of int)
0:30 'i2' (highp 2-component vector of int)
0:30 Function Call: bitfieldReverse(vi2; (highp 2-component vector of int)
0:30 'i2' (highp 2-component vector of int)
0:31 move second child to first child (highp 4-component vector of uint)
0:31 'u4' (highp 4-component vector of uint)
0:31 Function Call: bitfieldReverse(vu4; (highp 4-component vector of uint)
0:31 'u4' (highp 4-component vector of uint)
0:32 move second child to first child (highp int)
0:32 'i1' (highp int)
0:32 Function Call: bitCount(i1; (highp int)
0:32 'i1' (highp int)
0:33 move second child to first child (highp 3-component vector of int)
0:33 'i3' (highp 3-component vector of int)
0:33 Function Call: bitCount(vu3; (highp 3-component vector of int)
0:33 'u3' (highp 3-component vector of uint)
0:34 move second child to first child (highp 2-component vector of int)
0:34 'i2' (highp 2-component vector of int)
0:34 Function Call: findLSB(vi2; (highp 2-component vector of int)
0:34 'i2' (highp 2-component vector of int)
0:35 move second child to first child (highp 4-component vector of int)
0:35 'i4' (highp 4-component vector of int)
0:35 Function Call: findLSB(vu4; (highp 4-component vector of int)
0:35 'u4' (highp 4-component vector of uint)
0:36 move second child to first child (highp int)
0:36 'i1' (highp int)
0:36 Function Call: findMSB(i1; (highp int)
0:36 'i1' (highp int)
0:37 move second child to first child (highp 2-component vector of int)
0:37 'i2' (highp 2-component vector of int)
0:37 Function Call: findMSB(vu2; (highp 2-component vector of int)
0:37 'u2' (highp 2-component vector of uint)
0:? Linker Objects
0:? 's' (shared highp 4-component vector of float)
0:? 'v' (buffer highp 4-component vector of float)

View File

@@ -1,5 +1,4 @@
330.frag
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:27: 'block declaration' : cannot redeclare block: gl_block
ERROR: 0:31: 'gl_name' : identifiers starting with "gl_" are reserved
ERROR: 0:32: 'gl_i' : identifiers starting with "gl_" are reserved

View File

@@ -1,5 +1,4 @@
330comp.frag
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
Shader version: 330
0:? Sequence

View File

@@ -73,6 +73,97 @@ ERROR: node is still EOpNull!
0:50 3 (const int)
0:51 Constant:
0:51 3 (const int)
0:75 Function Definition: bits( (void)
0:75 Function Parameters:
0:? Sequence
0:78 move second child to first child (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:78 Function Call: uaddCarry(vu2;vu2;vu2; (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:80 move second child to first child (uint)
0:80 'u1' (uint)
0:80 Function Call: usubBorrow(u1;u1;u1; (uint)
0:80 'u1' (uint)
0:80 'u1' (uint)
0:80 'u1' (uint)
0:82 Function Call: umulExtended(vu4;vu4;vu4;vu4; (void)
0:82 'u4' (4-component vector of uint)
0:82 'u4' (4-component vector of uint)
0:82 'u4' (4-component vector of uint)
0:82 'u4' (4-component vector of uint)
0:84 Function Call: imulExtended(vi4;vi4;vi4;vi4; (void)
0:84 'i4' (4-component vector of int)
0:84 'i4' (4-component vector of int)
0:84 'i4' (4-component vector of int)
0:84 'i4' (4-component vector of int)
0:86 move second child to first child (int)
0:86 'i1' (int)
0:86 Function Call: bitfieldExtract(i1;i1;i1; (int)
0:86 'i1' (int)
0:86 Constant:
0:86 4 (const int)
0:86 Constant:
0:86 5 (const int)
0:88 move second child to first child (3-component vector of uint)
0:88 'u3' (3-component vector of uint)
0:88 Function Call: bitfieldExtract(vu3;i1;i1; (3-component vector of uint)
0:88 'u3' (3-component vector of uint)
0:88 Constant:
0:88 4 (const int)
0:88 Constant:
0:88 5 (const int)
0:90 move second child to first child (3-component vector of int)
0:90 'i3' (3-component vector of int)
0:90 Function Call: bitfieldInsert(vi3;vi3;i1;i1; (3-component vector of int)
0:90 'i3' (3-component vector of int)
0:90 'i3' (3-component vector of int)
0:90 Constant:
0:90 4 (const int)
0:90 Constant:
0:90 5 (const int)
0:91 move second child to first child (uint)
0:91 'u1' (uint)
0:91 Function Call: bitfieldInsert(u1;u1;i1;i1; (uint)
0:91 'u1' (uint)
0:91 'u1' (uint)
0:91 Constant:
0:91 4 (const int)
0:91 Constant:
0:91 5 (const int)
0:93 move second child to first child (2-component vector of int)
0:93 'i2' (2-component vector of int)
0:93 Function Call: bitfieldReverse(vi2; (2-component vector of int)
0:93 'i2' (2-component vector of int)
0:94 move second child to first child (4-component vector of uint)
0:94 'u4' (4-component vector of uint)
0:94 Function Call: bitfieldReverse(vu4; (4-component vector of uint)
0:94 'u4' (4-component vector of uint)
0:95 move second child to first child (int)
0:95 'i1' (int)
0:95 Function Call: bitCount(i1; (int)
0:95 'i1' (int)
0:96 move second child to first child (3-component vector of int)
0:96 'i3' (3-component vector of int)
0:96 Function Call: bitCount(vu3; (3-component vector of int)
0:96 'u3' (3-component vector of uint)
0:97 move second child to first child (2-component vector of int)
0:97 'i2' (2-component vector of int)
0:97 Function Call: findLSB(vi2; (2-component vector of int)
0:97 'i2' (2-component vector of int)
0:98 move second child to first child (4-component vector of int)
0:98 'i4' (4-component vector of int)
0:98 Function Call: findLSB(vu4; (4-component vector of int)
0:98 'u4' (4-component vector of uint)
0:99 move second child to first child (int)
0:99 'i1' (int)
0:99 Function Call: findMSB(i1; (int)
0:99 'i1' (int)
0:100 move second child to first child (2-component vector of int)
0:100 'i2' (2-component vector of int)
0:100 Function Call: findMSB(vu2; (2-component vector of int)
0:100 'u2' (2-component vector of uint)
0:? Linker Objects
0:? 'bn' (in 3-element array of block{in int a})
0:? 'gl_in' (in 3-element array of block{in 4-component vector of float gl_Position, in float gl_PointSize})
@@ -147,6 +238,97 @@ ERROR: node is still EOpNull!
0:50 3 (const int)
0:51 Constant:
0:51 3 (const int)
0:75 Function Definition: bits( (void)
0:75 Function Parameters:
0:? Sequence
0:78 move second child to first child (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:78 Function Call: uaddCarry(vu2;vu2;vu2; (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:78 'u2' (2-component vector of uint)
0:80 move second child to first child (uint)
0:80 'u1' (uint)
0:80 Function Call: usubBorrow(u1;u1;u1; (uint)
0:80 'u1' (uint)
0:80 'u1' (uint)
0:80 'u1' (uint)
0:82 Function Call: umulExtended(vu4;vu4;vu4;vu4; (void)
0:82 'u4' (4-component vector of uint)
0:82 'u4' (4-component vector of uint)
0:82 'u4' (4-component vector of uint)
0:82 'u4' (4-component vector of uint)
0:84 Function Call: imulExtended(vi4;vi4;vi4;vi4; (void)
0:84 'i4' (4-component vector of int)
0:84 'i4' (4-component vector of int)
0:84 'i4' (4-component vector of int)
0:84 'i4' (4-component vector of int)
0:86 move second child to first child (int)
0:86 'i1' (int)
0:86 Function Call: bitfieldExtract(i1;i1;i1; (int)
0:86 'i1' (int)
0:86 Constant:
0:86 4 (const int)
0:86 Constant:
0:86 5 (const int)
0:88 move second child to first child (3-component vector of uint)
0:88 'u3' (3-component vector of uint)
0:88 Function Call: bitfieldExtract(vu3;i1;i1; (3-component vector of uint)
0:88 'u3' (3-component vector of uint)
0:88 Constant:
0:88 4 (const int)
0:88 Constant:
0:88 5 (const int)
0:90 move second child to first child (3-component vector of int)
0:90 'i3' (3-component vector of int)
0:90 Function Call: bitfieldInsert(vi3;vi3;i1;i1; (3-component vector of int)
0:90 'i3' (3-component vector of int)
0:90 'i3' (3-component vector of int)
0:90 Constant:
0:90 4 (const int)
0:90 Constant:
0:90 5 (const int)
0:91 move second child to first child (uint)
0:91 'u1' (uint)
0:91 Function Call: bitfieldInsert(u1;u1;i1;i1; (uint)
0:91 'u1' (uint)
0:91 'u1' (uint)
0:91 Constant:
0:91 4 (const int)
0:91 Constant:
0:91 5 (const int)
0:93 move second child to first child (2-component vector of int)
0:93 'i2' (2-component vector of int)
0:93 Function Call: bitfieldReverse(vi2; (2-component vector of int)
0:93 'i2' (2-component vector of int)
0:94 move second child to first child (4-component vector of uint)
0:94 'u4' (4-component vector of uint)
0:94 Function Call: bitfieldReverse(vu4; (4-component vector of uint)
0:94 'u4' (4-component vector of uint)
0:95 move second child to first child (int)
0:95 'i1' (int)
0:95 Function Call: bitCount(i1; (int)
0:95 'i1' (int)
0:96 move second child to first child (3-component vector of int)
0:96 'i3' (3-component vector of int)
0:96 Function Call: bitCount(vu3; (3-component vector of int)
0:96 'u3' (3-component vector of uint)
0:97 move second child to first child (2-component vector of int)
0:97 'i2' (2-component vector of int)
0:97 Function Call: findLSB(vi2; (2-component vector of int)
0:97 'i2' (2-component vector of int)
0:98 move second child to first child (4-component vector of int)
0:98 'i4' (4-component vector of int)
0:98 Function Call: findLSB(vu4; (4-component vector of int)
0:98 'u4' (4-component vector of uint)
0:99 move second child to first child (int)
0:99 'i1' (int)
0:99 Function Call: findMSB(i1; (int)
0:99 'i1' (int)
0:100 move second child to first child (2-component vector of int)
0:100 'i2' (2-component vector of int)
0:100 Function Call: findMSB(vu2; (2-component vector of int)
0:100 'u2' (2-component vector of uint)
0:? Linker Objects
0:? 'bn' (in 3-element array of block{in int a})
0:? 'gl_in' (in 3-element array of block{in 4-component vector of float gl_Position, in float gl_PointSize})

View File

@@ -1,5 +1,4 @@
constErrors.frag
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:14: 'non-constant initializer' : not supported for this version or the enabled extensions
ERROR: 0:17: '' : constant expression required
ERROR: 0:17: '' : array size must be a constant integer expression

View File

@@ -1,5 +1,4 @@
recurse1.vert
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
Shader version: 330
0:? Sequence
@@ -70,7 +69,6 @@ Shader version: 330
0:? 'gl_InstanceID' (gl_InstanceId int)
recurse1.frag
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
Shader version: 330
0:? Sequence
@@ -159,7 +157,6 @@ Shader version: 330
0:? Linker Objects
recurse2.frag
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
Shader version: 330
0:? Sequence