mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-13 21:50:06 +00:00
097215f618
SPIR-V disallows bool in interface blocks, which is emulated with uint. When loading a bool variable (through accessChainLoad()), it's converted from uint to bool if it came from an interface block. This was handled for bool and bvecN, but not for bool arrays. This change implements the conversion for bool arrays. Closes #2694
120 lines
5.6 KiB
Plaintext
120 lines
5.6 KiB
Plaintext
spv.load.bool.array.interface.block.frag
|
|
// Module Version 10000
|
|
// Generated by (magic number): 8000a
|
|
// Id's are bound by 80
|
|
|
|
Capability Shader
|
|
1: ExtInstImport "GLSL.std.450"
|
|
MemoryModel Logical GLSL450
|
|
EntryPoint Fragment 4 "main" 77
|
|
ExecutionMode 4 OriginUpperLeft
|
|
Source GLSL 450
|
|
Name 4 "main"
|
|
Name 11 "ssbo"
|
|
MemberName 11(ssbo) 0 "bo"
|
|
Name 13 ""
|
|
Name 18 "ub"
|
|
MemberName 18(ub) 0 "bi"
|
|
Name 20 ""
|
|
Name 77 "color"
|
|
Decorate 8 ArrayStride 4
|
|
Decorate 10 ArrayStride 12
|
|
MemberDecorate 11(ssbo) 0 Offset 0
|
|
Decorate 11(ssbo) BufferBlock
|
|
Decorate 13 DescriptorSet 0
|
|
Decorate 13 Binding 1
|
|
Decorate 16 ArrayStride 16
|
|
Decorate 17 ArrayStride 48
|
|
MemberDecorate 18(ub) 0 Offset 0
|
|
Decorate 18(ub) Block
|
|
Decorate 20 DescriptorSet 0
|
|
Decorate 20 Binding 0
|
|
Decorate 77(color) Location 0
|
|
2: TypeVoid
|
|
3: TypeFunction 2
|
|
6: TypeInt 32 0
|
|
7: 6(int) Constant 3
|
|
8: TypeArray 6(int) 7
|
|
9: 6(int) Constant 2
|
|
10: TypeArray 8 9
|
|
11(ssbo): TypeStruct 10
|
|
12: TypePointer Uniform 11(ssbo)
|
|
13: 12(ptr) Variable Uniform
|
|
14: TypeInt 32 1
|
|
15: 14(int) Constant 0
|
|
16: TypeArray 6(int) 7
|
|
17: TypeArray 16 9
|
|
18(ub): TypeStruct 17
|
|
19: TypePointer Uniform 18(ub)
|
|
20: 19(ptr) Variable Uniform
|
|
21: TypePointer Uniform 17
|
|
24: TypeBool
|
|
25: TypeArray 24(bool) 7
|
|
26: TypeArray 25 9
|
|
29: 6(int) Constant 0
|
|
45: TypePointer Uniform 10
|
|
48: TypePointer Uniform 8
|
|
51: 6(int) Constant 1
|
|
53: TypePointer Uniform 6(int)
|
|
56: 14(int) Constant 1
|
|
60: 14(int) Constant 2
|
|
74: TypeFloat 32
|
|
75: TypeVector 74(float) 4
|
|
76: TypePointer Output 75(fvec4)
|
|
77(color): 76(ptr) Variable Output
|
|
78: 74(float) Constant 0
|
|
79: 75(fvec4) ConstantComposite 78 78 78 78
|
|
4(main): 2 Function None 3
|
|
5: Label
|
|
22: 21(ptr) AccessChain 20 15
|
|
23: 17 Load 22
|
|
27: 16 CompositeExtract 23 0
|
|
28: 6(int) CompositeExtract 27 0
|
|
30: 24(bool) INotEqual 28 29
|
|
31: 6(int) CompositeExtract 27 1
|
|
32: 24(bool) INotEqual 31 29
|
|
33: 6(int) CompositeExtract 27 2
|
|
34: 24(bool) INotEqual 33 29
|
|
35: 25 CompositeConstruct 30 32 34
|
|
36: 16 CompositeExtract 23 1
|
|
37: 6(int) CompositeExtract 36 0
|
|
38: 24(bool) INotEqual 37 29
|
|
39: 6(int) CompositeExtract 36 1
|
|
40: 24(bool) INotEqual 39 29
|
|
41: 6(int) CompositeExtract 36 2
|
|
42: 24(bool) INotEqual 41 29
|
|
43: 25 CompositeConstruct 38 40 42
|
|
44: 26 CompositeConstruct 35 43
|
|
46: 45(ptr) AccessChain 13 15
|
|
47: 25 CompositeExtract 44 0
|
|
49: 48(ptr) AccessChain 46 15
|
|
50: 24(bool) CompositeExtract 47 0
|
|
52: 6(int) Select 50 51 29
|
|
54: 53(ptr) AccessChain 49 15
|
|
Store 54 52
|
|
55: 24(bool) CompositeExtract 47 1
|
|
57: 6(int) Select 55 51 29
|
|
58: 53(ptr) AccessChain 49 56
|
|
Store 58 57
|
|
59: 24(bool) CompositeExtract 47 2
|
|
61: 6(int) Select 59 51 29
|
|
62: 53(ptr) AccessChain 49 60
|
|
Store 62 61
|
|
63: 25 CompositeExtract 44 1
|
|
64: 48(ptr) AccessChain 46 56
|
|
65: 24(bool) CompositeExtract 63 0
|
|
66: 6(int) Select 65 51 29
|
|
67: 53(ptr) AccessChain 64 15
|
|
Store 67 66
|
|
68: 24(bool) CompositeExtract 63 1
|
|
69: 6(int) Select 68 51 29
|
|
70: 53(ptr) AccessChain 64 56
|
|
Store 70 69
|
|
71: 24(bool) CompositeExtract 63 2
|
|
72: 6(int) Select 71 51 29
|
|
73: 53(ptr) AccessChain 64 60
|
|
Store 73 72
|
|
Store 77(color) 79
|
|
Return
|
|
FunctionEnd
|