Add new test case for image functions and fix issues caught by this test

This commit is contained in:
Rex Xu
2015-09-16 17:48:22 +08:00
parent bba5c80957
commit 6b86d496c2
14 changed files with 750 additions and 158 deletions

View File

@@ -8,7 +8,7 @@ Linked compute stage:
TBD functionality: Is atomic_uint an opaque handle in the uniform storage class, or an addresses in the atomic storage class?
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 74
// Id's are bound by 64
Source ESSL 310
Capability Shader
@@ -19,108 +19,98 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
Name 10 "func(au1;"
Name 9 "c"
Name 12 "atoms("
Name 21 "counter"
Name 22 "param"
Name 25 "val"
Name 29 "countArr"
Name 38 "origi"
Name 40 "atomi"
Name 44 "origu"
Name 46 "atomu"
Name 48 "value"
Name 71 "arrX"
Name 72 "arrY"
Name 73 "arrZ"
Decorate 21(counter) Binding 0
Decorate 29(countArr) Binding 0
Decorate 71(arrX) NoStaticUse
Decorate 72(arrY) NoStaticUse
Decorate 73(arrZ) NoStaticUse
Name 20 "counter"
Name 21 "param"
Name 24 "val"
Name 28 "countArr"
Name 35 "origi"
Name 37 "atomi"
Name 40 "origu"
Name 42 "atomu"
Name 44 "value"
Name 61 "arrX"
Name 62 "arrY"
Name 63 "arrZ"
Decorate 20(counter) Binding 0
Decorate 28(countArr) Binding 0
Decorate 61(arrX) NoStaticUse
Decorate 62(arrY) NoStaticUse
Decorate 63(arrZ) NoStaticUse
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypePointer Function 6(int)
8: TypeFunction 6(int) 7(ptr)
15: 6(int) Constant 1
16: 6(int) Constant 0
19: 6(int) Constant 256
20: TypePointer UniformConstant 6(int)
21(counter): 20(ptr) Variable UniformConstant
26: 6(int) Constant 4
27: TypeArray 6(int) 26
28: TypePointer UniformConstant 27
29(countArr): 28(ptr) Variable UniformConstant
30: TypeInt 32 1
31: 30(int) Constant 2
37: TypePointer Function 30(int)
39: TypePointer WorkgroupLocal 30(int)
40(atomi): 39(ptr) Variable WorkgroupLocal
42: 30(int) Constant 3
45: TypePointer WorkgroupLocal 6(int)
46(atomu): 45(ptr) Variable WorkgroupLocal
48(value): 20(ptr) Variable UniformConstant
52: 6(int) Constant 7
60: 30(int) Constant 7
66: 6(int) Constant 10
69: TypeArray 30(int) 15
70: TypePointer PrivateGlobal 69
71(arrX): 70(ptr) Variable PrivateGlobal
72(arrY): 70(ptr) Variable PrivateGlobal
73(arrZ): 70(ptr) Variable PrivateGlobal
14: 6(int) Constant 1
15: 6(int) Constant 0
18: 6(int) Constant 256
19: TypePointer AtomicCounter 6(int)
20(counter): 19(ptr) Variable AtomicCounter
25: 6(int) Constant 4
26: TypeArray 6(int) 25
27: TypePointer AtomicCounter 26
28(countArr): 27(ptr) Variable AtomicCounter
29: TypeInt 32 1
30: 29(int) Constant 2
34: TypePointer Function 29(int)
36: TypePointer WorkgroupLocal 29(int)
37(atomi): 36(ptr) Variable WorkgroupLocal
38: 29(int) Constant 3
41: TypePointer WorkgroupLocal 6(int)
42(atomu): 41(ptr) Variable WorkgroupLocal
43: TypePointer UniformConstant 6(int)
44(value): 43(ptr) Variable UniformConstant
47: 6(int) Constant 7
52: 29(int) Constant 7
56: 6(int) Constant 10
59: TypeArray 29(int) 14
60: TypePointer PrivateGlobal 59
61(arrX): 60(ptr) Variable PrivateGlobal
62(arrY): 60(ptr) Variable PrivateGlobal
63(arrZ): 60(ptr) Variable PrivateGlobal
4(main): 2 Function None 3
5: Label
22(param): 7(ptr) Variable Function
25(val): 7(ptr) Variable Function
MemoryBarrier 15 19
23: 6(int) Load 21(counter)
Store 22(param) 23
24: 6(int) FunctionCall 10(func(au1;) 22(param)
32: 20(ptr) AccessChain 29(countArr) 31
33: 6(int) Load 32
34: 6(int) AtomicLoad 33 15 16
Store 25(val) 34
35: 6(int) Load 21(counter)
36: 6(int) AtomicIDecrement 35 15 16
21(param): 7(ptr) Variable Function
24(val): 7(ptr) Variable Function
MemoryBarrier 14 18
22: 6(int) Load 20(counter)
Store 21(param) 22
23: 6(int) FunctionCall 10(func(au1;) 21(param)
31: 19(ptr) AccessChain 28(countArr) 30
32: 6(int) AtomicLoad 31 14 15
Store 24(val) 32
33: 6(int) AtomicIDecrement 20(counter) 14 15
Return
FunctionEnd
10(func(au1;): 6(int) Function None 8
9(c): 7(ptr) FunctionParameter
11: Label
14: 6(int) Load 9(c)
17: 6(int) AtomicIIncrement 14 15 16
ReturnValue 17
16: 6(int) AtomicIIncrement 9(c) 14 15
ReturnValue 16
FunctionEnd
12(atoms(): 2 Function None 3
13: Label
38(origi): 37(ptr) Variable Function
44(origu): 7(ptr) Variable Function
41: 30(int) Load 40(atomi)
43: 30(int) AtomicIAdd 41 15 16 42
Store 38(origi) 43
47: 6(int) Load 46(atomu)
49: 6(int) Load 48(value)
50: 6(int) AtomicAnd 47 15 16 49
Store 44(origu) 50
51: 6(int) Load 46(atomu)
53: 6(int) AtomicOr 51 15 16 52
Store 44(origu) 53
54: 6(int) Load 46(atomu)
55: 6(int) AtomicXor 54 15 16 52
Store 44(origu) 55
56: 6(int) Load 46(atomu)
57: 6(int) Load 48(value)
58: 6(int) AtomicSMin 56 15 16 57
Store 44(origu) 58
59: 30(int) Load 40(atomi)
61: 30(int) AtomicSMax 59 15 16 60
Store 38(origi) 61
62: 30(int) Load 40(atomi)
63: 30(int) Load 38(origi)
64: 30(int) AtomicExchange 62 15 16 63
Store 38(origi) 64
65: 6(int) Load 46(atomu)
67: 6(int) Load 48(value)
68: 6(int) AtomicCompareExchange 65 15 16 16 67 66
Store 44(origu) 68
35(origi): 34(ptr) Variable Function
40(origu): 7(ptr) Variable Function
39: 29(int) AtomicIAdd 37(atomi) 14 15 38
Store 35(origi) 39
45: 6(int) Load 44(value)
46: 6(int) AtomicAnd 42(atomu) 14 15 45
Store 40(origu) 46
48: 6(int) AtomicOr 42(atomu) 14 15 47
Store 40(origu) 48
49: 6(int) AtomicXor 42(atomu) 14 15 47
Store 40(origu) 49
50: 6(int) Load 44(value)
51: 6(int) AtomicUMin 42(atomu) 14 15 50
Store 40(origu) 51
53: 29(int) AtomicSMax 37(atomi) 14 15 52
Store 35(origi) 53
54: 29(int) Load 35(origi)
55: 29(int) AtomicExchange 37(atomi) 14 15 54
Store 35(origi) 55
57: 6(int) Load 44(value)
58: 6(int) AtomicCompareExchange 42(atomu) 14 15 15 57 56
Store 40(origu) 58
Return
FunctionEnd