Don't remove SPIR-V blocks before codegen.
A removed block releases its instructions, so Module::idToInstruction suddenly contains dangling references. The original motivation for block removal was to skip some unreachable blocks, but that's already achieved by InReadableOrder.cpp. Also updated stale comments.
This commit is contained in:
@@ -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 10000
|
||||
// Generated by (magic number): 80001
|
||||
// Id's are bound by 74
|
||||
// Id's are bound by 75
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
@@ -20,28 +20,28 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
|
||||
Name 10 "func(au1;"
|
||||
Name 9 "c"
|
||||
Name 12 "atoms("
|
||||
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 "dataSSB"
|
||||
MemberName 61(dataSSB) 0 "f"
|
||||
MemberName 61(dataSSB) 1 "n_frames_rendered"
|
||||
Name 63 "result"
|
||||
Name 71 "arrX"
|
||||
Name 72 "arrY"
|
||||
Name 73 "arrZ"
|
||||
Decorate 20(counter) Binding 0
|
||||
Decorate 28(countArr) Binding 0
|
||||
MemberDecorate 61(dataSSB) 0 Offset 0
|
||||
MemberDecorate 61(dataSSB) 1 Offset 16
|
||||
Decorate 61(dataSSB) BufferBlock
|
||||
Decorate 63(result) Binding 0
|
||||
Name 21 "counter"
|
||||
Name 22 "param"
|
||||
Name 25 "val"
|
||||
Name 29 "countArr"
|
||||
Name 36 "origi"
|
||||
Name 38 "atomi"
|
||||
Name 41 "origu"
|
||||
Name 43 "atomu"
|
||||
Name 45 "value"
|
||||
Name 62 "dataSSB"
|
||||
MemberName 62(dataSSB) 0 "f"
|
||||
MemberName 62(dataSSB) 1 "n_frames_rendered"
|
||||
Name 64 "result"
|
||||
Name 72 "arrX"
|
||||
Name 73 "arrY"
|
||||
Name 74 "arrZ"
|
||||
Decorate 21(counter) Binding 0
|
||||
Decorate 29(countArr) Binding 0
|
||||
MemberDecorate 62(dataSSB) 0 Offset 0
|
||||
MemberDecorate 62(dataSSB) 1 Offset 16
|
||||
Decorate 62(dataSSB) BufferBlock
|
||||
Decorate 64(result) Binding 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 0
|
||||
@@ -49,51 +49,51 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
|
||||
8: TypeFunction 6(int) 7(ptr)
|
||||
14: 6(int) Constant 1
|
||||
15: 6(int) Constant 0
|
||||
18: 6(int) Constant 1024
|
||||
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 Workgroup 29(int)
|
||||
37(atomi): 36(ptr) Variable Workgroup
|
||||
38: 29(int) Constant 3
|
||||
41: TypePointer Workgroup 6(int)
|
||||
42(atomu): 41(ptr) Variable Workgroup
|
||||
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: TypeFloat 32
|
||||
60: TypeVector 29(int) 4
|
||||
61(dataSSB): TypeStruct 59(float) 60(ivec4)
|
||||
62: TypePointer Uniform 61(dataSSB)
|
||||
63(result): 62(ptr) Variable Uniform
|
||||
64: 29(int) Constant 1
|
||||
65: 6(int) Constant 2
|
||||
66: TypePointer Uniform 29(int)
|
||||
69: TypeArray 29(int) 14
|
||||
70: TypePointer Private 69
|
||||
71(arrX): 70(ptr) Variable Private
|
||||
72(arrY): 70(ptr) Variable Private
|
||||
73(arrZ): 70(ptr) Variable Private
|
||||
19: 6(int) Constant 1024
|
||||
20: TypePointer AtomicCounter 6(int)
|
||||
21(counter): 20(ptr) Variable AtomicCounter
|
||||
26: 6(int) Constant 4
|
||||
27: TypeArray 6(int) 26
|
||||
28: TypePointer AtomicCounter 27
|
||||
29(countArr): 28(ptr) Variable AtomicCounter
|
||||
30: TypeInt 32 1
|
||||
31: 30(int) Constant 2
|
||||
35: TypePointer Function 30(int)
|
||||
37: TypePointer Workgroup 30(int)
|
||||
38(atomi): 37(ptr) Variable Workgroup
|
||||
39: 30(int) Constant 3
|
||||
42: TypePointer Workgroup 6(int)
|
||||
43(atomu): 42(ptr) Variable Workgroup
|
||||
44: TypePointer UniformConstant 6(int)
|
||||
45(value): 44(ptr) Variable UniformConstant
|
||||
48: 6(int) Constant 7
|
||||
53: 30(int) Constant 7
|
||||
57: 6(int) Constant 10
|
||||
60: TypeFloat 32
|
||||
61: TypeVector 30(int) 4
|
||||
62(dataSSB): TypeStruct 60(float) 61(ivec4)
|
||||
63: TypePointer Uniform 62(dataSSB)
|
||||
64(result): 63(ptr) Variable Uniform
|
||||
65: 30(int) Constant 1
|
||||
66: 6(int) Constant 2
|
||||
67: TypePointer Uniform 30(int)
|
||||
70: TypeArray 30(int) 14
|
||||
71: TypePointer Private 70
|
||||
72(arrX): 71(ptr) Variable Private
|
||||
73(arrY): 71(ptr) Variable Private
|
||||
74(arrZ): 71(ptr) Variable Private
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
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
|
||||
22(param): 7(ptr) Variable Function
|
||||
25(val): 7(ptr) Variable Function
|
||||
MemoryBarrier 14 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) AtomicLoad 32 14 15
|
||||
Store 25(val) 33
|
||||
34: 6(int) AtomicIDecrement 21(counter) 14 15
|
||||
Return
|
||||
FunctionEnd
|
||||
10(func(au1;): 6(int) Function None 8
|
||||
@@ -104,29 +104,29 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
|
||||
FunctionEnd
|
||||
12(atoms(): 2 Function None 3
|
||||
13: Label
|
||||
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
|
||||
67: 66(ptr) AccessChain 63(result) 64 65
|
||||
68: 29(int) AtomicIAdd 67 14 15 64
|
||||
36(origi): 35(ptr) Variable Function
|
||||
41(origu): 7(ptr) Variable Function
|
||||
40: 30(int) AtomicIAdd 38(atomi) 14 15 39
|
||||
Store 36(origi) 40
|
||||
46: 6(int) Load 45(value)
|
||||
47: 6(int) AtomicAnd 43(atomu) 14 15 46
|
||||
Store 41(origu) 47
|
||||
49: 6(int) AtomicOr 43(atomu) 14 15 48
|
||||
Store 41(origu) 49
|
||||
50: 6(int) AtomicXor 43(atomu) 14 15 48
|
||||
Store 41(origu) 50
|
||||
51: 6(int) Load 45(value)
|
||||
52: 6(int) AtomicUMin 43(atomu) 14 15 51
|
||||
Store 41(origu) 52
|
||||
54: 30(int) AtomicSMax 38(atomi) 14 15 53
|
||||
Store 36(origi) 54
|
||||
55: 30(int) Load 36(origi)
|
||||
56: 30(int) AtomicExchange 38(atomi) 14 15 55
|
||||
Store 36(origi) 56
|
||||
58: 6(int) Load 45(value)
|
||||
59: 6(int) AtomicCompareExchange 43(atomu) 14 15 15 58 57
|
||||
Store 41(origu) 59
|
||||
68: 67(ptr) AccessChain 64(result) 65 66
|
||||
69: 30(int) AtomicIAdd 68 14 15 65
|
||||
Return
|
||||
FunctionEnd
|
||||
|
||||
Reference in New Issue
Block a user