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:
parent
cd77f8e922
commit
be70339296
@ -59,3 +59,12 @@ void foo23()
|
|||||||
uvec3 um3 = mix(uvec3(i), uvec3(i), bvec3(b));
|
uvec3 um3 = mix(uvec3(i), uvec3(i), bvec3(b));
|
||||||
ivec4 im4 = mix(ivec4(i), ivec4(i), bvec4(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;
|
||||||
|
|||||||
@ -8,3 +8,31 @@ layout(location = 2) uniform mat4 x;
|
|||||||
layout(location = 3) uniform mat4 y;
|
layout(location = 3) uniform mat4 y;
|
||||||
layout(location = 2) out mat4 xi;
|
layout(location = 2) out mat4 xi;
|
||||||
layout(location = 3) out mat4 yi; // ERROR, locations conflict with 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);
|
||||||
|
}
|
||||||
|
|||||||
@ -71,3 +71,31 @@ in inblockscalar {
|
|||||||
in inblocka {
|
in inblocka {
|
||||||
int a;
|
int a;
|
||||||
} inbla[17]; // ERROR, wrong array size
|
} 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);
|
||||||
|
}
|
||||||
|
|||||||
@ -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: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: 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
|
Shader version: 310
|
||||||
@ -203,6 +204,10 @@ ERROR: node is still EOpNull!
|
|||||||
0:? 'c2D' (smooth in mediump 2-component vector of float)
|
0:? 'c2D' (smooth in mediump 2-component vector of float)
|
||||||
0:? 'i' (uniform mediump int)
|
0:? 'i' (uniform mediump int)
|
||||||
0:? 'outp' (out mediump 4-component vector of float)
|
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:
|
Linked fragment stage:
|
||||||
@ -392,4 +397,8 @@ ERROR: node is still EOpNull!
|
|||||||
0:? 'c2D' (smooth in mediump 2-component vector of float)
|
0:? 'c2D' (smooth in mediump 2-component vector of float)
|
||||||
0:? 'i' (uniform mediump int)
|
0:? 'i' (uniform mediump int)
|
||||||
0:? 'outp' (out mediump 4-component vector of float)
|
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})
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,97 @@ ERROR: 4 compilation errors. No code generated.
|
|||||||
|
|
||||||
Shader version: 310
|
Shader version: 310
|
||||||
ERROR: node is still EOpNull!
|
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:? Linker Objects
|
||||||
0:? 's' (shared highp 4-component vector of float)
|
0:? 's' (shared highp 4-component vector of float)
|
||||||
0:? 'v' (buffer 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:
|
Linked vertex stage:
|
||||||
|
|
||||||
ERROR: Linking vertex stage: Missing entry point: Each stage requires one "void main()" entry point
|
|
||||||
|
|
||||||
Shader version: 310
|
Shader version: 310
|
||||||
ERROR: node is still EOpNull!
|
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:? Linker Objects
|
||||||
0:? 's' (shared highp 4-component vector of float)
|
0:? 's' (shared highp 4-component vector of float)
|
||||||
0:? 'v' (buffer highp 4-component vector of float)
|
0:? 'v' (buffer highp 4-component vector of float)
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
330.frag
|
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:27: 'block declaration' : cannot redeclare block: gl_block
|
||||||
ERROR: 0:31: 'gl_name' : identifiers starting with "gl_" are reserved
|
ERROR: 0:31: 'gl_name' : identifiers starting with "gl_" are reserved
|
||||||
ERROR: 0:32: 'gl_i' : identifiers starting with "gl_" are reserved
|
ERROR: 0:32: 'gl_i' : identifiers starting with "gl_" are reserved
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
330comp.frag
|
330comp.frag
|
||||||
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
|
|
||||||
|
|
||||||
Shader version: 330
|
Shader version: 330
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
|
|||||||
@ -73,6 +73,97 @@ ERROR: node is still EOpNull!
|
|||||||
0:50 3 (const int)
|
0:50 3 (const int)
|
||||||
0:51 Constant:
|
0:51 Constant:
|
||||||
0:51 3 (const int)
|
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:? Linker Objects
|
||||||
0:? 'bn' (in 3-element array of block{in int a})
|
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})
|
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:50 3 (const int)
|
||||||
0:51 Constant:
|
0:51 Constant:
|
||||||
0:51 3 (const int)
|
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:? Linker Objects
|
||||||
0:? 'bn' (in 3-element array of block{in int a})
|
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})
|
0:? 'gl_in' (in 3-element array of block{in 4-component vector of float gl_Position, in float gl_PointSize})
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
constErrors.frag
|
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:14: 'non-constant initializer' : not supported for this version or the enabled extensions
|
||||||
ERROR: 0:17: '' : constant expression required
|
ERROR: 0:17: '' : constant expression required
|
||||||
ERROR: 0:17: '' : array size must be a constant integer expression
|
ERROR: 0:17: '' : array size must be a constant integer expression
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
recurse1.vert
|
recurse1.vert
|
||||||
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
|
|
||||||
|
|
||||||
Shader version: 330
|
Shader version: 330
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
@ -70,7 +69,6 @@ Shader version: 330
|
|||||||
0:? 'gl_InstanceID' (gl_InstanceId int)
|
0:? 'gl_InstanceID' (gl_InstanceId int)
|
||||||
|
|
||||||
recurse1.frag
|
recurse1.frag
|
||||||
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
|
|
||||||
|
|
||||||
Shader version: 330
|
Shader version: 330
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
@ -159,7 +157,6 @@ Shader version: 330
|
|||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
|
|
||||||
recurse2.frag
|
recurse2.frag
|
||||||
Warning, version 330 is not yet complete; most version-specific features are present, but some are missing.
|
|
||||||
|
|
||||||
Shader version: 330
|
Shader version: 330
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
|
|||||||
38
Todo.txt
38
Todo.txt
@ -69,6 +69,17 @@ Shader Functionality to Implement/Finish
|
|||||||
+ implement non-inductive array accesses limitation detection
|
+ implement non-inductive array accesses limitation detection
|
||||||
ESSL 3.0
|
ESSL 3.0
|
||||||
- "const" compile-time constant propagation in the front-end has to be complete, for all built-in functions
|
- "const" compile-time constant propagation in the front-end has to be complete, for all built-in functions
|
||||||
|
ESSL 3.1
|
||||||
|
+ Compute shaders
|
||||||
|
+ Shader storage buffer objects
|
||||||
|
- Arrays of arrays
|
||||||
|
+ Atomic counters
|
||||||
|
+ Images
|
||||||
|
+ Separate program objects (also known as separate shader objects)
|
||||||
|
+ Explicit uniform locations
|
||||||
|
+ Texture gather
|
||||||
|
+ Bitfield operations
|
||||||
|
+ Integer mix function
|
||||||
GLSL 1.2
|
GLSL 1.2
|
||||||
+ Handle multiple compilation units per stage
|
+ Handle multiple compilation units per stage
|
||||||
+ Allow initializers on uniform declarations
|
+ Allow initializers on uniform declarations
|
||||||
@ -108,6 +119,9 @@ Shader Functionality to Implement/Finish
|
|||||||
+ Broaden structure usage to include geometry inputs and geometry outputs.
|
+ Broaden structure usage to include geometry inputs and geometry outputs.
|
||||||
+ texel offset limit checking
|
+ texel offset limit checking
|
||||||
+ 1.50: geometry shaders: max_vertices must be checked against gl_MaxGeometryOutputVertices (maybe at compile time)
|
+ 1.50: geometry shaders: max_vertices must be checked against gl_MaxGeometryOutputVertices (maybe at compile time)
|
||||||
|
GLSL 3.3
|
||||||
|
+ Add ARB_explicit_attrib_location extension
|
||||||
|
+ Add ARB_shader_bit_encoding extension
|
||||||
GLSL 4.0
|
GLSL 4.0
|
||||||
+ tessellation control stage and tessellation evaluation stage. Includes barrier() built-in for synchronization.
|
+ tessellation control stage and tessellation evaluation stage. Includes barrier() built-in for synchronization.
|
||||||
+ patch in, patch out
|
+ patch in, patch out
|
||||||
@ -179,8 +193,8 @@ Shader Functionality to Implement/Finish
|
|||||||
+ The const keyword can be used to declare variables within a function body with initializer expressions that are not constant expressions.
|
+ The const keyword can be used to declare variables within a function body with initializer expressions that are not constant expressions.
|
||||||
+ Qualifiers on variable declarations no longer have to follow a strict order. The layout qualifier can be used multiple times, and multiple parameter qualifiers can be used.
|
+ Qualifiers on variable declarations no longer have to follow a strict order. The layout qualifier can be used multiple times, and multiple parameter qualifiers can be used.
|
||||||
+ Parameter qualifiers can include precision and memory qualifiers.
|
+ Parameter qualifiers can include precision and memory qualifiers.
|
||||||
- Add a new atomic_uint type to support atomic counters. Also, add built-in functions for manipulating atomic counters.
|
+ Add a new atomic_uint type to support atomic counters. Also, add built-in functions for manipulating atomic counters.
|
||||||
- atomicCounterIncrement, atomicCounterDecrement, and atomicCounter
|
+ atomicCounterIncrement, atomicCounterDecrement, and atomicCounter
|
||||||
- Add layout qualifier identifiers binding and offset to bind units to sampler and image variable declarations, atomic counters, and uniform blocks.
|
- Add layout qualifier identifiers binding and offset to bind units to sampler and image variable declarations, atomic counters, and uniform blocks.
|
||||||
- Add built-in functions to pack/unpack 16 bit floating-point numbers (ARB_shading_language_pack2f).
|
- Add built-in functions to pack/unpack 16 bit floating-point numbers (ARB_shading_language_pack2f).
|
||||||
- packHalf2x16 and unpackHalf2x16
|
- packHalf2x16 and unpackHalf2x16
|
||||||
@ -196,11 +210,12 @@ Shader Functionality to Implement/Finish
|
|||||||
+ Use vec2 instead of vec3 for coordinate in textureGather*(sampler2DRect,...).
|
+ Use vec2 instead of vec3 for coordinate in textureGather*(sampler2DRect,...).
|
||||||
+ Clarify that textureGatherOffset() can take non-constants for the offsets.
|
+ Clarify that textureGatherOffset() can take non-constants for the offsets.
|
||||||
GLSL 4.3
|
GLSL 4.3
|
||||||
- Add shader storage buffer objects, as per the ARB_shader_storage_buffer_object extension. This includes
|
+ Add shader storage buffer objects, as per the ARB_shader_storage_buffer_object extension. This includes
|
||||||
+ allowing the last member of a storage buffer block to be an array that does not know its size until render time
|
+ allowing the last member of a storage buffer block to be an array that does not know its size until render time
|
||||||
- read/write memory shared with the application and other shader invocations
|
+ read/write memory shared with the application and other shader invocations
|
||||||
+ adding the std430 layout qualifier for shader storage blocks
|
+ adding the std430 layout qualifier for shader storage blocks
|
||||||
- add atomic built-ins
|
+ add atomic built-ins
|
||||||
|
+ layout(binding=)
|
||||||
- Allow .length() on all arrays; returning a compile-time constant or not, depending on how the
|
- Allow .length() on all arrays; returning a compile-time constant or not, depending on how the
|
||||||
array is sized, as per the ARB_shader_storage_buffer_object extension.
|
array is sized, as per the ARB_shader_storage_buffer_object extension.
|
||||||
- Be clear that implicit array sizing is only within a stage, not cross stage.
|
- Be clear that implicit array sizing is only within a stage, not cross stage.
|
||||||
@ -250,4 +265,15 @@ Shader Functionality to Implement/Finish
|
|||||||
transform feedback buffering.
|
transform feedback buffering.
|
||||||
+ Bug 10530: To be consistent with ES, include sample types as valid in a precision statement.
|
+ Bug 10530: To be consistent with ES, include sample types as valid in a precision statement.
|
||||||
Note the defaults are irrelevant, as precision qualifiers are not required or have any meaning.
|
Note the defaults are irrelevant, as precision qualifiers are not required or have any meaning.
|
||||||
|
GLSL 4.5
|
||||||
|
+ Incorporate the ARB_ES3_1_compatibility extension
|
||||||
|
+ Supports OpenGL ES 310 shaders.
|
||||||
|
+ Adds imageAtomicExchange() built-in function for floating-point images.
|
||||||
|
+ Adds coherent to atomic and image-atomic built-in function parameters.
|
||||||
|
+ Adds gl_HelperInvocation built-in variable to say whether a fragment shader invocation is
|
||||||
|
only as a helper, so the shader can skip code not needed or harmful when in a helper invocation.
|
||||||
|
+ Adds gl_MaxSamplesbuilt-in constant, and several other built-in constants.
|
||||||
|
+ Adds mix() built-in functions for selection of int, uint, andbool components.
|
||||||
|
+ Incorporate the GL_ARB_shader_texture_image_samples extension to query how many samples are in a multi-sample texture or image.
|
||||||
|
+ Incorporate the GL_ARB_cull_distance extensions to add the built-in variable gl_CullDistance[] , which will cull whole primitives.
|
||||||
|
+ Incorporate the GL_ARB_derivative_control extension
|
||||||
|
|||||||
@ -804,6 +804,93 @@ void TBuiltIns::initialize(int version, EProfile profile)
|
|||||||
"\n");
|
"\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bitfield
|
||||||
|
if ((profile == EEsProfile && version >= 310) ||
|
||||||
|
(profile != EEsProfile && version >= 400)) {
|
||||||
|
commonBuiltins.append(
|
||||||
|
" uint uaddCarry( uint, uint, out uint carry);"
|
||||||
|
"uvec2 uaddCarry(uvec2, uvec2, out uvec2 carry);"
|
||||||
|
"uvec3 uaddCarry(uvec3, uvec3, out uvec3 carry);"
|
||||||
|
"uvec4 uaddCarry(uvec4, uvec4, out uvec4 carry);"
|
||||||
|
|
||||||
|
" uint usubBorrow( uint, uint, out uint borrow);"
|
||||||
|
"uvec2 usubBorrow(uvec2, uvec2, out uvec2 borrow);"
|
||||||
|
"uvec3 usubBorrow(uvec3, uvec3, out uvec3 borrow);"
|
||||||
|
"uvec4 usubBorrow(uvec4, uvec4, out uvec4 borrow);"
|
||||||
|
|
||||||
|
"void umulExtended( uint, uint, out uint, out uint lsb);"
|
||||||
|
"void umulExtended(uvec2, uvec2, out uvec2, out uvec2 lsb);"
|
||||||
|
"void umulExtended(uvec3, uvec3, out uvec3, out uvec3 lsb);"
|
||||||
|
"void umulExtended(uvec4, uvec4, out uvec4, out uvec4 lsb);"
|
||||||
|
|
||||||
|
"void imulExtended( int, int, out int, out int lsb);"
|
||||||
|
"void imulExtended(ivec2, ivec2, out ivec2, out ivec2 lsb);"
|
||||||
|
"void imulExtended(ivec3, ivec3, out ivec3, out ivec3 lsb);"
|
||||||
|
"void imulExtended(ivec4, ivec4, out ivec4, out ivec4 lsb);"
|
||||||
|
|
||||||
|
" int bitfieldExtract( int, int, int);"
|
||||||
|
"ivec2 bitfieldExtract(ivec2, int, int);"
|
||||||
|
"ivec3 bitfieldExtract(ivec3, int, int);"
|
||||||
|
"ivec4 bitfieldExtract(ivec4, int, int);"
|
||||||
|
|
||||||
|
" uint bitfieldExtract( uint, int, int);"
|
||||||
|
"uvec2 bitfieldExtract(uvec2, int, int);"
|
||||||
|
"uvec3 bitfieldExtract(uvec3, int, int);"
|
||||||
|
"uvec4 bitfieldExtract(uvec4, int, int);"
|
||||||
|
|
||||||
|
" int bitfieldInsert( int base, int, int, int);"
|
||||||
|
"ivec2 bitfieldInsert(ivec2 base, ivec2, int, int);"
|
||||||
|
"ivec3 bitfieldInsert(ivec3 base, ivec3, int, int);"
|
||||||
|
"ivec4 bitfieldInsert(ivec4 base, ivec4, int, int);"
|
||||||
|
|
||||||
|
" uint bitfieldInsert( uint base, uint, int, int);"
|
||||||
|
"uvec2 bitfieldInsert(uvec2 base, uvec2, int, int);"
|
||||||
|
"uvec3 bitfieldInsert(uvec3 base, uvec3, int, int);"
|
||||||
|
"uvec4 bitfieldInsert(uvec4 base, uvec4, int, int);"
|
||||||
|
|
||||||
|
" int bitfieldReverse( int);"
|
||||||
|
"ivec2 bitfieldReverse(ivec2);"
|
||||||
|
"ivec3 bitfieldReverse(ivec3);"
|
||||||
|
"ivec4 bitfieldReverse(ivec4);"
|
||||||
|
|
||||||
|
" uint bitfieldReverse( uint);"
|
||||||
|
"uvec2 bitfieldReverse(uvec2);"
|
||||||
|
"uvec3 bitfieldReverse(uvec3);"
|
||||||
|
"uvec4 bitfieldReverse(uvec4);"
|
||||||
|
|
||||||
|
" int bitCount( int);"
|
||||||
|
"ivec2 bitCount(ivec2);"
|
||||||
|
"ivec3 bitCount(ivec3);"
|
||||||
|
"ivec4 bitCount(ivec4);"
|
||||||
|
|
||||||
|
" int bitCount( uint);"
|
||||||
|
"ivec2 bitCount(uvec2);"
|
||||||
|
"ivec3 bitCount(uvec3);"
|
||||||
|
"ivec4 bitCount(uvec4);"
|
||||||
|
|
||||||
|
" int findLSB( int);"
|
||||||
|
"ivec2 findLSB(ivec2);"
|
||||||
|
"ivec3 findLSB(ivec3);"
|
||||||
|
"ivec4 findLSB(ivec4);"
|
||||||
|
|
||||||
|
" int findLSB( uint);"
|
||||||
|
"ivec2 findLSB(uvec2);"
|
||||||
|
"ivec3 findLSB(uvec3);"
|
||||||
|
"ivec4 findLSB(uvec4);"
|
||||||
|
|
||||||
|
" int findMSB( int);"
|
||||||
|
"ivec2 findMSB(ivec2);"
|
||||||
|
"ivec3 findMSB(ivec3);"
|
||||||
|
"ivec4 findMSB(ivec4);"
|
||||||
|
|
||||||
|
" int findMSB( uint);"
|
||||||
|
"ivec2 findMSB(uvec2);"
|
||||||
|
"ivec3 findMSB(uvec3);"
|
||||||
|
"ivec4 findMSB(uvec4);"
|
||||||
|
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
//
|
//
|
||||||
// Prototypes for built-in functions seen by vertex shaders only.
|
// Prototypes for built-in functions seen by vertex shaders only.
|
||||||
@ -2556,7 +2643,6 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case EShLangCompute:
|
case EShLangCompute:
|
||||||
// TODO: 4.3 desktop functionality: compute special variables
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -58,9 +58,7 @@ namespace glslang {
|
|||||||
//
|
//
|
||||||
void TIntermMethod::traverse(TIntermTraverser* it)
|
void TIntermMethod::traverse(TIntermTraverser* it)
|
||||||
{
|
{
|
||||||
// Tree should always resolve all methods as constants
|
// Tree should always resolve all methods as a non-method.
|
||||||
|
|
||||||
// TODO: 4.3 functionality: some .length() will stay as methods
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TIntermSymbol::traverse(TIntermTraverser *it)
|
void TIntermSymbol::traverse(TIntermTraverser *it)
|
||||||
|
|||||||
@ -396,11 +396,11 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
|
|||||||
case 130:
|
case 130:
|
||||||
case 140:
|
case 140:
|
||||||
case 150:
|
case 150:
|
||||||
|
case 330:
|
||||||
// versions are complete
|
// versions are complete
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 310:
|
case 310:
|
||||||
case 330:
|
|
||||||
case 400:
|
case 400:
|
||||||
case 410:
|
case 410:
|
||||||
case 420:
|
case 420:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user