mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
Add GL_EXT_expect_assume support
Signed-off-by: Sven van Haastregt <sven.vanhaastregt@arm.com>
This commit is contained in:
parent
b4a6efcda2
commit
9fd0fcd737
@ -60,5 +60,6 @@ static const char* const E_SPV_KHR_ray_tracing_position_fetch = "SPV_KHR_ray_t
|
||||
static const char* const E_SPV_KHR_cooperative_matrix = "SPV_KHR_cooperative_matrix";
|
||||
static const char* const E_SPV_KHR_maximal_reconvergence = "SPV_KHR_maximal_reconvergence";
|
||||
static const char* const E_SPV_KHR_subgroup_rotate = "SPV_KHR_subgroup_rotate";
|
||||
static const char* const E_SPV_KHR_expect_assume = "SPV_KHR_expect_assume";
|
||||
|
||||
#endif // #ifndef GLSLextKHR_H
|
||||
|
@ -2785,6 +2785,11 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
|
||||
|
||||
return false;
|
||||
|
||||
case glslang::EOpAssumeEXT:
|
||||
builder.addCapability(spv::CapabilityExpectAssumeKHR);
|
||||
builder.addExtension(spv::E_SPV_KHR_expect_assume);
|
||||
builder.createNoResultOp(spv::OpAssumeTrueKHR, operand);
|
||||
return false;
|
||||
case glslang::EOpEmitStreamVertex:
|
||||
builder.createNoResultOp(spv::OpEmitStreamVertex, operand);
|
||||
return false;
|
||||
@ -3246,6 +3251,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
|
||||
binOp = node->getOp();
|
||||
break;
|
||||
|
||||
case glslang::EOpExpectEXT:
|
||||
builder.addCapability(spv::CapabilityExpectAssumeKHR);
|
||||
builder.addExtension(spv::E_SPV_KHR_expect_assume);
|
||||
binOp = node->getOp();
|
||||
break;
|
||||
|
||||
case glslang::EOpIgnoreIntersectionNV:
|
||||
case glslang::EOpTerminateRayNV:
|
||||
case glslang::EOpTraceNV:
|
||||
@ -6591,6 +6602,10 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD
|
||||
binOp = isUnsigned ? spv::OpUMul32x16INTEL : spv::OpIMul32x16INTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpExpectEXT:
|
||||
binOp = spv::OpExpectKHR;
|
||||
break;
|
||||
|
||||
case glslang::EOpLessThan:
|
||||
case glslang::EOpGreaterThan:
|
||||
case glslang::EOpLessThanEqual:
|
||||
|
@ -1043,6 +1043,8 @@ const char* CapabilityString(int info)
|
||||
|
||||
case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL";
|
||||
|
||||
case CapabilityExpectAssumeKHR: return "ExpectAssumeKHR";
|
||||
|
||||
case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT";
|
||||
case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT";
|
||||
case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT";
|
||||
|
47
Test/baseResults/spv.expect_assume.assumeEXT.comp.out
Normal file
47
Test/baseResults/spv.expect_assume.assumeEXT.comp.out
Normal file
@ -0,0 +1,47 @@
|
||||
spv.expect_assume.assumeEXT.comp
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 8000b
|
||||
// Id's are bound by 22
|
||||
|
||||
Capability Shader
|
||||
Capability ExpectAssumeKHR
|
||||
Extension "SPV_KHR_expect_assume"
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint GLCompute 4 "main"
|
||||
ExecutionMode 4 LocalSize 8 1 1
|
||||
Source GLSL 450
|
||||
SourceExtension "GL_EXT_expect_assume"
|
||||
Name 4 "main"
|
||||
Name 7 "roblock"
|
||||
MemberName 7(roblock) 0 "i"
|
||||
Name 9 "ro"
|
||||
MemberDecorate 7(roblock) 0 NonWritable
|
||||
MemberDecorate 7(roblock) 0 Offset 0
|
||||
Decorate 7(roblock) BufferBlock
|
||||
Decorate 9(ro) DescriptorSet 0
|
||||
Decorate 9(ro) Binding 0
|
||||
Decorate 21 BuiltIn WorkgroupSize
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 1
|
||||
7(roblock): TypeStruct 6(int)
|
||||
8: TypePointer Uniform 7(roblock)
|
||||
9(ro): 8(ptr) Variable Uniform
|
||||
10: 6(int) Constant 0
|
||||
11: TypePointer Uniform 6(int)
|
||||
14: 6(int) Constant 42
|
||||
15: TypeBool
|
||||
17: TypeInt 32 0
|
||||
18: TypeVector 17(int) 3
|
||||
19: 17(int) Constant 8
|
||||
20: 17(int) Constant 1
|
||||
21: 18(ivec3) ConstantComposite 19 20 20
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
12: 11(ptr) AccessChain 9(ro) 10
|
||||
13: 6(int) Load 12
|
||||
16: 15(bool) SGreaterThan 13 14
|
||||
AssumeTrueKHR 16
|
||||
Return
|
||||
FunctionEnd
|
276
Test/baseResults/spv.expect_assume.expectEXT.comp.out
Normal file
276
Test/baseResults/spv.expect_assume.expectEXT.comp.out
Normal file
@ -0,0 +1,276 @@
|
||||
spv.expect_assume.expectEXT.comp
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 8000b
|
||||
// Id's are bound by 178
|
||||
|
||||
Capability Shader
|
||||
Capability ExpectAssumeKHR
|
||||
Extension "SPV_KHR_expect_assume"
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint GLCompute 4 "main"
|
||||
ExecutionMode 4 LocalSize 8 1 1
|
||||
Source GLSL 450
|
||||
SourceExtension "GL_EXT_expect_assume"
|
||||
Name 4 "main"
|
||||
Name 8 "x"
|
||||
Name 18 "roblock"
|
||||
MemberName 18(roblock) 0 "b"
|
||||
MemberName 18(roblock) 1 "bv2"
|
||||
MemberName 18(roblock) 2 "bv3"
|
||||
MemberName 18(roblock) 3 "bv4"
|
||||
MemberName 18(roblock) 4 "i"
|
||||
MemberName 18(roblock) 5 "iv2"
|
||||
MemberName 18(roblock) 6 "iv3"
|
||||
MemberName 18(roblock) 7 "iv4"
|
||||
MemberName 18(roblock) 8 "ui"
|
||||
MemberName 18(roblock) 9 "uv2"
|
||||
MemberName 18(roblock) 10 "uv3"
|
||||
MemberName 18(roblock) 11 "uv4"
|
||||
Name 20 "ro"
|
||||
MemberDecorate 18(roblock) 0 NonWritable
|
||||
MemberDecorate 18(roblock) 0 Offset 0
|
||||
MemberDecorate 18(roblock) 1 NonWritable
|
||||
MemberDecorate 18(roblock) 1 Offset 8
|
||||
MemberDecorate 18(roblock) 2 NonWritable
|
||||
MemberDecorate 18(roblock) 2 Offset 16
|
||||
MemberDecorate 18(roblock) 3 NonWritable
|
||||
MemberDecorate 18(roblock) 3 Offset 32
|
||||
MemberDecorate 18(roblock) 4 NonWritable
|
||||
MemberDecorate 18(roblock) 4 Offset 48
|
||||
MemberDecorate 18(roblock) 5 NonWritable
|
||||
MemberDecorate 18(roblock) 5 Offset 56
|
||||
MemberDecorate 18(roblock) 6 NonWritable
|
||||
MemberDecorate 18(roblock) 6 Offset 64
|
||||
MemberDecorate 18(roblock) 7 NonWritable
|
||||
MemberDecorate 18(roblock) 7 Offset 80
|
||||
MemberDecorate 18(roblock) 8 NonWritable
|
||||
MemberDecorate 18(roblock) 8 Offset 96
|
||||
MemberDecorate 18(roblock) 9 NonWritable
|
||||
MemberDecorate 18(roblock) 9 Offset 104
|
||||
MemberDecorate 18(roblock) 10 NonWritable
|
||||
MemberDecorate 18(roblock) 10 Offset 112
|
||||
MemberDecorate 18(roblock) 11 NonWritable
|
||||
MemberDecorate 18(roblock) 11 Offset 128
|
||||
Decorate 18(roblock) BufferBlock
|
||||
Decorate 20(ro) DescriptorSet 0
|
||||
Decorate 20(ro) Binding 0
|
||||
Decorate 177 BuiltIn WorkgroupSize
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 1
|
||||
7: TypePointer Function 6(int)
|
||||
9: 6(int) Constant 0
|
||||
10: TypeBool
|
||||
11: TypeInt 32 0
|
||||
12: TypeVector 11(int) 2
|
||||
13: TypeVector 11(int) 3
|
||||
14: TypeVector 11(int) 4
|
||||
15: TypeVector 6(int) 2
|
||||
16: TypeVector 6(int) 3
|
||||
17: TypeVector 6(int) 4
|
||||
18(roblock): TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 6(int) 15(ivec2) 16(ivec3) 17(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
|
||||
19: TypePointer Uniform 18(roblock)
|
||||
20(ro): 19(ptr) Variable Uniform
|
||||
21: TypePointer Uniform 11(int)
|
||||
24: 11(int) Constant 0
|
||||
26: 10(bool) ConstantTrue
|
||||
32: 6(int) Constant 1
|
||||
33: TypePointer Uniform 12(ivec2)
|
||||
36: TypeVector 10(bool) 2
|
||||
37: 12(ivec2) ConstantComposite 24 24
|
||||
39: 10(bool) ConstantFalse
|
||||
40: 36(bvec2) ConstantComposite 26 39
|
||||
48: 6(int) Constant 2
|
||||
49: TypePointer Uniform 13(ivec3)
|
||||
52: TypeVector 10(bool) 3
|
||||
53: 13(ivec3) ConstantComposite 24 24 24
|
||||
55: 52(bvec3) ConstantComposite 26 39 26
|
||||
63: 6(int) Constant 3
|
||||
64: TypePointer Uniform 14(ivec4)
|
||||
67: TypeVector 10(bool) 4
|
||||
68: 14(ivec4) ConstantComposite 24 24 24 24
|
||||
70: 67(bvec4) ConstantComposite 39 26 39 26
|
||||
79: 6(int) Constant 4
|
||||
80: TypePointer Uniform 6(int)
|
||||
83: 6(int) Constant 10
|
||||
89: 6(int) Constant 5
|
||||
90: TypePointer Uniform 15(ivec2)
|
||||
93: 6(int) Constant 11
|
||||
94: 6(int) Constant 4294967274
|
||||
95: 15(ivec2) ConstantComposite 93 94
|
||||
103: 6(int) Constant 6
|
||||
104: TypePointer Uniform 16(ivec3)
|
||||
107: 6(int) Constant 33
|
||||
108: 16(ivec3) ConstantComposite 93 94 107
|
||||
116: 6(int) Constant 7
|
||||
117: TypePointer Uniform 17(ivec4)
|
||||
120: 6(int) Constant 44
|
||||
121: 17(ivec4) ConstantComposite 93 94 107 120
|
||||
130: 6(int) Constant 8
|
||||
133: 11(int) Constant 10
|
||||
139: 6(int) Constant 9
|
||||
142: 11(int) Constant 11
|
||||
143: 11(int) Constant 22
|
||||
144: 12(ivec2) ConstantComposite 142 143
|
||||
154: 11(int) Constant 33
|
||||
155: 13(ivec3) ConstantComposite 142 143 154
|
||||
165: 11(int) Constant 44
|
||||
166: 14(ivec4) ConstantComposite 142 143 154 165
|
||||
175: 11(int) Constant 8
|
||||
176: 11(int) Constant 1
|
||||
177: 13(ivec3) ConstantComposite 175 176 176
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(x): 7(ptr) Variable Function
|
||||
Store 8(x) 9
|
||||
22: 21(ptr) AccessChain 20(ro) 9
|
||||
23: 11(int) Load 22
|
||||
25: 10(bool) INotEqual 23 24
|
||||
27: 10(bool) ExpectKHR 25 26
|
||||
28: 10(bool) LogicalEqual 27 26
|
||||
29: 10(bool) LogicalNot 28
|
||||
SelectionMerge 31 None
|
||||
BranchConditional 29 30 31
|
||||
30: Label
|
||||
34: 33(ptr) AccessChain 20(ro) 32
|
||||
35: 12(ivec2) Load 34
|
||||
38: 36(bvec2) INotEqual 35 37
|
||||
41: 36(bvec2) ExpectKHR 38 40
|
||||
42: 36(bvec2) LogicalEqual 41 40
|
||||
43: 10(bool) All 42
|
||||
Branch 31
|
||||
31: Label
|
||||
44: 10(bool) Phi 28 5 43 30
|
||||
45: 10(bool) LogicalNot 44
|
||||
SelectionMerge 47 None
|
||||
BranchConditional 45 46 47
|
||||
46: Label
|
||||
50: 49(ptr) AccessChain 20(ro) 48
|
||||
51: 13(ivec3) Load 50
|
||||
54: 52(bvec3) INotEqual 51 53
|
||||
56: 52(bvec3) ExpectKHR 54 55
|
||||
57: 52(bvec3) LogicalEqual 56 55
|
||||
58: 10(bool) All 57
|
||||
Branch 47
|
||||
47: Label
|
||||
59: 10(bool) Phi 44 31 58 46
|
||||
60: 10(bool) LogicalNot 59
|
||||
SelectionMerge 62 None
|
||||
BranchConditional 60 61 62
|
||||
61: Label
|
||||
65: 64(ptr) AccessChain 20(ro) 63
|
||||
66: 14(ivec4) Load 65
|
||||
69: 67(bvec4) INotEqual 66 68
|
||||
71: 67(bvec4) ExpectKHR 69 70
|
||||
72: 67(bvec4) LogicalEqual 71 70
|
||||
73: 10(bool) All 72
|
||||
Branch 62
|
||||
62: Label
|
||||
74: 10(bool) Phi 59 47 73 61
|
||||
SelectionMerge 76 None
|
||||
BranchConditional 74 75 76
|
||||
75: Label
|
||||
77: 6(int) Load 8(x)
|
||||
78: 6(int) IAdd 77 32
|
||||
Store 8(x) 78
|
||||
Branch 76
|
||||
76: Label
|
||||
81: 80(ptr) AccessChain 20(ro) 79
|
||||
82: 6(int) Load 81
|
||||
84: 6(int) ExpectKHR 82 83
|
||||
85: 10(bool) IEqual 84 83
|
||||
86: 10(bool) LogicalNot 85
|
||||
SelectionMerge 88 None
|
||||
BranchConditional 86 87 88
|
||||
87: Label
|
||||
91: 90(ptr) AccessChain 20(ro) 89
|
||||
92: 15(ivec2) Load 91
|
||||
96: 15(ivec2) ExpectKHR 92 95
|
||||
97: 36(bvec2) IEqual 96 95
|
||||
98: 10(bool) All 97
|
||||
Branch 88
|
||||
88: Label
|
||||
99: 10(bool) Phi 85 76 98 87
|
||||
100: 10(bool) LogicalNot 99
|
||||
SelectionMerge 102 None
|
||||
BranchConditional 100 101 102
|
||||
101: Label
|
||||
105: 104(ptr) AccessChain 20(ro) 103
|
||||
106: 16(ivec3) Load 105
|
||||
109: 16(ivec3) ExpectKHR 106 108
|
||||
110: 52(bvec3) IEqual 109 108
|
||||
111: 10(bool) All 110
|
||||
Branch 102
|
||||
102: Label
|
||||
112: 10(bool) Phi 99 88 111 101
|
||||
113: 10(bool) LogicalNot 112
|
||||
SelectionMerge 115 None
|
||||
BranchConditional 113 114 115
|
||||
114: Label
|
||||
118: 117(ptr) AccessChain 20(ro) 116
|
||||
119: 17(ivec4) Load 118
|
||||
122: 17(ivec4) ExpectKHR 119 121
|
||||
123: 67(bvec4) IEqual 122 121
|
||||
124: 10(bool) All 123
|
||||
Branch 115
|
||||
115: Label
|
||||
125: 10(bool) Phi 112 102 124 114
|
||||
SelectionMerge 127 None
|
||||
BranchConditional 125 126 127
|
||||
126: Label
|
||||
128: 6(int) Load 8(x)
|
||||
129: 6(int) IAdd 128 32
|
||||
Store 8(x) 129
|
||||
Branch 127
|
||||
127: Label
|
||||
131: 21(ptr) AccessChain 20(ro) 130
|
||||
132: 11(int) Load 131
|
||||
134: 11(int) ExpectKHR 132 133
|
||||
135: 10(bool) IEqual 134 133
|
||||
136: 10(bool) LogicalNot 135
|
||||
SelectionMerge 138 None
|
||||
BranchConditional 136 137 138
|
||||
137: Label
|
||||
140: 33(ptr) AccessChain 20(ro) 139
|
||||
141: 12(ivec2) Load 140
|
||||
145: 12(ivec2) ExpectKHR 141 144
|
||||
146: 36(bvec2) IEqual 145 144
|
||||
147: 10(bool) All 146
|
||||
Branch 138
|
||||
138: Label
|
||||
148: 10(bool) Phi 135 127 147 137
|
||||
149: 10(bool) LogicalNot 148
|
||||
SelectionMerge 151 None
|
||||
BranchConditional 149 150 151
|
||||
150: Label
|
||||
152: 49(ptr) AccessChain 20(ro) 83
|
||||
153: 13(ivec3) Load 152
|
||||
156: 13(ivec3) ExpectKHR 153 155
|
||||
157: 52(bvec3) IEqual 156 155
|
||||
158: 10(bool) All 157
|
||||
Branch 151
|
||||
151: Label
|
||||
159: 10(bool) Phi 148 138 158 150
|
||||
160: 10(bool) LogicalNot 159
|
||||
SelectionMerge 162 None
|
||||
BranchConditional 160 161 162
|
||||
161: Label
|
||||
163: 64(ptr) AccessChain 20(ro) 93
|
||||
164: 14(ivec4) Load 163
|
||||
167: 14(ivec4) ExpectKHR 164 166
|
||||
168: 67(bvec4) IEqual 167 166
|
||||
169: 10(bool) All 168
|
||||
Branch 162
|
||||
162: Label
|
||||
170: 10(bool) Phi 159 151 169 161
|
||||
SelectionMerge 172 None
|
||||
BranchConditional 170 171 172
|
||||
171: Label
|
||||
173: 6(int) Load 8(x)
|
||||
174: 6(int) IAdd 173 32
|
||||
Store 8(x) 174
|
||||
Branch 172
|
||||
172: Label
|
||||
Return
|
||||
FunctionEnd
|
689
Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out
Normal file
689
Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out
Normal file
@ -0,0 +1,689 @@
|
||||
spv.expect_assume.expectEXT.exttypes.comp
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 8000b
|
||||
// Id's are bound by 458
|
||||
|
||||
Capability Shader
|
||||
Capability Int64
|
||||
Capability Int16
|
||||
Capability Int8
|
||||
Capability StorageUniformBufferBlock16
|
||||
Capability UniformAndStorageBuffer8BitAccess
|
||||
Capability ExpectAssumeKHR
|
||||
Extension "SPV_KHR_16bit_storage"
|
||||
Extension "SPV_KHR_8bit_storage"
|
||||
Extension "SPV_KHR_expect_assume"
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint GLCompute 4 "main"
|
||||
ExecutionMode 4 LocalSize 8 1 1
|
||||
Source GLSL 450
|
||||
SourceExtension "GL_EXT_expect_assume"
|
||||
SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
|
||||
Name 4 "main"
|
||||
Name 8 "x"
|
||||
Name 42 "roblock"
|
||||
MemberName 42(roblock) 0 "i8"
|
||||
MemberName 42(roblock) 1 "i8v2"
|
||||
MemberName 42(roblock) 2 "i8v3"
|
||||
MemberName 42(roblock) 3 "i8v4"
|
||||
MemberName 42(roblock) 4 "u8"
|
||||
MemberName 42(roblock) 5 "u8v2"
|
||||
MemberName 42(roblock) 6 "u8v3"
|
||||
MemberName 42(roblock) 7 "u8v4"
|
||||
MemberName 42(roblock) 8 "i16"
|
||||
MemberName 42(roblock) 9 "i16v2"
|
||||
MemberName 42(roblock) 10 "i16v3"
|
||||
MemberName 42(roblock) 11 "i16v4"
|
||||
MemberName 42(roblock) 12 "u16"
|
||||
MemberName 42(roblock) 13 "u16v2"
|
||||
MemberName 42(roblock) 14 "u16v3"
|
||||
MemberName 42(roblock) 15 "u16v4"
|
||||
MemberName 42(roblock) 16 "i32"
|
||||
MemberName 42(roblock) 17 "i32v2"
|
||||
MemberName 42(roblock) 18 "i32v3"
|
||||
MemberName 42(roblock) 19 "i32v4"
|
||||
MemberName 42(roblock) 20 "u32"
|
||||
MemberName 42(roblock) 21 "u32v2"
|
||||
MemberName 42(roblock) 22 "u32v3"
|
||||
MemberName 42(roblock) 23 "u32v4"
|
||||
MemberName 42(roblock) 24 "i64"
|
||||
MemberName 42(roblock) 25 "i64v2"
|
||||
MemberName 42(roblock) 26 "i64v3"
|
||||
MemberName 42(roblock) 27 "i64v4"
|
||||
MemberName 42(roblock) 28 "u64"
|
||||
MemberName 42(roblock) 29 "u64v2"
|
||||
MemberName 42(roblock) 30 "u64v3"
|
||||
MemberName 42(roblock) 31 "u64v4"
|
||||
Name 44 "ro"
|
||||
MemberDecorate 42(roblock) 0 NonWritable
|
||||
MemberDecorate 42(roblock) 0 Offset 0
|
||||
MemberDecorate 42(roblock) 1 NonWritable
|
||||
MemberDecorate 42(roblock) 1 Offset 2
|
||||
MemberDecorate 42(roblock) 2 NonWritable
|
||||
MemberDecorate 42(roblock) 2 Offset 4
|
||||
MemberDecorate 42(roblock) 3 NonWritable
|
||||
MemberDecorate 42(roblock) 3 Offset 8
|
||||
MemberDecorate 42(roblock) 4 NonWritable
|
||||
MemberDecorate 42(roblock) 4 Offset 12
|
||||
MemberDecorate 42(roblock) 5 NonWritable
|
||||
MemberDecorate 42(roblock) 5 Offset 14
|
||||
MemberDecorate 42(roblock) 6 NonWritable
|
||||
MemberDecorate 42(roblock) 6 Offset 16
|
||||
MemberDecorate 42(roblock) 7 NonWritable
|
||||
MemberDecorate 42(roblock) 7 Offset 20
|
||||
MemberDecorate 42(roblock) 8 NonWritable
|
||||
MemberDecorate 42(roblock) 8 Offset 24
|
||||
MemberDecorate 42(roblock) 9 NonWritable
|
||||
MemberDecorate 42(roblock) 9 Offset 28
|
||||
MemberDecorate 42(roblock) 10 NonWritable
|
||||
MemberDecorate 42(roblock) 10 Offset 32
|
||||
MemberDecorate 42(roblock) 11 NonWritable
|
||||
MemberDecorate 42(roblock) 11 Offset 40
|
||||
MemberDecorate 42(roblock) 12 NonWritable
|
||||
MemberDecorate 42(roblock) 12 Offset 48
|
||||
MemberDecorate 42(roblock) 13 NonWritable
|
||||
MemberDecorate 42(roblock) 13 Offset 52
|
||||
MemberDecorate 42(roblock) 14 NonWritable
|
||||
MemberDecorate 42(roblock) 14 Offset 56
|
||||
MemberDecorate 42(roblock) 15 NonWritable
|
||||
MemberDecorate 42(roblock) 15 Offset 64
|
||||
MemberDecorate 42(roblock) 16 NonWritable
|
||||
MemberDecorate 42(roblock) 16 Offset 72
|
||||
MemberDecorate 42(roblock) 17 NonWritable
|
||||
MemberDecorate 42(roblock) 17 Offset 80
|
||||
MemberDecorate 42(roblock) 18 NonWritable
|
||||
MemberDecorate 42(roblock) 18 Offset 96
|
||||
MemberDecorate 42(roblock) 19 NonWritable
|
||||
MemberDecorate 42(roblock) 19 Offset 112
|
||||
MemberDecorate 42(roblock) 20 NonWritable
|
||||
MemberDecorate 42(roblock) 20 Offset 128
|
||||
MemberDecorate 42(roblock) 21 NonWritable
|
||||
MemberDecorate 42(roblock) 21 Offset 136
|
||||
MemberDecorate 42(roblock) 22 NonWritable
|
||||
MemberDecorate 42(roblock) 22 Offset 144
|
||||
MemberDecorate 42(roblock) 23 NonWritable
|
||||
MemberDecorate 42(roblock) 23 Offset 160
|
||||
MemberDecorate 42(roblock) 24 NonWritable
|
||||
MemberDecorate 42(roblock) 24 Offset 176
|
||||
MemberDecorate 42(roblock) 25 NonWritable
|
||||
MemberDecorate 42(roblock) 25 Offset 192
|
||||
MemberDecorate 42(roblock) 26 NonWritable
|
||||
MemberDecorate 42(roblock) 26 Offset 224
|
||||
MemberDecorate 42(roblock) 27 NonWritable
|
||||
MemberDecorate 42(roblock) 27 Offset 256
|
||||
MemberDecorate 42(roblock) 28 NonWritable
|
||||
MemberDecorate 42(roblock) 28 Offset 288
|
||||
MemberDecorate 42(roblock) 29 NonWritable
|
||||
MemberDecorate 42(roblock) 29 Offset 304
|
||||
MemberDecorate 42(roblock) 30 NonWritable
|
||||
MemberDecorate 42(roblock) 30 Offset 320
|
||||
MemberDecorate 42(roblock) 31 NonWritable
|
||||
MemberDecorate 42(roblock) 31 Offset 352
|
||||
Decorate 42(roblock) BufferBlock
|
||||
Decorate 44(ro) DescriptorSet 0
|
||||
Decorate 44(ro) Binding 0
|
||||
Decorate 457 BuiltIn WorkgroupSize
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 1
|
||||
7: TypePointer Function 6(int)
|
||||
9: 6(int) Constant 0
|
||||
10: TypeBool
|
||||
11: TypeInt 8 1
|
||||
12: TypeVector 11(int8_t) 2
|
||||
13: TypeVector 11(int8_t) 3
|
||||
14: TypeVector 11(int8_t) 4
|
||||
15: TypeInt 8 0
|
||||
16: TypeVector 15(int8_t) 2
|
||||
17: TypeVector 15(int8_t) 3
|
||||
18: TypeVector 15(int8_t) 4
|
||||
19: TypeInt 16 1
|
||||
20: TypeVector 19(int16_t) 2
|
||||
21: TypeVector 19(int16_t) 3
|
||||
22: TypeVector 19(int16_t) 4
|
||||
23: TypeInt 16 0
|
||||
24: TypeVector 23(int16_t) 2
|
||||
25: TypeVector 23(int16_t) 3
|
||||
26: TypeVector 23(int16_t) 4
|
||||
27: TypeVector 6(int) 2
|
||||
28: TypeVector 6(int) 3
|
||||
29: TypeVector 6(int) 4
|
||||
30: TypeInt 32 0
|
||||
31: TypeVector 30(int) 2
|
||||
32: TypeVector 30(int) 3
|
||||
33: TypeVector 30(int) 4
|
||||
34: TypeInt 64 1
|
||||
35: TypeVector 34(int64_t) 2
|
||||
36: TypeVector 34(int64_t) 3
|
||||
37: TypeVector 34(int64_t) 4
|
||||
38: TypeInt 64 0
|
||||
39: TypeVector 38(int64_t) 2
|
||||
40: TypeVector 38(int64_t) 3
|
||||
41: TypeVector 38(int64_t) 4
|
||||
42(roblock): TypeStruct 11(int8_t) 12(i8vec2) 13(i8vec3) 14(i8vec4) 15(int8_t) 16(i8vec2) 17(i8vec3) 18(i8vec4) 19(int16_t) 20(i16vec2) 21(i16vec3) 22(i16vec4) 23(int16_t) 24(i16vec2) 25(i16vec3) 26(i16vec4) 6(int) 27(ivec2) 28(ivec3) 29(ivec4) 30(int) 31(ivec2) 32(ivec3) 33(ivec4) 34(int64_t) 35(i64vec2) 36(i64vec3) 37(i64vec4) 38(int64_t) 39(i64vec2) 40(i64vec3) 41(i64vec4)
|
||||
43: TypePointer Uniform 42(roblock)
|
||||
44(ro): 43(ptr) Variable Uniform
|
||||
45: TypePointer Uniform 11(int8_t)
|
||||
49: 6(int) Constant 10
|
||||
55: 6(int) Constant 1
|
||||
56: TypePointer Uniform 12(i8vec2)
|
||||
59: 11(int8_t) Constant 11
|
||||
60: 11(int8_t) Constant 4294967274
|
||||
61: 12(i8vec2) ConstantComposite 59 60
|
||||
63: TypeVector 10(bool) 2
|
||||
70: 6(int) Constant 2
|
||||
71: TypePointer Uniform 13(i8vec3)
|
||||
74: 11(int8_t) Constant 33
|
||||
75: 13(i8vec3) ConstantComposite 59 60 74
|
||||
77: TypeVector 10(bool) 3
|
||||
84: 6(int) Constant 3
|
||||
85: TypePointer Uniform 14(i8vec4)
|
||||
88: 11(int8_t) Constant 44
|
||||
89: 14(i8vec4) ConstantComposite 59 60 74 88
|
||||
91: TypeVector 10(bool) 4
|
||||
99: 6(int) Constant 4
|
||||
100: TypePointer Uniform 15(int8_t)
|
||||
110: 6(int) Constant 5
|
||||
111: TypePointer Uniform 16(i8vec2)
|
||||
114: 15(int8_t) Constant 11
|
||||
115: 15(int8_t) Constant 22
|
||||
116: 16(i8vec2) ConstantComposite 114 115
|
||||
124: 6(int) Constant 6
|
||||
125: TypePointer Uniform 17(i8vec3)
|
||||
128: 15(int8_t) Constant 33
|
||||
129: 17(i8vec3) ConstantComposite 114 115 128
|
||||
137: 6(int) Constant 7
|
||||
138: TypePointer Uniform 18(i8vec4)
|
||||
141: 15(int8_t) Constant 44
|
||||
142: 18(i8vec4) ConstantComposite 114 115 128 141
|
||||
151: 6(int) Constant 8
|
||||
152: TypePointer Uniform 19(int16_t)
|
||||
161: 6(int) Constant 9
|
||||
162: TypePointer Uniform 20(i16vec2)
|
||||
165: 19(int16_t) Constant 11
|
||||
166: 19(int16_t) Constant 4294967274
|
||||
167: 20(i16vec2) ConstantComposite 165 166
|
||||
175: TypePointer Uniform 21(i16vec3)
|
||||
178: 19(int16_t) Constant 33
|
||||
179: 21(i16vec3) ConstantComposite 165 166 178
|
||||
187: 6(int) Constant 11
|
||||
188: TypePointer Uniform 22(i16vec4)
|
||||
191: 19(int16_t) Constant 44
|
||||
192: 22(i16vec4) ConstantComposite 165 166 178 191
|
||||
201: 6(int) Constant 12
|
||||
202: TypePointer Uniform 23(int16_t)
|
||||
212: 6(int) Constant 13
|
||||
213: TypePointer Uniform 24(i16vec2)
|
||||
216: 23(int16_t) Constant 11
|
||||
217: 23(int16_t) Constant 22
|
||||
218: 24(i16vec2) ConstantComposite 216 217
|
||||
226: 6(int) Constant 14
|
||||
227: TypePointer Uniform 25(i16vec3)
|
||||
230: 23(int16_t) Constant 33
|
||||
231: 25(i16vec3) ConstantComposite 216 217 230
|
||||
239: 6(int) Constant 15
|
||||
240: TypePointer Uniform 26(i16vec4)
|
||||
243: 23(int16_t) Constant 44
|
||||
244: 26(i16vec4) ConstantComposite 216 217 230 243
|
||||
253: 6(int) Constant 16
|
||||
254: TypePointer Uniform 6(int)
|
||||
262: 6(int) Constant 17
|
||||
263: TypePointer Uniform 27(ivec2)
|
||||
266: 6(int) Constant 4294967274
|
||||
267: 27(ivec2) ConstantComposite 187 266
|
||||
275: 6(int) Constant 18
|
||||
276: TypePointer Uniform 28(ivec3)
|
||||
279: 6(int) Constant 33
|
||||
280: 28(ivec3) ConstantComposite 187 266 279
|
||||
288: 6(int) Constant 19
|
||||
289: TypePointer Uniform 29(ivec4)
|
||||
292: 6(int) Constant 44
|
||||
293: 29(ivec4) ConstantComposite 187 266 279 292
|
||||
302: 6(int) Constant 20
|
||||
303: TypePointer Uniform 30(int)
|
||||
306: 30(int) Constant 10
|
||||
312: 6(int) Constant 21
|
||||
313: TypePointer Uniform 31(ivec2)
|
||||
316: 30(int) Constant 11
|
||||
317: 30(int) Constant 22
|
||||
318: 31(ivec2) ConstantComposite 316 317
|
||||
326: 6(int) Constant 22
|
||||
327: TypePointer Uniform 32(ivec3)
|
||||
330: 30(int) Constant 33
|
||||
331: 32(ivec3) ConstantComposite 316 317 330
|
||||
339: 6(int) Constant 23
|
||||
340: TypePointer Uniform 33(ivec4)
|
||||
343: 30(int) Constant 44
|
||||
344: 33(ivec4) ConstantComposite 316 317 330 343
|
||||
353: 6(int) Constant 24
|
||||
354: TypePointer Uniform 34(int64_t)
|
||||
357: 34(int64_t) Constant 10 0
|
||||
363: 6(int) Constant 25
|
||||
364: TypePointer Uniform 35(i64vec2)
|
||||
367: 34(int64_t) Constant 11 0
|
||||
368: 34(int64_t) Constant 4294967274 4294967295
|
||||
369: 35(i64vec2) ConstantComposite 367 368
|
||||
377: 6(int) Constant 26
|
||||
378: TypePointer Uniform 36(i64vec3)
|
||||
381: 34(int64_t) Constant 33 0
|
||||
382: 36(i64vec3) ConstantComposite 367 368 381
|
||||
390: 6(int) Constant 27
|
||||
391: TypePointer Uniform 37(i64vec4)
|
||||
394: 34(int64_t) Constant 44 0
|
||||
395: 37(i64vec4) ConstantComposite 367 368 381 394
|
||||
404: 6(int) Constant 28
|
||||
405: TypePointer Uniform 38(int64_t)
|
||||
408: 38(int64_t) Constant 10 0
|
||||
414: 6(int) Constant 29
|
||||
415: TypePointer Uniform 39(i64vec2)
|
||||
418: 38(int64_t) Constant 11 0
|
||||
419: 38(int64_t) Constant 22 0
|
||||
420: 39(i64vec2) ConstantComposite 418 419
|
||||
428: 6(int) Constant 30
|
||||
429: TypePointer Uniform 40(i64vec3)
|
||||
432: 38(int64_t) Constant 33 0
|
||||
433: 40(i64vec3) ConstantComposite 418 419 432
|
||||
441: 6(int) Constant 31
|
||||
442: TypePointer Uniform 41(i64vec4)
|
||||
445: 38(int64_t) Constant 44 0
|
||||
446: 41(i64vec4) ConstantComposite 418 419 432 445
|
||||
455: 30(int) Constant 8
|
||||
456: 30(int) Constant 1
|
||||
457: 32(ivec3) ConstantComposite 455 456 456
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(x): 7(ptr) Variable Function
|
||||
Store 8(x) 9
|
||||
46: 45(ptr) AccessChain 44(ro) 9
|
||||
47: 11(int8_t) Load 46
|
||||
48: 6(int) SConvert 47
|
||||
50: 6(int) ExpectKHR 48 49
|
||||
51: 10(bool) IEqual 50 49
|
||||
52: 10(bool) LogicalNot 51
|
||||
SelectionMerge 54 None
|
||||
BranchConditional 52 53 54
|
||||
53: Label
|
||||
57: 56(ptr) AccessChain 44(ro) 55
|
||||
58: 12(i8vec2) Load 57
|
||||
62: 12(i8vec2) ExpectKHR 58 61
|
||||
64: 63(bvec2) IEqual 62 61
|
||||
65: 10(bool) All 64
|
||||
Branch 54
|
||||
54: Label
|
||||
66: 10(bool) Phi 51 5 65 53
|
||||
67: 10(bool) LogicalNot 66
|
||||
SelectionMerge 69 None
|
||||
BranchConditional 67 68 69
|
||||
68: Label
|
||||
72: 71(ptr) AccessChain 44(ro) 70
|
||||
73: 13(i8vec3) Load 72
|
||||
76: 13(i8vec3) ExpectKHR 73 75
|
||||
78: 77(bvec3) IEqual 76 75
|
||||
79: 10(bool) All 78
|
||||
Branch 69
|
||||
69: Label
|
||||
80: 10(bool) Phi 66 54 79 68
|
||||
81: 10(bool) LogicalNot 80
|
||||
SelectionMerge 83 None
|
||||
BranchConditional 81 82 83
|
||||
82: Label
|
||||
86: 85(ptr) AccessChain 44(ro) 84
|
||||
87: 14(i8vec4) Load 86
|
||||
90: 14(i8vec4) ExpectKHR 87 89
|
||||
92: 91(bvec4) IEqual 90 89
|
||||
93: 10(bool) All 92
|
||||
Branch 83
|
||||
83: Label
|
||||
94: 10(bool) Phi 80 69 93 82
|
||||
SelectionMerge 96 None
|
||||
BranchConditional 94 95 96
|
||||
95: Label
|
||||
97: 6(int) Load 8(x)
|
||||
98: 6(int) IAdd 97 55
|
||||
Store 8(x) 98
|
||||
Branch 96
|
||||
96: Label
|
||||
101: 100(ptr) AccessChain 44(ro) 99
|
||||
102: 15(int8_t) Load 101
|
||||
103: 30(int) UConvert 102
|
||||
104: 6(int) Bitcast 103
|
||||
105: 6(int) ExpectKHR 104 49
|
||||
106: 10(bool) IEqual 105 49
|
||||
107: 10(bool) LogicalNot 106
|
||||
SelectionMerge 109 None
|
||||
BranchConditional 107 108 109
|
||||
108: Label
|
||||
112: 111(ptr) AccessChain 44(ro) 110
|
||||
113: 16(i8vec2) Load 112
|
||||
117: 16(i8vec2) ExpectKHR 113 116
|
||||
118: 63(bvec2) IEqual 117 116
|
||||
119: 10(bool) All 118
|
||||
Branch 109
|
||||
109: Label
|
||||
120: 10(bool) Phi 106 96 119 108
|
||||
121: 10(bool) LogicalNot 120
|
||||
SelectionMerge 123 None
|
||||
BranchConditional 121 122 123
|
||||
122: Label
|
||||
126: 125(ptr) AccessChain 44(ro) 124
|
||||
127: 17(i8vec3) Load 126
|
||||
130: 17(i8vec3) ExpectKHR 127 129
|
||||
131: 77(bvec3) IEqual 130 129
|
||||
132: 10(bool) All 131
|
||||
Branch 123
|
||||
123: Label
|
||||
133: 10(bool) Phi 120 109 132 122
|
||||
134: 10(bool) LogicalNot 133
|
||||
SelectionMerge 136 None
|
||||
BranchConditional 134 135 136
|
||||
135: Label
|
||||
139: 138(ptr) AccessChain 44(ro) 137
|
||||
140: 18(i8vec4) Load 139
|
||||
143: 18(i8vec4) ExpectKHR 140 142
|
||||
144: 91(bvec4) IEqual 143 142
|
||||
145: 10(bool) All 144
|
||||
Branch 136
|
||||
136: Label
|
||||
146: 10(bool) Phi 133 123 145 135
|
||||
SelectionMerge 148 None
|
||||
BranchConditional 146 147 148
|
||||
147: Label
|
||||
149: 6(int) Load 8(x)
|
||||
150: 6(int) IAdd 149 55
|
||||
Store 8(x) 150
|
||||
Branch 148
|
||||
148: Label
|
||||
153: 152(ptr) AccessChain 44(ro) 151
|
||||
154: 19(int16_t) Load 153
|
||||
155: 6(int) SConvert 154
|
||||
156: 6(int) ExpectKHR 155 49
|
||||
157: 10(bool) IEqual 156 49
|
||||
158: 10(bool) LogicalNot 157
|
||||
SelectionMerge 160 None
|
||||
BranchConditional 158 159 160
|
||||
159: Label
|
||||
163: 162(ptr) AccessChain 44(ro) 161
|
||||
164: 20(i16vec2) Load 163
|
||||
168: 20(i16vec2) ExpectKHR 164 167
|
||||
169: 63(bvec2) IEqual 168 167
|
||||
170: 10(bool) All 169
|
||||
Branch 160
|
||||
160: Label
|
||||
171: 10(bool) Phi 157 148 170 159
|
||||
172: 10(bool) LogicalNot 171
|
||||
SelectionMerge 174 None
|
||||
BranchConditional 172 173 174
|
||||
173: Label
|
||||
176: 175(ptr) AccessChain 44(ro) 49
|
||||
177: 21(i16vec3) Load 176
|
||||
180: 21(i16vec3) ExpectKHR 177 179
|
||||
181: 77(bvec3) IEqual 180 179
|
||||
182: 10(bool) All 181
|
||||
Branch 174
|
||||
174: Label
|
||||
183: 10(bool) Phi 171 160 182 173
|
||||
184: 10(bool) LogicalNot 183
|
||||
SelectionMerge 186 None
|
||||
BranchConditional 184 185 186
|
||||
185: Label
|
||||
189: 188(ptr) AccessChain 44(ro) 187
|
||||
190: 22(i16vec4) Load 189
|
||||
193: 22(i16vec4) ExpectKHR 190 192
|
||||
194: 91(bvec4) IEqual 193 192
|
||||
195: 10(bool) All 194
|
||||
Branch 186
|
||||
186: Label
|
||||
196: 10(bool) Phi 183 174 195 185
|
||||
SelectionMerge 198 None
|
||||
BranchConditional 196 197 198
|
||||
197: Label
|
||||
199: 6(int) Load 8(x)
|
||||
200: 6(int) IAdd 199 55
|
||||
Store 8(x) 200
|
||||
Branch 198
|
||||
198: Label
|
||||
203: 202(ptr) AccessChain 44(ro) 201
|
||||
204: 23(int16_t) Load 203
|
||||
205: 30(int) UConvert 204
|
||||
206: 6(int) Bitcast 205
|
||||
207: 6(int) ExpectKHR 206 49
|
||||
208: 10(bool) IEqual 207 49
|
||||
209: 10(bool) LogicalNot 208
|
||||
SelectionMerge 211 None
|
||||
BranchConditional 209 210 211
|
||||
210: Label
|
||||
214: 213(ptr) AccessChain 44(ro) 212
|
||||
215: 24(i16vec2) Load 214
|
||||
219: 24(i16vec2) ExpectKHR 215 218
|
||||
220: 63(bvec2) IEqual 219 218
|
||||
221: 10(bool) All 220
|
||||
Branch 211
|
||||
211: Label
|
||||
222: 10(bool) Phi 208 198 221 210
|
||||
223: 10(bool) LogicalNot 222
|
||||
SelectionMerge 225 None
|
||||
BranchConditional 223 224 225
|
||||
224: Label
|
||||
228: 227(ptr) AccessChain 44(ro) 226
|
||||
229: 25(i16vec3) Load 228
|
||||
232: 25(i16vec3) ExpectKHR 229 231
|
||||
233: 77(bvec3) IEqual 232 231
|
||||
234: 10(bool) All 233
|
||||
Branch 225
|
||||
225: Label
|
||||
235: 10(bool) Phi 222 211 234 224
|
||||
236: 10(bool) LogicalNot 235
|
||||
SelectionMerge 238 None
|
||||
BranchConditional 236 237 238
|
||||
237: Label
|
||||
241: 240(ptr) AccessChain 44(ro) 239
|
||||
242: 26(i16vec4) Load 241
|
||||
245: 26(i16vec4) ExpectKHR 242 244
|
||||
246: 91(bvec4) IEqual 245 244
|
||||
247: 10(bool) All 246
|
||||
Branch 238
|
||||
238: Label
|
||||
248: 10(bool) Phi 235 225 247 237
|
||||
SelectionMerge 250 None
|
||||
BranchConditional 248 249 250
|
||||
249: Label
|
||||
251: 6(int) Load 8(x)
|
||||
252: 6(int) IAdd 251 55
|
||||
Store 8(x) 252
|
||||
Branch 250
|
||||
250: Label
|
||||
255: 254(ptr) AccessChain 44(ro) 253
|
||||
256: 6(int) Load 255
|
||||
257: 6(int) ExpectKHR 256 49
|
||||
258: 10(bool) IEqual 257 49
|
||||
259: 10(bool) LogicalNot 258
|
||||
SelectionMerge 261 None
|
||||
BranchConditional 259 260 261
|
||||
260: Label
|
||||
264: 263(ptr) AccessChain 44(ro) 262
|
||||
265: 27(ivec2) Load 264
|
||||
268: 27(ivec2) ExpectKHR 265 267
|
||||
269: 63(bvec2) IEqual 268 267
|
||||
270: 10(bool) All 269
|
||||
Branch 261
|
||||
261: Label
|
||||
271: 10(bool) Phi 258 250 270 260
|
||||
272: 10(bool) LogicalNot 271
|
||||
SelectionMerge 274 None
|
||||
BranchConditional 272 273 274
|
||||
273: Label
|
||||
277: 276(ptr) AccessChain 44(ro) 275
|
||||
278: 28(ivec3) Load 277
|
||||
281: 28(ivec3) ExpectKHR 278 280
|
||||
282: 77(bvec3) IEqual 281 280
|
||||
283: 10(bool) All 282
|
||||
Branch 274
|
||||
274: Label
|
||||
284: 10(bool) Phi 271 261 283 273
|
||||
285: 10(bool) LogicalNot 284
|
||||
SelectionMerge 287 None
|
||||
BranchConditional 285 286 287
|
||||
286: Label
|
||||
290: 289(ptr) AccessChain 44(ro) 288
|
||||
291: 29(ivec4) Load 290
|
||||
294: 29(ivec4) ExpectKHR 291 293
|
||||
295: 91(bvec4) IEqual 294 293
|
||||
296: 10(bool) All 295
|
||||
Branch 287
|
||||
287: Label
|
||||
297: 10(bool) Phi 284 274 296 286
|
||||
SelectionMerge 299 None
|
||||
BranchConditional 297 298 299
|
||||
298: Label
|
||||
300: 6(int) Load 8(x)
|
||||
301: 6(int) IAdd 300 55
|
||||
Store 8(x) 301
|
||||
Branch 299
|
||||
299: Label
|
||||
304: 303(ptr) AccessChain 44(ro) 302
|
||||
305: 30(int) Load 304
|
||||
307: 30(int) ExpectKHR 305 306
|
||||
308: 10(bool) IEqual 307 306
|
||||
309: 10(bool) LogicalNot 308
|
||||
SelectionMerge 311 None
|
||||
BranchConditional 309 310 311
|
||||
310: Label
|
||||
314: 313(ptr) AccessChain 44(ro) 312
|
||||
315: 31(ivec2) Load 314
|
||||
319: 31(ivec2) ExpectKHR 315 318
|
||||
320: 63(bvec2) IEqual 319 318
|
||||
321: 10(bool) All 320
|
||||
Branch 311
|
||||
311: Label
|
||||
322: 10(bool) Phi 308 299 321 310
|
||||
323: 10(bool) LogicalNot 322
|
||||
SelectionMerge 325 None
|
||||
BranchConditional 323 324 325
|
||||
324: Label
|
||||
328: 327(ptr) AccessChain 44(ro) 326
|
||||
329: 32(ivec3) Load 328
|
||||
332: 32(ivec3) ExpectKHR 329 331
|
||||
333: 77(bvec3) IEqual 332 331
|
||||
334: 10(bool) All 333
|
||||
Branch 325
|
||||
325: Label
|
||||
335: 10(bool) Phi 322 311 334 324
|
||||
336: 10(bool) LogicalNot 335
|
||||
SelectionMerge 338 None
|
||||
BranchConditional 336 337 338
|
||||
337: Label
|
||||
341: 340(ptr) AccessChain 44(ro) 339
|
||||
342: 33(ivec4) Load 341
|
||||
345: 33(ivec4) ExpectKHR 342 344
|
||||
346: 91(bvec4) IEqual 345 344
|
||||
347: 10(bool) All 346
|
||||
Branch 338
|
||||
338: Label
|
||||
348: 10(bool) Phi 335 325 347 337
|
||||
SelectionMerge 350 None
|
||||
BranchConditional 348 349 350
|
||||
349: Label
|
||||
351: 6(int) Load 8(x)
|
||||
352: 6(int) IAdd 351 55
|
||||
Store 8(x) 352
|
||||
Branch 350
|
||||
350: Label
|
||||
355: 354(ptr) AccessChain 44(ro) 353
|
||||
356: 34(int64_t) Load 355
|
||||
358: 34(int64_t) ExpectKHR 356 357
|
||||
359: 10(bool) IEqual 358 357
|
||||
360: 10(bool) LogicalNot 359
|
||||
SelectionMerge 362 None
|
||||
BranchConditional 360 361 362
|
||||
361: Label
|
||||
365: 364(ptr) AccessChain 44(ro) 363
|
||||
366: 35(i64vec2) Load 365
|
||||
370: 35(i64vec2) ExpectKHR 366 369
|
||||
371: 63(bvec2) IEqual 370 369
|
||||
372: 10(bool) All 371
|
||||
Branch 362
|
||||
362: Label
|
||||
373: 10(bool) Phi 359 350 372 361
|
||||
374: 10(bool) LogicalNot 373
|
||||
SelectionMerge 376 None
|
||||
BranchConditional 374 375 376
|
||||
375: Label
|
||||
379: 378(ptr) AccessChain 44(ro) 377
|
||||
380: 36(i64vec3) Load 379
|
||||
383: 36(i64vec3) ExpectKHR 380 382
|
||||
384: 77(bvec3) IEqual 383 382
|
||||
385: 10(bool) All 384
|
||||
Branch 376
|
||||
376: Label
|
||||
386: 10(bool) Phi 373 362 385 375
|
||||
387: 10(bool) LogicalNot 386
|
||||
SelectionMerge 389 None
|
||||
BranchConditional 387 388 389
|
||||
388: Label
|
||||
392: 391(ptr) AccessChain 44(ro) 390
|
||||
393: 37(i64vec4) Load 392
|
||||
396: 37(i64vec4) ExpectKHR 393 395
|
||||
397: 91(bvec4) IEqual 396 395
|
||||
398: 10(bool) All 397
|
||||
Branch 389
|
||||
389: Label
|
||||
399: 10(bool) Phi 386 376 398 388
|
||||
SelectionMerge 401 None
|
||||
BranchConditional 399 400 401
|
||||
400: Label
|
||||
402: 6(int) Load 8(x)
|
||||
403: 6(int) IAdd 402 55
|
||||
Store 8(x) 403
|
||||
Branch 401
|
||||
401: Label
|
||||
406: 405(ptr) AccessChain 44(ro) 404
|
||||
407: 38(int64_t) Load 406
|
||||
409: 38(int64_t) ExpectKHR 407 408
|
||||
410: 10(bool) IEqual 409 408
|
||||
411: 10(bool) LogicalNot 410
|
||||
SelectionMerge 413 None
|
||||
BranchConditional 411 412 413
|
||||
412: Label
|
||||
416: 415(ptr) AccessChain 44(ro) 414
|
||||
417: 39(i64vec2) Load 416
|
||||
421: 39(i64vec2) ExpectKHR 417 420
|
||||
422: 63(bvec2) IEqual 421 420
|
||||
423: 10(bool) All 422
|
||||
Branch 413
|
||||
413: Label
|
||||
424: 10(bool) Phi 410 401 423 412
|
||||
425: 10(bool) LogicalNot 424
|
||||
SelectionMerge 427 None
|
||||
BranchConditional 425 426 427
|
||||
426: Label
|
||||
430: 429(ptr) AccessChain 44(ro) 428
|
||||
431: 40(i64vec3) Load 430
|
||||
434: 40(i64vec3) ExpectKHR 431 433
|
||||
435: 77(bvec3) IEqual 434 433
|
||||
436: 10(bool) All 435
|
||||
Branch 427
|
||||
427: Label
|
||||
437: 10(bool) Phi 424 413 436 426
|
||||
438: 10(bool) LogicalNot 437
|
||||
SelectionMerge 440 None
|
||||
BranchConditional 438 439 440
|
||||
439: Label
|
||||
443: 442(ptr) AccessChain 44(ro) 441
|
||||
444: 41(i64vec4) Load 443
|
||||
447: 41(i64vec4) ExpectKHR 444 446
|
||||
448: 91(bvec4) IEqual 447 446
|
||||
449: 10(bool) All 448
|
||||
Branch 440
|
||||
440: Label
|
||||
450: 10(bool) Phi 437 427 449 439
|
||||
SelectionMerge 452 None
|
||||
BranchConditional 450 451 452
|
||||
451: Label
|
||||
453: 6(int) Load 8(x)
|
||||
454: 6(int) IAdd 453 55
|
||||
Store 8(x) 454
|
||||
Branch 452
|
||||
452: Label
|
||||
Return
|
||||
FunctionEnd
|
13
Test/spv.expect_assume.assumeEXT.comp
Normal file
13
Test/spv.expect_assume.assumeEXT.comp
Normal file
@ -0,0 +1,13 @@
|
||||
#version 450
|
||||
|
||||
#extension GL_EXT_expect_assume: enable
|
||||
|
||||
layout (local_size_x = 8) in;
|
||||
|
||||
readonly buffer roblock {
|
||||
int i;
|
||||
} ro;
|
||||
|
||||
void main() {
|
||||
assumeEXT(ro.i > 42);
|
||||
}
|
43
Test/spv.expect_assume.expectEXT.comp
Normal file
43
Test/spv.expect_assume.expectEXT.comp
Normal file
@ -0,0 +1,43 @@
|
||||
#version 450
|
||||
|
||||
#extension GL_EXT_expect_assume: enable
|
||||
|
||||
layout (local_size_x = 8) in;
|
||||
|
||||
readonly buffer roblock {
|
||||
bool b;
|
||||
bvec2 bv2;
|
||||
bvec3 bv3;
|
||||
bvec4 bv4;
|
||||
int i;
|
||||
ivec2 iv2;
|
||||
ivec3 iv3;
|
||||
ivec4 iv4;
|
||||
uint ui;
|
||||
uvec2 uv2;
|
||||
uvec3 uv3;
|
||||
uvec4 uv4;
|
||||
} ro;
|
||||
|
||||
void main() {
|
||||
int x = 0;
|
||||
|
||||
if (expectEXT(ro.b, true) == true ||
|
||||
expectEXT(ro.bv2, bvec2(true, false)) == bvec2(true, false) ||
|
||||
expectEXT(ro.bv3, bvec3(true, false, true)) == bvec3(true, false, true) ||
|
||||
expectEXT(ro.bv4, bvec4(false, true, false, true)) == bvec4(false, true, false, true)) {
|
||||
x++;
|
||||
}
|
||||
if (expectEXT(ro.i, 10) == 10 ||
|
||||
expectEXT(ro.iv2, ivec2(11, -22)) == ivec2(11, -22) ||
|
||||
expectEXT(ro.iv3, ivec3(11, -22, 33)) == ivec3(11, -22, 33) ||
|
||||
expectEXT(ro.iv4, ivec4(11, -22, 33, 44)) == ivec4(11, -22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
if (expectEXT(ro.ui, 10) == 10 ||
|
||||
expectEXT(ro.uv2, uvec2(11, 22)) == uvec2(11, 22) ||
|
||||
expectEXT(ro.uv3, uvec3(11, 22, 33)) == uvec3(11, 22, 33) ||
|
||||
expectEXT(ro.uv4, uvec4(11, 22, 33, 44)) == uvec4(11, 22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
}
|
101
Test/spv.expect_assume.expectEXT.exttypes.comp
Normal file
101
Test/spv.expect_assume.expectEXT.exttypes.comp
Normal file
@ -0,0 +1,101 @@
|
||||
#version 450
|
||||
|
||||
#extension GL_EXT_expect_assume: enable
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types: enable
|
||||
|
||||
layout (local_size_x = 8) in;
|
||||
|
||||
readonly buffer roblock {
|
||||
int8_t i8;
|
||||
i8vec2 i8v2;
|
||||
i8vec3 i8v3;
|
||||
i8vec4 i8v4;
|
||||
uint8_t u8;
|
||||
u8vec2 u8v2;
|
||||
u8vec3 u8v3;
|
||||
u8vec4 u8v4;
|
||||
int16_t i16;
|
||||
i16vec2 i16v2;
|
||||
i16vec3 i16v3;
|
||||
i16vec4 i16v4;
|
||||
uint16_t u16;
|
||||
u16vec2 u16v2;
|
||||
u16vec3 u16v3;
|
||||
u16vec4 u16v4;
|
||||
int32_t i32;
|
||||
i32vec2 i32v2;
|
||||
i32vec3 i32v3;
|
||||
i32vec4 i32v4;
|
||||
uint32_t u32;
|
||||
u32vec2 u32v2;
|
||||
u32vec3 u32v3;
|
||||
u32vec4 u32v4;
|
||||
int64_t i64;
|
||||
i64vec2 i64v2;
|
||||
i64vec3 i64v3;
|
||||
i64vec4 i64v4;
|
||||
uint64_t u64;
|
||||
u64vec2 u64v2;
|
||||
u64vec3 u64v3;
|
||||
u64vec4 u64v4;
|
||||
} ro;
|
||||
|
||||
void main() {
|
||||
int x = 0;
|
||||
|
||||
// 8-bit
|
||||
if (expectEXT(ro.i8, 10) == 10 ||
|
||||
expectEXT(ro.i8v2, i8vec2(11, -22)) == i8vec2(11, -22) ||
|
||||
expectEXT(ro.i8v3, i8vec3(11, -22, 33)) == i8vec3(11, -22, 33) ||
|
||||
expectEXT(ro.i8v4, i8vec4(11, -22, 33, 44)) == i8vec4(11, -22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
if (expectEXT(ro.u8, 10) == 10 ||
|
||||
expectEXT(ro.u8v2, u8vec2(11, 22)) == u8vec2(11, 22) ||
|
||||
expectEXT(ro.u8v3, u8vec3(11, 22, 33)) == u8vec3(11, 22, 33) ||
|
||||
expectEXT(ro.u8v4, u8vec4(11, 22, 33, 44)) == u8vec4(11, 22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
|
||||
// 16-bit
|
||||
if (expectEXT(ro.i16, 10) == 10 ||
|
||||
expectEXT(ro.i16v2, i16vec2(11, -22)) == i16vec2(11, -22) ||
|
||||
expectEXT(ro.i16v3, i16vec3(11, -22, 33)) == i16vec3(11, -22, 33) ||
|
||||
expectEXT(ro.i16v4, i16vec4(11, -22, 33, 44)) == i16vec4(11, -22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
if (expectEXT(ro.u16, 10) == 10 ||
|
||||
expectEXT(ro.u16v2, u16vec2(11, 22)) == u16vec2(11, 22) ||
|
||||
expectEXT(ro.u16v3, u16vec3(11, 22, 33)) == u16vec3(11, 22, 33) ||
|
||||
expectEXT(ro.u16v4, u16vec4(11, 22, 33, 44)) == u16vec4(11, 22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
|
||||
// 32-bit
|
||||
if (expectEXT(ro.i32, 10) == 10 ||
|
||||
expectEXT(ro.i32v2, i32vec2(11, -22)) == i32vec2(11, -22) ||
|
||||
expectEXT(ro.i32v3, i32vec3(11, -22, 33)) == i32vec3(11, -22, 33) ||
|
||||
expectEXT(ro.i32v4, i32vec4(11, -22, 33, 44)) == i32vec4(11, -22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
if (expectEXT(ro.u32, 10) == 10 ||
|
||||
expectEXT(ro.u32v2, u32vec2(11, 22)) == u32vec2(11, 22) ||
|
||||
expectEXT(ro.u32v3, u32vec3(11, 22, 33)) == u32vec3(11, 22, 33) ||
|
||||
expectEXT(ro.u32v4, u32vec4(11, 22, 33, 44)) == u32vec4(11, 22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
|
||||
// 64-bit
|
||||
if (expectEXT(ro.i64, 10) == 10 ||
|
||||
expectEXT(ro.i64v2, i64vec2(11, -22)) == i64vec2(11, -22) ||
|
||||
expectEXT(ro.i64v3, i64vec3(11, -22, 33)) == i64vec3(11, -22, 33) ||
|
||||
expectEXT(ro.i64v4, i64vec4(11, -22, 33, 44)) == i64vec4(11, -22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
if (expectEXT(ro.u64, 10) == 10 ||
|
||||
expectEXT(ro.u64v2, u64vec2(11, 22)) == u64vec2(11, 22) ||
|
||||
expectEXT(ro.u64v3, u64vec3(11, 22, 33)) == u64vec3(11, 22, 33) ||
|
||||
expectEXT(ro.u64v4, u64vec4(11, 22, 33, 44)) == u64vec4(11, 22, 33, 44)) {
|
||||
x++;
|
||||
}
|
||||
}
|
@ -1091,6 +1091,10 @@ enum TOperator {
|
||||
EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()).
|
||||
EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
|
||||
|
||||
// GL_EXT_expect_assume
|
||||
EOpAssumeEXT,
|
||||
EOpExpectEXT,
|
||||
|
||||
// Shader Clock Ops
|
||||
EOpReadClockSubgroupKHR,
|
||||
EOpReadClockDeviceKHR,
|
||||
|
@ -4118,6 +4118,37 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
||||
"u16vec4 unpack16(uint64_t);"
|
||||
"i32vec2 unpack32(int64_t);"
|
||||
"u32vec2 unpack32(uint64_t);"
|
||||
|
||||
// GL_EXT_expect_assume
|
||||
"int8_t expectEXT(int8_t, int8_t);"
|
||||
"i8vec2 expectEXT(i8vec2, i8vec2);"
|
||||
"i8vec3 expectEXT(i8vec3, i8vec3);"
|
||||
"i8vec4 expectEXT(i8vec4, i8vec4);"
|
||||
|
||||
"uint8_t expectEXT(uint8_t, uint8_t);"
|
||||
"u8vec2 expectEXT(u8vec2, u8vec2);"
|
||||
"u8vec3 expectEXT(u8vec3, u8vec3);"
|
||||
"u8vec4 expectEXT(u8vec4, u8vec4);"
|
||||
|
||||
"int16_t expectEXT(int16_t, int16_t);"
|
||||
"i16vec2 expectEXT(i16vec2, i16vec2);"
|
||||
"i16vec3 expectEXT(i16vec3, i16vec3);"
|
||||
"i16vec4 expectEXT(i16vec4, i16vec4);"
|
||||
|
||||
"uint16_t expectEXT(uint16_t, uint16_t);"
|
||||
"u16vec2 expectEXT(u16vec2, u16vec2);"
|
||||
"u16vec3 expectEXT(u16vec3, u16vec3);"
|
||||
"u16vec4 expectEXT(u16vec4, u16vec4);"
|
||||
|
||||
"int64_t expectEXT(int64_t, int64_t);"
|
||||
"i64vec2 expectEXT(i64vec2, i64vec2);"
|
||||
"i64vec3 expectEXT(i64vec3, i64vec3);"
|
||||
"i64vec4 expectEXT(i64vec4, i64vec4);"
|
||||
|
||||
"uint64_t expectEXT(uint64_t, uint64_t);"
|
||||
"u64vec2 expectEXT(u64vec2, u64vec2);"
|
||||
"u64vec3 expectEXT(u64vec3, u64vec3);"
|
||||
"u64vec4 expectEXT(u64vec4, u64vec4);"
|
||||
"\n");
|
||||
}
|
||||
|
||||
@ -4156,6 +4187,29 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
||||
|
||||
}
|
||||
|
||||
// GL_EXT_expect_assume
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
((profile != EEsProfile && version >= 140))) {
|
||||
commonBuiltins.append(
|
||||
"void assumeEXT(bool);"
|
||||
|
||||
"bool expectEXT(bool, bool);"
|
||||
"bvec2 expectEXT(bvec2, bvec2);"
|
||||
"bvec3 expectEXT(bvec3, bvec3);"
|
||||
"bvec4 expectEXT(bvec4, bvec4);"
|
||||
|
||||
"int expectEXT(int, int);"
|
||||
"ivec2 expectEXT(ivec2, ivec2);"
|
||||
"ivec3 expectEXT(ivec3, ivec3);"
|
||||
"ivec4 expectEXT(ivec4, ivec4);"
|
||||
|
||||
"uint expectEXT(uint, uint);"
|
||||
"uvec2 expectEXT(uvec2, uvec2);"
|
||||
"uvec3 expectEXT(uvec3, uvec3);"
|
||||
"uvec4 expectEXT(uvec4, uvec4);"
|
||||
"\n");
|
||||
}
|
||||
|
||||
// QCOM_image_processing
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 140)) {
|
||||
@ -8631,6 +8685,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
||||
BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
|
||||
}
|
||||
|
||||
// GL_EXT_expect_assume
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 140)) {
|
||||
symbolTable.setFunctionExtensions("assumeEXT", 1, &E_GL_EXT_expect_assume);
|
||||
symbolTable.setFunctionExtensions("expectEXT", 1, &E_GL_EXT_expect_assume);
|
||||
}
|
||||
|
||||
// GL_KHR_shader_subgroup
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 140)) {
|
||||
@ -9732,6 +9793,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
||||
symbolTable.relateToOperator("averageRounded", EOpAverageRounded);
|
||||
symbolTable.relateToOperator("multiply32x16", EOpMul32x16);
|
||||
symbolTable.relateToOperator("debugPrintfEXT", EOpDebugPrintf);
|
||||
symbolTable.relateToOperator("assumeEXT", EOpAssumeEXT);
|
||||
symbolTable.relateToOperator("expectEXT", EOpExpectEXT);
|
||||
|
||||
|
||||
if (PureOperatorBuiltins) {
|
||||
|
@ -262,6 +262,7 @@ void TParseVersions::initializeExtensionBehavior()
|
||||
extensionBehavior[E_GL_EXT_maximal_reconvergence] = EBhDisable;
|
||||
|
||||
extensionBehavior[E_GL_EXT_fragment_shader_barycentric] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_expect_assume] = EBhDisable;
|
||||
|
||||
extensionBehavior[E_GL_KHR_cooperative_matrix] = EBhDisable;
|
||||
|
||||
|
@ -220,6 +220,7 @@ const char* const E_GL_EXT_shader_quad_control = "GL_EXT_shader_qua
|
||||
const char* const E_GL_EXT_draw_instanced = "GL_EXT_draw_instanced";
|
||||
const char* const E_GL_EXT_texture_array = "GL_EXT_texture_array";
|
||||
const char* const E_GL_EXT_maximal_reconvergence = "GL_EXT_maximal_reconvergence";
|
||||
const char* const E_GL_EXT_expect_assume = "GL_EXT_expect_assume";
|
||||
|
||||
// Arrays of extensions for the above viewportEXTs duplications
|
||||
|
||||
|
@ -384,6 +384,9 @@ INSTANTIATE_TEST_SUITE_P(
|
||||
"spv.discard-dce.frag",
|
||||
"spv.doWhileLoop.frag",
|
||||
"spv.earlyReturnDiscard.frag",
|
||||
"spv.expect_assume.assumeEXT.comp",
|
||||
"spv.expect_assume.expectEXT.comp",
|
||||
"spv.expect_assume.expectEXT.exttypes.comp",
|
||||
"spv.ext.ShaderTileImage.color.frag",
|
||||
"spv.ext.ShaderTileImage.depth_stencil.frag",
|
||||
"spv.ext.ShaderTileImage.subpassinput.frag",
|
||||
|
Loading…
Reference in New Issue
Block a user