glslang -> SPV: improved support for do-while/continue. Contributed by David Neto (dneto@google.com).

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@31205 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich
2015-05-15 18:44:16 +00:00
parent 93dfbe1309
commit 593a3f7f6b
15 changed files with 473 additions and 20 deletions

View File

@@ -0,0 +1,62 @@
spv.do-simple.vert
Linked vertex stage:
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 26
Source GLSL 300
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4
Name 4 "main"
Name 9 "i"
Name 24 "gl_VertexID"
Name 25 "gl_InstanceID"
Decorate 9(i) PrecisionHigh
Decorate 24(gl_VertexID) PrecisionHigh
Decorate 24(gl_VertexID) BuiltIn VertexId
Decorate 24(gl_VertexID) NoStaticUse
Decorate 25(gl_InstanceID) PrecisionHigh
Decorate 25(gl_InstanceID) BuiltIn InstanceId
Decorate 25(gl_InstanceID) NoStaticUse
2: TypeVoid
3: TypeFunction 2
7: TypeInt 32 1
8: TypePointer Function 7(int)
10: 7(int) Constant 0
16: 7(int) Constant 1
19: 7(int) Constant 10
20: TypeBool
23: TypePointer Input 7(int)
24(gl_VertexID): 23(ptr) Variable Input
25(gl_InstanceID): 23(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(i): 8(ptr) Variable Function
Store 9(i) 10
Branch 11
11: Label
LoopMerge 12 None
Branch 13
13: Label
15: 7(int) Load 9(i)
17: 7(int) IAdd 15 16
Store 9(i) 17
Branch 14
14: Label
18: 7(int) Load 9(i)
21: 20(bool) SLessThan 18 19
BranchConditional 21 22 12
22: Label
Branch 11
12: Label
Branch 6
6: Label
Return
FunctionEnd

View File

@@ -0,0 +1,63 @@
spv.for-simple.vert
Linked vertex stage:
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 26
Source GLSL 300
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4
Name 4 "main"
Name 9 "i"
Name 18 "j"
Name 24 "gl_VertexID"
Name 25 "gl_InstanceID"
Decorate 9(i) PrecisionHigh
Decorate 18(j) PrecisionHigh
Decorate 24(gl_VertexID) PrecisionHigh
Decorate 24(gl_VertexID) BuiltIn VertexId
Decorate 24(gl_VertexID) NoStaticUse
Decorate 25(gl_InstanceID) PrecisionHigh
Decorate 25(gl_InstanceID) BuiltIn InstanceId
Decorate 25(gl_InstanceID) NoStaticUse
2: TypeVoid
3: TypeFunction 2
7: TypeInt 32 1
8: TypePointer Function 7(int)
10: 7(int) Constant 0
14: 7(int) Constant 10
15: TypeBool
19: 7(int) Constant 12
21: 7(int) Constant 1
23: TypePointer Input 7(int)
24(gl_VertexID): 23(ptr) Variable Input
25(gl_InstanceID): 23(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(i): 8(ptr) Variable Function
18(j): 8(ptr) Variable Function
Store 9(i) 10
Branch 11
11: Label
13: 7(int) Load 9(i)
16: 15(bool) SLessThan 13 14
LoopMerge 12 None
BranchConditional 16 17 12
17: Label
Store 18(j) 19
20: 7(int) Load 9(i)
22: 7(int) IAdd 20 21
Store 9(i) 22
Branch 11
12: Label
Branch 6
6: Label
Return
FunctionEnd

View File

@@ -0,0 +1,99 @@
spv.while-continue-break.vert
Linked vertex stage:
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 43
Source GLSL 300
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4
Name 4 "main"
Name 9 "i"
Name 18 "A"
Name 26 "B"
Name 28 "C"
Name 38 "D"
Name 41 "gl_VertexID"
Name 42 "gl_InstanceID"
Decorate 9(i) PrecisionHigh
Decorate 18(A) PrecisionHigh
Decorate 26(B) PrecisionHigh
Decorate 28(C) PrecisionHigh
Decorate 38(D) PrecisionHigh
Decorate 41(gl_VertexID) PrecisionHigh
Decorate 41(gl_VertexID) BuiltIn VertexId
Decorate 41(gl_VertexID) NoStaticUse
Decorate 42(gl_InstanceID) PrecisionHigh
Decorate 42(gl_InstanceID) BuiltIn InstanceId
Decorate 42(gl_InstanceID) NoStaticUse
2: TypeVoid
3: TypeFunction 2
7: TypeInt 32 1
8: TypePointer Function 7(int)
10: 7(int) Constant 0
14: 7(int) Constant 10
15: TypeBool
19: 7(int) Constant 1
21: 7(int) Constant 2
30: 7(int) Constant 5
39: 7(int) Constant 3
40: TypePointer Input 7(int)
41(gl_VertexID): 40(ptr) Variable Input
42(gl_InstanceID): 40(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(i): 8(ptr) Variable Function
18(A): 8(ptr) Variable Function
26(B): 8(ptr) Variable Function
28(C): 8(ptr) Variable Function
38(D): 8(ptr) Variable Function
Store 9(i) 10
Branch 11
11: Label
13: 7(int) Load 9(i)
16: 15(bool) SLessThan 13 14
LoopMerge 12 None
BranchConditional 16 17 12
17: Label
Store 18(A) 19
20: 7(int) Load 9(i)
22: 7(int) SMod 20 21
23: 15(bool) IEqual 22 10
SelectionMerge 25 None
BranchConditional 23 24 25
24: Label
Store 26(B) 21
Branch 11
27: Label
Store 28(C) 21
Branch 25
25: Label
29: 7(int) Load 9(i)
31: 7(int) SMod 29 30
32: 15(bool) IEqual 31 10
SelectionMerge 34 None
BranchConditional 32 33 34
33: Label
Store 26(B) 21
Branch 12
35: Label
Store 28(C) 21
Branch 34
34: Label
36: 7(int) Load 9(i)
37: 7(int) IAdd 36 19
Store 9(i) 37
Branch 11
12: Label
Store 38(D) 39
Branch 6
6: Label
Return
FunctionEnd

View File

@@ -0,0 +1,58 @@
spv.while-simple.vert
Linked vertex stage:
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 24
Source GLSL 300
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4
Name 4 "main"
Name 9 "i"
Name 22 "gl_VertexID"
Name 23 "gl_InstanceID"
Decorate 9(i) PrecisionHigh
Decorate 22(gl_VertexID) PrecisionHigh
Decorate 22(gl_VertexID) BuiltIn VertexId
Decorate 22(gl_VertexID) NoStaticUse
Decorate 23(gl_InstanceID) PrecisionHigh
Decorate 23(gl_InstanceID) BuiltIn InstanceId
Decorate 23(gl_InstanceID) NoStaticUse
2: TypeVoid
3: TypeFunction 2
7: TypeInt 32 1
8: TypePointer Function 7(int)
10: 7(int) Constant 0
14: 7(int) Constant 10
15: TypeBool
19: 7(int) Constant 1
21: TypePointer Input 7(int)
22(gl_VertexID): 21(ptr) Variable Input
23(gl_InstanceID): 21(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(i): 8(ptr) Variable Function
Store 9(i) 10
Branch 11
11: Label
13: 7(int) Load 9(i)
16: 15(bool) SLessThan 13 14
LoopMerge 12 None
BranchConditional 16 17 12
17: Label
18: 7(int) Load 9(i)
20: 7(int) IAdd 18 19
Store 9(i) 20
Branch 11
12: Label
Branch 6
6: Label
Return
FunctionEnd

View File

@@ -36,6 +36,16 @@ if [ -a localtestlist ]
done < localtestlist
fi
#
# SPIR-V code generation tests
#
grep -v "^#" test-spirv-list | while read t; do
echo Running SPIR-V $t...
b=`basename $t`
$EXE -H $t > $TARGETDIR/$b.out
diff -b $BASEDIR/$b.out $TARGETDIR/$b.out
done
#
# grouped shaders for bulk (faster) tests
#

7
Test/spv.do-simple.vert Normal file
View File

@@ -0,0 +1,7 @@
#version 300 es
void main() {
int i = 0;
do {
i++;
} while(i<10);
}

View File

@@ -0,0 +1,20 @@
#version 300 es
void main() {
int i = 0;
int A, B, C, D, E, F, G;
do {
A = 0;
if (i == 2) {
B = 1;
continue;
C = 2;
}
if (i == 5) {
D = 3;
break;
E = 42;
}
F = 99;
} while (++i < 19);
G = 12;
}

View File

@@ -0,0 +1,20 @@
#version 300 es
void main() {
int i;
int A, B, C, D, E, F, G;
for (i=0; i < 10 ; i++) {
A = 1;
if (i%2 ==0) {
B = 1;
continue;
C = 1;
}
if (i%3 == 0) {
D = 1;
break;
E = 1;
}
F = 12;
}
G = 99;
}

8
Test/spv.for-simple.vert Normal file
View File

@@ -0,0 +1,8 @@
#version 300 es
void main() {
int i;
int j;
for (i=0; i < 10 ; i++) {
j = 12;
}
}

View File

@@ -0,0 +1,20 @@
#version 300 es
void main() {
int i = 0;
int A, B, C, D;
while (i<10) {
A = 1;
if (i%2 == 0) {
B = 2;
continue;
C = 2;
}
if (i%5 == 0) {
B = 2;
break;
C = 2;
}
i++;
}
D = 3;
}

View File

@@ -0,0 +1,7 @@
#version 300 es
void main() {
int i = 0;
while (i<10) {
i++;
}
}

9
Test/test-spirv-list Normal file
View File

@@ -0,0 +1,9 @@
# Test looping constructs.
# No tests yet for making sure break and continue from a nested loop
# goes to the innermost target.
spv.do-simple.vert
spv.do-while-continue-break.vert
spv.for-continue-break.vert
spv.for-simple.vert
spv.while-continue-break.vert
spv.while-simple.vert