SPV: Reduce spurious type generation by removing intermediate types in the middle of access chains.

This generally simplifies access chain generation, with far fewer  type conversions.
It is particularly important to future SPIR-V changes where there is less aggregate
type uniqueness due to carrying different layout information with the type.
This commit is contained in:
John Kessenich
2015-09-13 14:46:30 -06:00
parent c9a808319a
commit fa668dad99
8 changed files with 144 additions and 137 deletions

View File

@@ -7,7 +7,7 @@ Linked compute stage:
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 72
// Id's are bound by 68
Source ESSL 310
Capability Shader
@@ -26,21 +26,21 @@ Linked compute stage:
MemberName 25(outbna) 0 "k"
MemberName 25(outbna) 1 "na"
Name 27 "outbnamena"
Name 47 "i"
Name 53 "outs"
MemberName 53(outs) 0 "s"
MemberName 53(outs) 1 "va"
Name 55 "outnames"
Name 59 "gl_LocalInvocationID"
Name 44 "i"
Name 50 "outs"
MemberName 50(outs) 0 "s"
MemberName 50(outs) 1 "va"
Name 52 "outnames"
Name 55 "gl_LocalInvocationID"
Decorate 14(outb) GLSLShared
Decorate 14(outb) BufferBlock
Decorate 25(outbna) GLSLShared
Decorate 25(outbna) BufferBlock
Decorate 53(outs) GLSLShared
Decorate 53(outs) BufferBlock
Decorate 59(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 71 BuiltIn WorkgroupSize
Decorate 71 NoStaticUse
Decorate 50(outs) GLSLShared
Decorate 50(outs) BufferBlock
Decorate 55(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 67 BuiltIn WorkgroupSize
Decorate 67 NoStaticUse
2: TypeVoid
3: TypeFunction 2
7: TypeInt 32 0
@@ -64,30 +64,26 @@ Linked compute stage:
27(outbnamena): 26(ptr) Variable Uniform
28: 17(int) Constant 1
31: TypePointer Uniform 24(fvec4)
33: TypeRuntimeArray 12(fvec3)
34: 17(int) Constant 3
35: 17(int) Constant 18
36: TypePointer Uniform 12(fvec3)
40: TypeRuntimeArray 12(fvec3)
41: 17(int) Constant 17
42: 11(float) Constant 1077936128
43: 12(fvec3) ConstantComposite 42 42 42
45: TypeRuntimeArray 12(fvec3)
46: TypePointer WorkgroupLocal 17(int)
47(i): 46(ptr) Variable WorkgroupLocal
52: TypeRuntimeArray 24(fvec4)
53(outs): TypeStruct 17(int) 52
54: TypePointer Uniform 53(outs)
55(outnames): 54(ptr) Variable Uniform
56: TypeRuntimeArray 24(fvec4)
57: TypeVector 7(int) 3
58: TypePointer Input 57(ivec3)
59(gl_LocalInvocationID): 58(ptr) Variable Input
66: TypePointer Uniform 17(int)
68: 7(int) Constant 16
69: 7(int) Constant 32
70: 7(int) Constant 4
71: 57(ivec3) ConstantComposite 68 69 70
33: 17(int) Constant 3
34: 17(int) Constant 18
35: TypePointer Uniform 12(fvec3)
39: 17(int) Constant 17
40: 11(float) Constant 1077936128
41: 12(fvec3) ConstantComposite 40 40 40
43: TypePointer WorkgroupLocal 17(int)
44(i): 43(ptr) Variable WorkgroupLocal
49: TypeRuntimeArray 24(fvec4)
50(outs): TypeStruct 17(int) 49
51: TypePointer Uniform 50(outs)
52(outnames): 51(ptr) Variable Uniform
53: TypeVector 7(int) 3
54: TypePointer Input 53(ivec3)
55(gl_LocalInvocationID): 54(ptr) Variable Input
62: TypePointer Uniform 17(int)
64: 7(int) Constant 16
65: 7(int) Constant 32
66: 7(int) Constant 4
67: 53(ivec3) ConstantComposite 64 65 66
4(main): 2 Function None 3
5: Label
MemoryBarrier 8 9
@@ -99,26 +95,26 @@ Linked compute stage:
30: 24(fvec4) CompositeConstruct 29 29 29 29
32: 31(ptr) AccessChain 27(outbnamena) 28
Store 32 30
37: 36(ptr) AccessChain 16(outbname) 34 35
38: 12(fvec3) Load 37
39: 11(float) CompositeExtract 38 0
Store 20(s) 39
44: 36(ptr) AccessChain 16(outbname) 34 41
Store 44 43
48: 17(int) Load 47(i)
49: 11(float) Load 20(s)
50: 12(fvec3) CompositeConstruct 49 49 49
51: 36(ptr) AccessChain 16(outbname) 34 48
Store 51 50
60: 57(ivec3) Load 59(gl_LocalInvocationID)
61: 7(int) CompositeExtract 60 0
62: 11(float) Load 20(s)
63: 24(fvec4) CompositeConstruct 62 62 62 62
64: 31(ptr) AccessChain 55(outnames) 28 61
Store 64 63
65: 17(int) ArrayLength 16(outbname)
67: 66(ptr) AccessChain 55(outnames) 18
Store 67 65
36: 35(ptr) AccessChain 16(outbname) 33 34
37: 12(fvec3) Load 36
38: 11(float) CompositeExtract 37 0
Store 20(s) 38
42: 35(ptr) AccessChain 16(outbname) 33 39
Store 42 41
45: 17(int) Load 44(i)
46: 11(float) Load 20(s)
47: 12(fvec3) CompositeConstruct 46 46 46
48: 35(ptr) AccessChain 16(outbname) 33 45
Store 48 47
56: 53(ivec3) Load 55(gl_LocalInvocationID)
57: 7(int) CompositeExtract 56 0
58: 11(float) Load 20(s)
59: 24(fvec4) CompositeConstruct 58 58 58 58
60: 31(ptr) AccessChain 52(outnames) 28 57
Store 60 59
61: 17(int) ArrayLength 16(outbname)
63: 62(ptr) AccessChain 52(outnames) 18
Store 63 61
Branch 6
6: Label
Return