Add GL_KHR_shader_subgroup_rotate support

Co-authored-by: Neil Hickey <neil.hickey@arm.com>
Co-authored-by: Stuart Brady <stuart.brady@arm.com>
Signed-off-by: Sven van Haastregt <sven.vanhaastregt@arm.com>
This commit is contained in:
Sven van Haastregt 2024-02-06 15:20:16 +00:00 committed by arcady-lunarg
parent 8c3dbb3596
commit b1f7affe94
20 changed files with 5765 additions and 7 deletions

View File

@ -1,5 +1,6 @@
/*
** Copyright (c) 2014-2020 The Khronos Group Inc.
** Copyright (C) 2022-2024 Arm Limited.
** Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
**
** Permission is hereby granted, free of charge, to any person obtaining a copy
@ -58,5 +59,6 @@ static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_A
static const char* const E_SPV_KHR_ray_tracing_position_fetch = "SPV_KHR_ray_tracing_position_fetch";
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";
#endif // #ifndef GLSLextKHR_H

View File

@ -1,7 +1,7 @@
//
// Copyright (C) 2014-2016 LunarG, Inc.
// Copyright (C) 2015-2020 Google, Inc.
// Copyright (C) 2017 ARM Limited.
// Copyright (C) 2017, 2022-2024 Arm Limited.
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
//
// All rights reserved.
@ -8318,6 +8318,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
builder.addCapability(spv::CapabilityGroupNonUniform);
builder.addCapability(spv::CapabilityGroupNonUniformBallot);
break;
case glslang::EOpSubgroupRotate:
case glslang::EOpSubgroupClusteredRotate:
builder.addExtension(spv::E_SPV_KHR_subgroup_rotate);
builder.addCapability(spv::CapabilityGroupNonUniformRotateKHR);
break;
case glslang::EOpSubgroupShuffle:
case glslang::EOpSubgroupShuffleXor:
builder.addCapability(spv::CapabilityGroupNonUniform);
@ -8425,6 +8430,8 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupShuffleXor: opCode = spv::OpGroupNonUniformShuffleXor; break;
case glslang::EOpSubgroupShuffleUp: opCode = spv::OpGroupNonUniformShuffleUp; break;
case glslang::EOpSubgroupShuffleDown: opCode = spv::OpGroupNonUniformShuffleDown; break;
case glslang::EOpSubgroupRotate:
case glslang::EOpSubgroupClusteredRotate: opCode = spv::OpGroupNonUniformRotateKHR; break;
case glslang::EOpSubgroupAdd:
case glslang::EOpSubgroupInclusiveAdd:
case glslang::EOpSubgroupExclusiveAdd:
@ -8851,6 +8858,8 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpSubgroupShuffleXor:
case glslang::EOpSubgroupShuffleUp:
case glslang::EOpSubgroupShuffleDown:
case glslang::EOpSubgroupRotate:
case glslang::EOpSubgroupClusteredRotate:
case glslang::EOpSubgroupClusteredAdd:
case glslang::EOpSubgroupClusteredMul:
case glslang::EOpSubgroupClusteredMin:

View File

@ -1,5 +1,6 @@
//
// Copyright (C) 2014-2015 LunarG, Inc.
// Copyright (C) 2022-2024 Arm Limited.
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
//
// All rights reserved.
@ -942,6 +943,7 @@ const char* CapabilityString(int info)
case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
case CapabilityDrawParameters: return "DrawParameters";
case CapabilitySubgroupVoteKHR: return "SubgroupVoteKHR";
case CapabilityGroupNonUniformRotateKHR: return "CapabilityGroupNonUniformRotateKHR";
case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16";
case CapabilityStorageUniform16: return "StorageUniform16";
@ -1483,6 +1485,8 @@ const char* OpcodeString(int op)
case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT";
case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT";
case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR";
case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR";
case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
@ -2901,6 +2905,11 @@ void Parameterize()
InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'X'");
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'Delta'");
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,711 @@
spv.subgroupExtendedTypesRotate.comp
// Module Version 10300
// Generated by (magic number): 8000b
// Id's are bound by 553
Capability Shader
Capability Float16
Capability Int64
Capability Int16
Capability Int8
Capability StorageUniformBufferBlock16
Capability StorageBuffer8BitAccess
Capability CapabilityGroupNonUniformRotateKHR
Extension "SPV_KHR_8bit_storage"
Extension "SPV_KHR_subgroup_rotate"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main"
ExecutionMode 4 LocalSize 8 1 1
Source GLSL 450
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
SourceExtension "GL_KHR_shader_subgroup_rotate"
Name 4 "main"
Name 8 "delta"
Name 9 "roblock"
MemberName 9(roblock) 0 "delta"
Name 11 "ro"
Name 31 "Buffers"
MemberName 31(Buffers) 0 "i8"
MemberName 31(Buffers) 1 "u8"
MemberName 31(Buffers) 2 "i16"
MemberName 31(Buffers) 3 "u16"
MemberName 31(Buffers) 4 "i64"
MemberName 31(Buffers) 5 "u64"
MemberName 31(Buffers) 6 "f16"
Name 35 "data"
MemberDecorate 9(roblock) 0 NonWritable
MemberDecorate 9(roblock) 0 Offset 0
Decorate 9(roblock) Block
Decorate 11(ro) DescriptorSet 0
Decorate 11(ro) Binding 1
MemberDecorate 31(Buffers) 0 Offset 0
MemberDecorate 31(Buffers) 1 Offset 4
MemberDecorate 31(Buffers) 2 Offset 8
MemberDecorate 31(Buffers) 3 Offset 16
MemberDecorate 31(Buffers) 4 Offset 32
MemberDecorate 31(Buffers) 5 Offset 64
MemberDecorate 31(Buffers) 6 Offset 96
Decorate 31(Buffers) Block
Decorate 35(data) DescriptorSet 0
Decorate 35(data) Binding 0
Decorate 552 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypePointer Function 6(int)
9(roblock): TypeStruct 6(int)
10: TypePointer StorageBuffer 9(roblock)
11(ro): 10(ptr) Variable StorageBuffer
12: TypeInt 32 1
13: 12(int) Constant 0
14: TypePointer StorageBuffer 6(int)
17: TypeInt 8 1
18: TypeVector 17(int8_t) 4
19: TypeInt 8 0
20: TypeVector 19(int8_t) 4
21: TypeInt 16 1
22: TypeVector 21(int16_t) 4
23: TypeInt 16 0
24: TypeVector 23(int16_t) 4
25: TypeInt 64 1
26: TypeVector 25(int64_t) 4
27: TypeInt 64 0
28: TypeVector 27(int64_t) 4
29: TypeFloat 16
30: TypeVector 29(float16_t) 4
31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
32: 6(int) Constant 4
33: TypeArray 31(Buffers) 32
34: TypePointer StorageBuffer 33
35(data): 34(ptr) Variable StorageBuffer
37: 6(int) Constant 0
38: TypePointer StorageBuffer 17(int8_t)
42: 6(int) Constant 3
46: 12(int) Constant 1
47: TypeVector 17(int8_t) 2
48: TypePointer StorageBuffer 18(i8vec4)
56: 6(int) Constant 1
60: 12(int) Constant 2
61: TypeVector 17(int8_t) 3
71: 6(int) Constant 2
75: 12(int) Constant 3
116: TypePointer StorageBuffer 19(int8_t)
123: TypeVector 19(int8_t) 2
124: TypePointer StorageBuffer 20(i8vec4)
135: TypeVector 19(int8_t) 3
188: TypePointer StorageBuffer 21(int16_t)
195: TypeVector 21(int16_t) 2
196: TypePointer StorageBuffer 22(i16vec4)
207: TypeVector 21(int16_t) 3
260: TypePointer StorageBuffer 23(int16_t)
267: TypeVector 23(int16_t) 2
268: TypePointer StorageBuffer 24(i16vec4)
279: TypeVector 23(int16_t) 3
332: 12(int) Constant 4
333: TypePointer StorageBuffer 25(int64_t)
340: TypeVector 25(int64_t) 2
341: TypePointer StorageBuffer 26(i64vec4)
352: TypeVector 25(int64_t) 3
405: 12(int) Constant 5
406: TypePointer StorageBuffer 27(int64_t)
413: TypeVector 27(int64_t) 2
414: TypePointer StorageBuffer 28(i64vec4)
425: TypeVector 27(int64_t) 3
478: 12(int) Constant 6
479: TypePointer StorageBuffer 29(float16_t)
486: TypeVector 29(float16_t) 2
487: TypePointer StorageBuffer 30(f16vec4)
498: TypeVector 29(float16_t) 3
550: TypeVector 6(int) 3
551: 6(int) Constant 8
552: 550(ivec3) ConstantComposite 551 56 56
4(main): 2 Function None 3
5: Label
8(delta): 7(ptr) Variable Function
15: 14(ptr) AccessChain 11(ro) 13
16: 6(int) Load 15
Store 8(delta) 16
36: 6(int) Load 8(delta)
39: 38(ptr) AccessChain 35(data) 13 13 37
40: 17(int8_t) Load 39
41: 6(int) Load 8(delta)
43: 17(int8_t) GroupNonUniformRotateKHR 42 40 41
44: 38(ptr) AccessChain 35(data) 36 13 37
Store 44 43
45: 6(int) Load 8(delta)
49: 48(ptr) AccessChain 35(data) 46 13
50: 18(i8vec4) Load 49
51: 47(i8vec2) VectorShuffle 50 50 0 1
52: 6(int) Load 8(delta)
53: 47(i8vec2) GroupNonUniformRotateKHR 42 51 52
54: 38(ptr) AccessChain 35(data) 45 13 37
55: 17(int8_t) CompositeExtract 53 0
Store 54 55
57: 38(ptr) AccessChain 35(data) 45 13 56
58: 17(int8_t) CompositeExtract 53 1
Store 57 58
59: 6(int) Load 8(delta)
62: 48(ptr) AccessChain 35(data) 60 13
63: 18(i8vec4) Load 62
64: 61(i8vec3) VectorShuffle 63 63 0 1 2
65: 6(int) Load 8(delta)
66: 61(i8vec3) GroupNonUniformRotateKHR 42 64 65
67: 38(ptr) AccessChain 35(data) 59 13 37
68: 17(int8_t) CompositeExtract 66 0
Store 67 68
69: 38(ptr) AccessChain 35(data) 59 13 56
70: 17(int8_t) CompositeExtract 66 1
Store 69 70
72: 38(ptr) AccessChain 35(data) 59 13 71
73: 17(int8_t) CompositeExtract 66 2
Store 72 73
74: 6(int) Load 8(delta)
76: 48(ptr) AccessChain 35(data) 75 13
77: 18(i8vec4) Load 76
78: 6(int) Load 8(delta)
79: 18(i8vec4) GroupNonUniformRotateKHR 42 77 78
80: 48(ptr) AccessChain 35(data) 74 13
Store 80 79
81: 6(int) Load 8(delta)
82: 38(ptr) AccessChain 35(data) 13 13 37
83: 17(int8_t) Load 82
84: 6(int) Load 8(delta)
85: 17(int8_t) GroupNonUniformRotateKHR 42 83 84 56
86: 38(ptr) AccessChain 35(data) 81 13 37
Store 86 85
87: 6(int) Load 8(delta)
88: 48(ptr) AccessChain 35(data) 46 13
89: 18(i8vec4) Load 88
90: 47(i8vec2) VectorShuffle 89 89 0 1
91: 6(int) Load 8(delta)
92: 47(i8vec2) GroupNonUniformRotateKHR 42 90 91 56
93: 38(ptr) AccessChain 35(data) 87 13 37
94: 17(int8_t) CompositeExtract 92 0
Store 93 94
95: 38(ptr) AccessChain 35(data) 87 13 56
96: 17(int8_t) CompositeExtract 92 1
Store 95 96
97: 6(int) Load 8(delta)
98: 48(ptr) AccessChain 35(data) 60 13
99: 18(i8vec4) Load 98
100: 61(i8vec3) VectorShuffle 99 99 0 1 2
101: 6(int) Load 8(delta)
102: 61(i8vec3) GroupNonUniformRotateKHR 42 100 101 56
103: 38(ptr) AccessChain 35(data) 97 13 37
104: 17(int8_t) CompositeExtract 102 0
Store 103 104
105: 38(ptr) AccessChain 35(data) 97 13 56
106: 17(int8_t) CompositeExtract 102 1
Store 105 106
107: 38(ptr) AccessChain 35(data) 97 13 71
108: 17(int8_t) CompositeExtract 102 2
Store 107 108
109: 6(int) Load 8(delta)
110: 48(ptr) AccessChain 35(data) 75 13
111: 18(i8vec4) Load 110
112: 6(int) Load 8(delta)
113: 18(i8vec4) GroupNonUniformRotateKHR 42 111 112 56
114: 48(ptr) AccessChain 35(data) 109 13
Store 114 113
115: 6(int) Load 8(delta)
117: 116(ptr) AccessChain 35(data) 13 46 37
118: 19(int8_t) Load 117
119: 6(int) Load 8(delta)
120: 19(int8_t) GroupNonUniformRotateKHR 42 118 119
121: 116(ptr) AccessChain 35(data) 115 46 37
Store 121 120
122: 6(int) Load 8(delta)
125: 124(ptr) AccessChain 35(data) 46 46
126: 20(i8vec4) Load 125
127: 123(i8vec2) VectorShuffle 126 126 0 1
128: 6(int) Load 8(delta)
129: 123(i8vec2) GroupNonUniformRotateKHR 42 127 128
130: 116(ptr) AccessChain 35(data) 122 46 37
131: 19(int8_t) CompositeExtract 129 0
Store 130 131
132: 116(ptr) AccessChain 35(data) 122 46 56
133: 19(int8_t) CompositeExtract 129 1
Store 132 133
134: 6(int) Load 8(delta)
136: 124(ptr) AccessChain 35(data) 60 46
137: 20(i8vec4) Load 136
138: 135(i8vec3) VectorShuffle 137 137 0 1 2
139: 6(int) Load 8(delta)
140: 135(i8vec3) GroupNonUniformRotateKHR 42 138 139
141: 116(ptr) AccessChain 35(data) 134 46 37
142: 19(int8_t) CompositeExtract 140 0
Store 141 142
143: 116(ptr) AccessChain 35(data) 134 46 56
144: 19(int8_t) CompositeExtract 140 1
Store 143 144
145: 116(ptr) AccessChain 35(data) 134 46 71
146: 19(int8_t) CompositeExtract 140 2
Store 145 146
147: 6(int) Load 8(delta)
148: 124(ptr) AccessChain 35(data) 75 46
149: 20(i8vec4) Load 148
150: 6(int) Load 8(delta)
151: 20(i8vec4) GroupNonUniformRotateKHR 42 149 150
152: 124(ptr) AccessChain 35(data) 147 46
Store 152 151
153: 6(int) Load 8(delta)
154: 116(ptr) AccessChain 35(data) 13 46 37
155: 19(int8_t) Load 154
156: 6(int) Load 8(delta)
157: 19(int8_t) GroupNonUniformRotateKHR 42 155 156 56
158: 116(ptr) AccessChain 35(data) 153 46 37
Store 158 157
159: 6(int) Load 8(delta)
160: 124(ptr) AccessChain 35(data) 46 46
161: 20(i8vec4) Load 160
162: 123(i8vec2) VectorShuffle 161 161 0 1
163: 6(int) Load 8(delta)
164: 123(i8vec2) GroupNonUniformRotateKHR 42 162 163 56
165: 116(ptr) AccessChain 35(data) 159 46 37
166: 19(int8_t) CompositeExtract 164 0
Store 165 166
167: 116(ptr) AccessChain 35(data) 159 46 56
168: 19(int8_t) CompositeExtract 164 1
Store 167 168
169: 6(int) Load 8(delta)
170: 124(ptr) AccessChain 35(data) 60 46
171: 20(i8vec4) Load 170
172: 135(i8vec3) VectorShuffle 171 171 0 1 2
173: 6(int) Load 8(delta)
174: 135(i8vec3) GroupNonUniformRotateKHR 42 172 173 56
175: 116(ptr) AccessChain 35(data) 169 46 37
176: 19(int8_t) CompositeExtract 174 0
Store 175 176
177: 116(ptr) AccessChain 35(data) 169 46 56
178: 19(int8_t) CompositeExtract 174 1
Store 177 178
179: 116(ptr) AccessChain 35(data) 169 46 71
180: 19(int8_t) CompositeExtract 174 2
Store 179 180
181: 6(int) Load 8(delta)
182: 124(ptr) AccessChain 35(data) 75 46
183: 20(i8vec4) Load 182
184: 6(int) Load 8(delta)
185: 20(i8vec4) GroupNonUniformRotateKHR 42 183 184 56
186: 124(ptr) AccessChain 35(data) 181 46
Store 186 185
187: 6(int) Load 8(delta)
189: 188(ptr) AccessChain 35(data) 13 60 37
190: 21(int16_t) Load 189
191: 6(int) Load 8(delta)
192: 21(int16_t) GroupNonUniformRotateKHR 42 190 191
193: 188(ptr) AccessChain 35(data) 187 60 37
Store 193 192
194: 6(int) Load 8(delta)
197: 196(ptr) AccessChain 35(data) 46 60
198: 22(i16vec4) Load 197
199:195(i16vec2) VectorShuffle 198 198 0 1
200: 6(int) Load 8(delta)
201:195(i16vec2) GroupNonUniformRotateKHR 42 199 200
202: 188(ptr) AccessChain 35(data) 194 60 37
203: 21(int16_t) CompositeExtract 201 0
Store 202 203
204: 188(ptr) AccessChain 35(data) 194 60 56
205: 21(int16_t) CompositeExtract 201 1
Store 204 205
206: 6(int) Load 8(delta)
208: 196(ptr) AccessChain 35(data) 60 60
209: 22(i16vec4) Load 208
210:207(i16vec3) VectorShuffle 209 209 0 1 2
211: 6(int) Load 8(delta)
212:207(i16vec3) GroupNonUniformRotateKHR 42 210 211
213: 188(ptr) AccessChain 35(data) 206 60 37
214: 21(int16_t) CompositeExtract 212 0
Store 213 214
215: 188(ptr) AccessChain 35(data) 206 60 56
216: 21(int16_t) CompositeExtract 212 1
Store 215 216
217: 188(ptr) AccessChain 35(data) 206 60 71
218: 21(int16_t) CompositeExtract 212 2
Store 217 218
219: 6(int) Load 8(delta)
220: 196(ptr) AccessChain 35(data) 75 60
221: 22(i16vec4) Load 220
222: 6(int) Load 8(delta)
223: 22(i16vec4) GroupNonUniformRotateKHR 42 221 222
224: 196(ptr) AccessChain 35(data) 219 60
Store 224 223
225: 6(int) Load 8(delta)
226: 188(ptr) AccessChain 35(data) 13 60 37
227: 21(int16_t) Load 226
228: 6(int) Load 8(delta)
229: 21(int16_t) GroupNonUniformRotateKHR 42 227 228 56
230: 188(ptr) AccessChain 35(data) 225 60 37
Store 230 229
231: 6(int) Load 8(delta)
232: 196(ptr) AccessChain 35(data) 46 60
233: 22(i16vec4) Load 232
234:195(i16vec2) VectorShuffle 233 233 0 1
235: 6(int) Load 8(delta)
236:195(i16vec2) GroupNonUniformRotateKHR 42 234 235 56
237: 188(ptr) AccessChain 35(data) 231 60 37
238: 21(int16_t) CompositeExtract 236 0
Store 237 238
239: 188(ptr) AccessChain 35(data) 231 60 56
240: 21(int16_t) CompositeExtract 236 1
Store 239 240
241: 6(int) Load 8(delta)
242: 196(ptr) AccessChain 35(data) 60 60
243: 22(i16vec4) Load 242
244:207(i16vec3) VectorShuffle 243 243 0 1 2
245: 6(int) Load 8(delta)
246:207(i16vec3) GroupNonUniformRotateKHR 42 244 245 56
247: 188(ptr) AccessChain 35(data) 241 60 37
248: 21(int16_t) CompositeExtract 246 0
Store 247 248
249: 188(ptr) AccessChain 35(data) 241 60 56
250: 21(int16_t) CompositeExtract 246 1
Store 249 250
251: 188(ptr) AccessChain 35(data) 241 60 71
252: 21(int16_t) CompositeExtract 246 2
Store 251 252
253: 6(int) Load 8(delta)
254: 196(ptr) AccessChain 35(data) 75 60
255: 22(i16vec4) Load 254
256: 6(int) Load 8(delta)
257: 22(i16vec4) GroupNonUniformRotateKHR 42 255 256 56
258: 196(ptr) AccessChain 35(data) 253 60
Store 258 257
259: 6(int) Load 8(delta)
261: 260(ptr) AccessChain 35(data) 13 75 37
262: 23(int16_t) Load 261
263: 6(int) Load 8(delta)
264: 23(int16_t) GroupNonUniformRotateKHR 42 262 263
265: 260(ptr) AccessChain 35(data) 259 75 37
Store 265 264
266: 6(int) Load 8(delta)
269: 268(ptr) AccessChain 35(data) 46 75
270: 24(i16vec4) Load 269
271:267(i16vec2) VectorShuffle 270 270 0 1
272: 6(int) Load 8(delta)
273:267(i16vec2) GroupNonUniformRotateKHR 42 271 272
274: 260(ptr) AccessChain 35(data) 266 75 37
275: 23(int16_t) CompositeExtract 273 0
Store 274 275
276: 260(ptr) AccessChain 35(data) 266 75 56
277: 23(int16_t) CompositeExtract 273 1
Store 276 277
278: 6(int) Load 8(delta)
280: 268(ptr) AccessChain 35(data) 60 75
281: 24(i16vec4) Load 280
282:279(i16vec3) VectorShuffle 281 281 0 1 2
283: 6(int) Load 8(delta)
284:279(i16vec3) GroupNonUniformRotateKHR 42 282 283
285: 260(ptr) AccessChain 35(data) 278 75 37
286: 23(int16_t) CompositeExtract 284 0
Store 285 286
287: 260(ptr) AccessChain 35(data) 278 75 56
288: 23(int16_t) CompositeExtract 284 1
Store 287 288
289: 260(ptr) AccessChain 35(data) 278 75 71
290: 23(int16_t) CompositeExtract 284 2
Store 289 290
291: 6(int) Load 8(delta)
292: 268(ptr) AccessChain 35(data) 75 75
293: 24(i16vec4) Load 292
294: 6(int) Load 8(delta)
295: 24(i16vec4) GroupNonUniformRotateKHR 42 293 294
296: 268(ptr) AccessChain 35(data) 291 75
Store 296 295
297: 6(int) Load 8(delta)
298: 260(ptr) AccessChain 35(data) 13 75 37
299: 23(int16_t) Load 298
300: 6(int) Load 8(delta)
301: 23(int16_t) GroupNonUniformRotateKHR 42 299 300 56
302: 260(ptr) AccessChain 35(data) 297 75 37
Store 302 301
303: 6(int) Load 8(delta)
304: 268(ptr) AccessChain 35(data) 46 75
305: 24(i16vec4) Load 304
306:267(i16vec2) VectorShuffle 305 305 0 1
307: 6(int) Load 8(delta)
308:267(i16vec2) GroupNonUniformRotateKHR 42 306 307 56
309: 260(ptr) AccessChain 35(data) 303 75 37
310: 23(int16_t) CompositeExtract 308 0
Store 309 310
311: 260(ptr) AccessChain 35(data) 303 75 56
312: 23(int16_t) CompositeExtract 308 1
Store 311 312
313: 6(int) Load 8(delta)
314: 268(ptr) AccessChain 35(data) 60 75
315: 24(i16vec4) Load 314
316:279(i16vec3) VectorShuffle 315 315 0 1 2
317: 6(int) Load 8(delta)
318:279(i16vec3) GroupNonUniformRotateKHR 42 316 317 56
319: 260(ptr) AccessChain 35(data) 313 75 37
320: 23(int16_t) CompositeExtract 318 0
Store 319 320
321: 260(ptr) AccessChain 35(data) 313 75 56
322: 23(int16_t) CompositeExtract 318 1
Store 321 322
323: 260(ptr) AccessChain 35(data) 313 75 71
324: 23(int16_t) CompositeExtract 318 2
Store 323 324
325: 6(int) Load 8(delta)
326: 268(ptr) AccessChain 35(data) 75 75
327: 24(i16vec4) Load 326
328: 6(int) Load 8(delta)
329: 24(i16vec4) GroupNonUniformRotateKHR 42 327 328 56
330: 268(ptr) AccessChain 35(data) 325 75
Store 330 329
331: 6(int) Load 8(delta)
334: 333(ptr) AccessChain 35(data) 13 332 37
335: 25(int64_t) Load 334
336: 6(int) Load 8(delta)
337: 25(int64_t) GroupNonUniformRotateKHR 42 335 336
338: 333(ptr) AccessChain 35(data) 331 332 37
Store 338 337
339: 6(int) Load 8(delta)
342: 341(ptr) AccessChain 35(data) 46 332
343: 26(i64vec4) Load 342
344:340(i64vec2) VectorShuffle 343 343 0 1
345: 6(int) Load 8(delta)
346:340(i64vec2) GroupNonUniformRotateKHR 42 344 345
347: 333(ptr) AccessChain 35(data) 339 332 37
348: 25(int64_t) CompositeExtract 346 0
Store 347 348
349: 333(ptr) AccessChain 35(data) 339 332 56
350: 25(int64_t) CompositeExtract 346 1
Store 349 350
351: 6(int) Load 8(delta)
353: 341(ptr) AccessChain 35(data) 60 332
354: 26(i64vec4) Load 353
355:352(i64vec3) VectorShuffle 354 354 0 1 2
356: 6(int) Load 8(delta)
357:352(i64vec3) GroupNonUniformRotateKHR 42 355 356
358: 333(ptr) AccessChain 35(data) 351 332 37
359: 25(int64_t) CompositeExtract 357 0
Store 358 359
360: 333(ptr) AccessChain 35(data) 351 332 56
361: 25(int64_t) CompositeExtract 357 1
Store 360 361
362: 333(ptr) AccessChain 35(data) 351 332 71
363: 25(int64_t) CompositeExtract 357 2
Store 362 363
364: 6(int) Load 8(delta)
365: 341(ptr) AccessChain 35(data) 75 332
366: 26(i64vec4) Load 365
367: 6(int) Load 8(delta)
368: 26(i64vec4) GroupNonUniformRotateKHR 42 366 367
369: 341(ptr) AccessChain 35(data) 364 332
Store 369 368
370: 6(int) Load 8(delta)
371: 333(ptr) AccessChain 35(data) 13 332 37
372: 25(int64_t) Load 371
373: 6(int) Load 8(delta)
374: 25(int64_t) GroupNonUniformRotateKHR 42 372 373 56
375: 333(ptr) AccessChain 35(data) 370 332 37
Store 375 374
376: 6(int) Load 8(delta)
377: 341(ptr) AccessChain 35(data) 46 332
378: 26(i64vec4) Load 377
379:340(i64vec2) VectorShuffle 378 378 0 1
380: 6(int) Load 8(delta)
381:340(i64vec2) GroupNonUniformRotateKHR 42 379 380 56
382: 333(ptr) AccessChain 35(data) 376 332 37
383: 25(int64_t) CompositeExtract 381 0
Store 382 383
384: 333(ptr) AccessChain 35(data) 376 332 56
385: 25(int64_t) CompositeExtract 381 1
Store 384 385
386: 6(int) Load 8(delta)
387: 341(ptr) AccessChain 35(data) 60 332
388: 26(i64vec4) Load 387
389:352(i64vec3) VectorShuffle 388 388 0 1 2
390: 6(int) Load 8(delta)
391:352(i64vec3) GroupNonUniformRotateKHR 42 389 390 56
392: 333(ptr) AccessChain 35(data) 386 332 37
393: 25(int64_t) CompositeExtract 391 0
Store 392 393
394: 333(ptr) AccessChain 35(data) 386 332 56
395: 25(int64_t) CompositeExtract 391 1
Store 394 395
396: 333(ptr) AccessChain 35(data) 386 332 71
397: 25(int64_t) CompositeExtract 391 2
Store 396 397
398: 6(int) Load 8(delta)
399: 341(ptr) AccessChain 35(data) 75 332
400: 26(i64vec4) Load 399
401: 6(int) Load 8(delta)
402: 26(i64vec4) GroupNonUniformRotateKHR 42 400 401 56
403: 341(ptr) AccessChain 35(data) 398 332
Store 403 402
404: 6(int) Load 8(delta)
407: 406(ptr) AccessChain 35(data) 13 405 37
408: 27(int64_t) Load 407
409: 6(int) Load 8(delta)
410: 27(int64_t) GroupNonUniformRotateKHR 42 408 409
411: 406(ptr) AccessChain 35(data) 404 405 37
Store 411 410
412: 6(int) Load 8(delta)
415: 414(ptr) AccessChain 35(data) 46 405
416: 28(i64vec4) Load 415
417:413(i64vec2) VectorShuffle 416 416 0 1
418: 6(int) Load 8(delta)
419:413(i64vec2) GroupNonUniformRotateKHR 42 417 418
420: 406(ptr) AccessChain 35(data) 412 405 37
421: 27(int64_t) CompositeExtract 419 0
Store 420 421
422: 406(ptr) AccessChain 35(data) 412 405 56
423: 27(int64_t) CompositeExtract 419 1
Store 422 423
424: 6(int) Load 8(delta)
426: 414(ptr) AccessChain 35(data) 60 405
427: 28(i64vec4) Load 426
428:425(i64vec3) VectorShuffle 427 427 0 1 2
429: 6(int) Load 8(delta)
430:425(i64vec3) GroupNonUniformRotateKHR 42 428 429
431: 406(ptr) AccessChain 35(data) 424 405 37
432: 27(int64_t) CompositeExtract 430 0
Store 431 432
433: 406(ptr) AccessChain 35(data) 424 405 56
434: 27(int64_t) CompositeExtract 430 1
Store 433 434
435: 406(ptr) AccessChain 35(data) 424 405 71
436: 27(int64_t) CompositeExtract 430 2
Store 435 436
437: 6(int) Load 8(delta)
438: 414(ptr) AccessChain 35(data) 75 405
439: 28(i64vec4) Load 438
440: 6(int) Load 8(delta)
441: 28(i64vec4) GroupNonUniformRotateKHR 42 439 440
442: 414(ptr) AccessChain 35(data) 437 405
Store 442 441
443: 6(int) Load 8(delta)
444: 406(ptr) AccessChain 35(data) 13 405 37
445: 27(int64_t) Load 444
446: 6(int) Load 8(delta)
447: 27(int64_t) GroupNonUniformRotateKHR 42 445 446 56
448: 406(ptr) AccessChain 35(data) 443 405 37
Store 448 447
449: 6(int) Load 8(delta)
450: 414(ptr) AccessChain 35(data) 46 405
451: 28(i64vec4) Load 450
452:413(i64vec2) VectorShuffle 451 451 0 1
453: 6(int) Load 8(delta)
454:413(i64vec2) GroupNonUniformRotateKHR 42 452 453 56
455: 406(ptr) AccessChain 35(data) 449 405 37
456: 27(int64_t) CompositeExtract 454 0
Store 455 456
457: 406(ptr) AccessChain 35(data) 449 405 56
458: 27(int64_t) CompositeExtract 454 1
Store 457 458
459: 6(int) Load 8(delta)
460: 414(ptr) AccessChain 35(data) 60 405
461: 28(i64vec4) Load 460
462:425(i64vec3) VectorShuffle 461 461 0 1 2
463: 6(int) Load 8(delta)
464:425(i64vec3) GroupNonUniformRotateKHR 42 462 463 56
465: 406(ptr) AccessChain 35(data) 459 405 37
466: 27(int64_t) CompositeExtract 464 0
Store 465 466
467: 406(ptr) AccessChain 35(data) 459 405 56
468: 27(int64_t) CompositeExtract 464 1
Store 467 468
469: 406(ptr) AccessChain 35(data) 459 405 71
470: 27(int64_t) CompositeExtract 464 2
Store 469 470
471: 6(int) Load 8(delta)
472: 414(ptr) AccessChain 35(data) 75 405
473: 28(i64vec4) Load 472
474: 6(int) Load 8(delta)
475: 28(i64vec4) GroupNonUniformRotateKHR 42 473 474 56
476: 414(ptr) AccessChain 35(data) 471 405
Store 476 475
477: 6(int) Load 8(delta)
480: 479(ptr) AccessChain 35(data) 13 478 37
481:29(float16_t) Load 480
482: 6(int) Load 8(delta)
483:29(float16_t) GroupNonUniformRotateKHR 42 481 482
484: 479(ptr) AccessChain 35(data) 477 478 37
Store 484 483
485: 6(int) Load 8(delta)
488: 487(ptr) AccessChain 35(data) 46 478
489: 30(f16vec4) Load 488
490:486(f16vec2) VectorShuffle 489 489 0 1
491: 6(int) Load 8(delta)
492:486(f16vec2) GroupNonUniformRotateKHR 42 490 491
493: 479(ptr) AccessChain 35(data) 485 478 37
494:29(float16_t) CompositeExtract 492 0
Store 493 494
495: 479(ptr) AccessChain 35(data) 485 478 56
496:29(float16_t) CompositeExtract 492 1
Store 495 496
497: 6(int) Load 8(delta)
499: 487(ptr) AccessChain 35(data) 60 478
500: 30(f16vec4) Load 499
501:498(f16vec3) VectorShuffle 500 500 0 1 2
502: 6(int) Load 8(delta)
503:498(f16vec3) GroupNonUniformRotateKHR 42 501 502
504: 479(ptr) AccessChain 35(data) 497 478 37
505:29(float16_t) CompositeExtract 503 0
Store 504 505
506: 479(ptr) AccessChain 35(data) 497 478 56
507:29(float16_t) CompositeExtract 503 1
Store 506 507
508: 479(ptr) AccessChain 35(data) 497 478 71
509:29(float16_t) CompositeExtract 503 2
Store 508 509
510: 6(int) Load 8(delta)
511: 487(ptr) AccessChain 35(data) 75 478
512: 30(f16vec4) Load 511
513: 6(int) Load 8(delta)
514: 30(f16vec4) GroupNonUniformRotateKHR 42 512 513
515: 487(ptr) AccessChain 35(data) 510 478
Store 515 514
516: 6(int) Load 8(delta)
517: 479(ptr) AccessChain 35(data) 13 478 37
518:29(float16_t) Load 517
519: 6(int) Load 8(delta)
520:29(float16_t) GroupNonUniformRotateKHR 42 518 519 56
521: 479(ptr) AccessChain 35(data) 516 478 37
Store 521 520
522: 6(int) Load 8(delta)
523: 487(ptr) AccessChain 35(data) 46 478
524: 30(f16vec4) Load 523
525:486(f16vec2) VectorShuffle 524 524 0 1
526: 6(int) Load 8(delta)
527:486(f16vec2) GroupNonUniformRotateKHR 42 525 526 56
528: 479(ptr) AccessChain 35(data) 522 478 37
529:29(float16_t) CompositeExtract 527 0
Store 528 529
530: 479(ptr) AccessChain 35(data) 522 478 56
531:29(float16_t) CompositeExtract 527 1
Store 530 531
532: 6(int) Load 8(delta)
533: 487(ptr) AccessChain 35(data) 60 478
534: 30(f16vec4) Load 533
535:498(f16vec3) VectorShuffle 534 534 0 1 2
536: 6(int) Load 8(delta)
537:498(f16vec3) GroupNonUniformRotateKHR 42 535 536 56
538: 479(ptr) AccessChain 35(data) 532 478 37
539:29(float16_t) CompositeExtract 537 0
Store 538 539
540: 479(ptr) AccessChain 35(data) 532 478 56
541:29(float16_t) CompositeExtract 537 1
Store 540 541
542: 479(ptr) AccessChain 35(data) 532 478 71
543:29(float16_t) CompositeExtract 537 2
Store 542 543
544: 6(int) Load 8(delta)
545: 487(ptr) AccessChain 35(data) 75 478
546: 30(f16vec4) Load 545
547: 6(int) Load 8(delta)
548: 30(f16vec4) GroupNonUniformRotateKHR 42 546 547 56
549: 487(ptr) AccessChain 35(data) 544 478
Store 549 548
Return
FunctionEnd

View File

@ -0,0 +1,61 @@
spv.subgroupExtendedTypesRotateNeg.comp
ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:46: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:47: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:48: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:56: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:57: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:58: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:66: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:67: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:68: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:76: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:77: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:78: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:86: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:87: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:88: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:96: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:97: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:98: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:99: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 56 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link

View File

@ -0,0 +1,528 @@
spv.subgroupRotate.comp
// Module Version 10300
// Generated by (magic number): 8000b
// Id's are bound by 418
Capability Shader
Capability Float64
Capability CapabilityGroupNonUniformRotateKHR
Extension "SPV_KHR_subgroup_rotate"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main"
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_rotate"
Name 4 "main"
Name 8 "delta"
Name 9 "roblock"
MemberName 9(roblock) 0 "delta"
Name 11 "ro"
Name 23 "Buffers"
MemberName 23(Buffers) 0 "f4"
MemberName 23(Buffers) 1 "i4"
MemberName 23(Buffers) 2 "u4"
MemberName 23(Buffers) 3 "d4"
Name 27 "data"
MemberDecorate 9(roblock) 0 NonWritable
MemberDecorate 9(roblock) 0 Offset 0
Decorate 9(roblock) Block
Decorate 11(ro) DescriptorSet 0
Decorate 11(ro) Binding 1
MemberDecorate 23(Buffers) 0 Offset 0
MemberDecorate 23(Buffers) 1 Offset 16
MemberDecorate 23(Buffers) 2 Offset 32
MemberDecorate 23(Buffers) 3 Offset 64
Decorate 23(Buffers) Block
Decorate 27(data) DescriptorSet 0
Decorate 27(data) Binding 0
Decorate 417 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypePointer Function 6(int)
9(roblock): TypeStruct 6(int)
10: TypePointer StorageBuffer 9(roblock)
11(ro): 10(ptr) Variable StorageBuffer
12: TypeInt 32 1
13: 12(int) Constant 0
14: TypePointer StorageBuffer 6(int)
17: TypeFloat 32
18: TypeVector 17(float) 4
19: TypeVector 12(int) 4
20: TypeVector 6(int) 4
21: TypeFloat 64
22: TypeVector 21(float64_t) 4
23(Buffers): TypeStruct 18(fvec4) 19(ivec4) 20(ivec4) 22(f64vec4)
24: 6(int) Constant 4
25: TypeArray 23(Buffers) 24
26: TypePointer StorageBuffer 25
27(data): 26(ptr) Variable StorageBuffer
29: 6(int) Constant 0
30: TypePointer StorageBuffer 17(float)
34: 6(int) Constant 3
38: 12(int) Constant 1
39: TypeVector 17(float) 2
40: TypePointer StorageBuffer 18(fvec4)
48: 6(int) Constant 1
52: 12(int) Constant 2
53: TypeVector 17(float) 3
63: 6(int) Constant 2
67: 12(int) Constant 3
74: TypePointer StorageBuffer 12(int)
81: TypeVector 12(int) 2
82: TypePointer StorageBuffer 19(ivec4)
93: TypeVector 12(int) 3
118: TypeVector 6(int) 2
119: TypePointer StorageBuffer 20(ivec4)
130: TypeVector 6(int) 3
149: TypePointer StorageBuffer 21(float64_t)
156: TypeVector 21(float64_t) 2
157: TypePointer StorageBuffer 22(f64vec4)
168: TypeVector 21(float64_t) 3
189: TypeBool
199: 81(ivec2) ConstantComposite 13 13
200: TypeVector 189(bool) 2
204: 81(ivec2) ConstantComposite 38 38
214: 93(ivec3) ConstantComposite 13 13 13
215: TypeVector 189(bool) 3
219: 93(ivec3) ConstantComposite 38 38 38
230: 19(ivec4) ConstantComposite 13 13 13 13
231: TypeVector 189(bool) 4
235: 19(ivec4) ConstantComposite 38 38 38 38
416: 6(int) Constant 8
417: 130(ivec3) ConstantComposite 416 416 48
4(main): 2 Function None 3
5: Label
8(delta): 7(ptr) Variable Function
15: 14(ptr) AccessChain 11(ro) 13
16: 6(int) Load 15
Store 8(delta) 16
28: 6(int) Load 8(delta)
31: 30(ptr) AccessChain 27(data) 13 13 29
32: 17(float) Load 31
33: 6(int) Load 8(delta)
35: 17(float) GroupNonUniformRotateKHR 34 32 33
36: 30(ptr) AccessChain 27(data) 28 13 29
Store 36 35
37: 6(int) Load 8(delta)
41: 40(ptr) AccessChain 27(data) 38 13
42: 18(fvec4) Load 41
43: 39(fvec2) VectorShuffle 42 42 0 1
44: 6(int) Load 8(delta)
45: 39(fvec2) GroupNonUniformRotateKHR 34 43 44
46: 30(ptr) AccessChain 27(data) 37 13 29
47: 17(float) CompositeExtract 45 0
Store 46 47
49: 30(ptr) AccessChain 27(data) 37 13 48
50: 17(float) CompositeExtract 45 1
Store 49 50
51: 6(int) Load 8(delta)
54: 40(ptr) AccessChain 27(data) 52 13
55: 18(fvec4) Load 54
56: 53(fvec3) VectorShuffle 55 55 0 1 2
57: 6(int) Load 8(delta)
58: 53(fvec3) GroupNonUniformRotateKHR 34 56 57
59: 30(ptr) AccessChain 27(data) 51 13 29
60: 17(float) CompositeExtract 58 0
Store 59 60
61: 30(ptr) AccessChain 27(data) 51 13 48
62: 17(float) CompositeExtract 58 1
Store 61 62
64: 30(ptr) AccessChain 27(data) 51 13 63
65: 17(float) CompositeExtract 58 2
Store 64 65
66: 6(int) Load 8(delta)
68: 40(ptr) AccessChain 27(data) 67 13
69: 18(fvec4) Load 68
70: 6(int) Load 8(delta)
71: 18(fvec4) GroupNonUniformRotateKHR 34 69 70
72: 40(ptr) AccessChain 27(data) 66 13
Store 72 71
73: 6(int) Load 8(delta)
75: 74(ptr) AccessChain 27(data) 13 38 29
76: 12(int) Load 75
77: 6(int) Load 8(delta)
78: 12(int) GroupNonUniformRotateKHR 34 76 77
79: 74(ptr) AccessChain 27(data) 73 38 29
Store 79 78
80: 6(int) Load 8(delta)
83: 82(ptr) AccessChain 27(data) 38 38
84: 19(ivec4) Load 83
85: 81(ivec2) VectorShuffle 84 84 0 1
86: 6(int) Load 8(delta)
87: 81(ivec2) GroupNonUniformRotateKHR 34 85 86
88: 74(ptr) AccessChain 27(data) 80 38 29
89: 12(int) CompositeExtract 87 0
Store 88 89
90: 74(ptr) AccessChain 27(data) 80 38 48
91: 12(int) CompositeExtract 87 1
Store 90 91
92: 6(int) Load 8(delta)
94: 82(ptr) AccessChain 27(data) 52 38
95: 19(ivec4) Load 94
96: 93(ivec3) VectorShuffle 95 95 0 1 2
97: 6(int) Load 8(delta)
98: 93(ivec3) GroupNonUniformRotateKHR 34 96 97
99: 74(ptr) AccessChain 27(data) 92 38 29
100: 12(int) CompositeExtract 98 0
Store 99 100
101: 74(ptr) AccessChain 27(data) 92 38 48
102: 12(int) CompositeExtract 98 1
Store 101 102
103: 74(ptr) AccessChain 27(data) 92 38 63
104: 12(int) CompositeExtract 98 2
Store 103 104
105: 6(int) Load 8(delta)
106: 82(ptr) AccessChain 27(data) 67 38
107: 19(ivec4) Load 106
108: 6(int) Load 8(delta)
109: 19(ivec4) GroupNonUniformRotateKHR 34 107 108
110: 82(ptr) AccessChain 27(data) 105 38
Store 110 109
111: 6(int) Load 8(delta)
112: 14(ptr) AccessChain 27(data) 13 52 29
113: 6(int) Load 112
114: 6(int) Load 8(delta)
115: 6(int) GroupNonUniformRotateKHR 34 113 114
116: 14(ptr) AccessChain 27(data) 111 52 29
Store 116 115
117: 6(int) Load 8(delta)
120: 119(ptr) AccessChain 27(data) 38 52
121: 20(ivec4) Load 120
122: 118(ivec2) VectorShuffle 121 121 0 1
123: 6(int) Load 8(delta)
124: 118(ivec2) GroupNonUniformRotateKHR 34 122 123
125: 14(ptr) AccessChain 27(data) 117 52 29
126: 6(int) CompositeExtract 124 0
Store 125 126
127: 14(ptr) AccessChain 27(data) 117 52 48
128: 6(int) CompositeExtract 124 1
Store 127 128
129: 6(int) Load 8(delta)
131: 119(ptr) AccessChain 27(data) 52 52
132: 20(ivec4) Load 131
133: 130(ivec3) VectorShuffle 132 132 0 1 2
134: 6(int) Load 8(delta)
135: 130(ivec3) GroupNonUniformRotateKHR 34 133 134
136: 14(ptr) AccessChain 27(data) 129 52 29
137: 6(int) CompositeExtract 135 0
Store 136 137
138: 14(ptr) AccessChain 27(data) 129 52 48
139: 6(int) CompositeExtract 135 1
Store 138 139
140: 14(ptr) AccessChain 27(data) 129 52 63
141: 6(int) CompositeExtract 135 2
Store 140 141
142: 6(int) Load 8(delta)
143: 119(ptr) AccessChain 27(data) 67 52
144: 20(ivec4) Load 143
145: 6(int) Load 8(delta)
146: 20(ivec4) GroupNonUniformRotateKHR 34 144 145
147: 119(ptr) AccessChain 27(data) 142 52
Store 147 146
148: 6(int) Load 8(delta)
150: 149(ptr) AccessChain 27(data) 13 67 29
151:21(float64_t) Load 150
152: 6(int) Load 8(delta)
153:21(float64_t) GroupNonUniformRotateKHR 34 151 152
154: 149(ptr) AccessChain 27(data) 148 67 29
Store 154 153
155: 6(int) Load 8(delta)
158: 157(ptr) AccessChain 27(data) 38 67
159: 22(f64vec4) Load 158
160:156(f64vec2) VectorShuffle 159 159 0 1
161: 6(int) Load 8(delta)
162:156(f64vec2) GroupNonUniformRotateKHR 34 160 161
163: 149(ptr) AccessChain 27(data) 155 67 29
164:21(float64_t) CompositeExtract 162 0
Store 163 164
165: 149(ptr) AccessChain 27(data) 155 67 48
166:21(float64_t) CompositeExtract 162 1
Store 165 166
167: 6(int) Load 8(delta)
169: 157(ptr) AccessChain 27(data) 52 67
170: 22(f64vec4) Load 169
171:168(f64vec3) VectorShuffle 170 170 0 1 2
172: 6(int) Load 8(delta)
173:168(f64vec3) GroupNonUniformRotateKHR 34 171 172
174: 149(ptr) AccessChain 27(data) 167 67 29
175:21(float64_t) CompositeExtract 173 0
Store 174 175
176: 149(ptr) AccessChain 27(data) 167 67 48
177:21(float64_t) CompositeExtract 173 1
Store 176 177
178: 149(ptr) AccessChain 27(data) 167 67 63
179:21(float64_t) CompositeExtract 173 2
Store 178 179
180: 6(int) Load 8(delta)
181: 157(ptr) AccessChain 27(data) 67 67
182: 22(f64vec4) Load 181
183: 6(int) Load 8(delta)
184: 22(f64vec4) GroupNonUniformRotateKHR 34 182 183
185: 157(ptr) AccessChain 27(data) 180 67
Store 185 184
186: 6(int) Load 8(delta)
187: 74(ptr) AccessChain 27(data) 13 38 29
188: 12(int) Load 187
190: 189(bool) SLessThan 188 13
191: 6(int) Load 8(delta)
192: 189(bool) GroupNonUniformRotateKHR 34 190 191
193: 12(int) Select 192 38 13
194: 74(ptr) AccessChain 27(data) 186 38 29
Store 194 193
195: 6(int) Load 8(delta)
196: 82(ptr) AccessChain 27(data) 38 38
197: 19(ivec4) Load 196
198: 81(ivec2) VectorShuffle 197 197 0 1
201: 200(bvec2) SLessThan 198 199
202: 6(int) Load 8(delta)
203: 200(bvec2) GroupNonUniformRotateKHR 34 201 202
205: 81(ivec2) Select 203 204 199
206: 74(ptr) AccessChain 27(data) 195 38 29
207: 12(int) CompositeExtract 205 0
Store 206 207
208: 74(ptr) AccessChain 27(data) 195 38 48
209: 12(int) CompositeExtract 205 1
Store 208 209
210: 6(int) Load 8(delta)
211: 82(ptr) AccessChain 27(data) 38 38
212: 19(ivec4) Load 211
213: 93(ivec3) VectorShuffle 212 212 0 1 2
216: 215(bvec3) SLessThan 213 214
217: 6(int) Load 8(delta)
218: 215(bvec3) GroupNonUniformRotateKHR 34 216 217
220: 93(ivec3) Select 218 219 214
221: 74(ptr) AccessChain 27(data) 210 38 29
222: 12(int) CompositeExtract 220 0
Store 221 222
223: 74(ptr) AccessChain 27(data) 210 38 48
224: 12(int) CompositeExtract 220 1
Store 223 224
225: 74(ptr) AccessChain 27(data) 210 38 63
226: 12(int) CompositeExtract 220 2
Store 225 226
227: 6(int) Load 8(delta)
228: 82(ptr) AccessChain 27(data) 38 38
229: 19(ivec4) Load 228
232: 231(bvec4) SLessThan 229 230
233: 6(int) Load 8(delta)
234: 231(bvec4) GroupNonUniformRotateKHR 34 232 233
236: 19(ivec4) Select 234 235 230
237: 82(ptr) AccessChain 27(data) 227 38
Store 237 236
238: 6(int) Load 8(delta)
239: 30(ptr) AccessChain 27(data) 13 13 29
240: 17(float) Load 239
241: 6(int) Load 8(delta)
242: 17(float) GroupNonUniformRotateKHR 34 240 241 48
243: 30(ptr) AccessChain 27(data) 238 13 29
Store 243 242
244: 6(int) Load 8(delta)
245: 40(ptr) AccessChain 27(data) 38 13
246: 18(fvec4) Load 245
247: 39(fvec2) VectorShuffle 246 246 0 1
248: 6(int) Load 8(delta)
249: 39(fvec2) GroupNonUniformRotateKHR 34 247 248 48
250: 30(ptr) AccessChain 27(data) 244 13 29
251: 17(float) CompositeExtract 249 0
Store 250 251
252: 30(ptr) AccessChain 27(data) 244 13 48
253: 17(float) CompositeExtract 249 1
Store 252 253
254: 6(int) Load 8(delta)
255: 40(ptr) AccessChain 27(data) 52 13
256: 18(fvec4) Load 255
257: 53(fvec3) VectorShuffle 256 256 0 1 2
258: 6(int) Load 8(delta)
259: 53(fvec3) GroupNonUniformRotateKHR 34 257 258 48
260: 30(ptr) AccessChain 27(data) 254 13 29
261: 17(float) CompositeExtract 259 0
Store 260 261
262: 30(ptr) AccessChain 27(data) 254 13 48
263: 17(float) CompositeExtract 259 1
Store 262 263
264: 30(ptr) AccessChain 27(data) 254 13 63
265: 17(float) CompositeExtract 259 2
Store 264 265
266: 6(int) Load 8(delta)
267: 40(ptr) AccessChain 27(data) 67 13
268: 18(fvec4) Load 267
269: 6(int) Load 8(delta)
270: 18(fvec4) GroupNonUniformRotateKHR 34 268 269 48
271: 40(ptr) AccessChain 27(data) 266 13
Store 271 270
272: 6(int) Load 8(delta)
273: 74(ptr) AccessChain 27(data) 13 38 29
274: 12(int) Load 273
275: 6(int) Load 8(delta)
276: 12(int) GroupNonUniformRotateKHR 34 274 275 48
277: 74(ptr) AccessChain 27(data) 272 38 29
Store 277 276
278: 6(int) Load 8(delta)
279: 82(ptr) AccessChain 27(data) 38 38
280: 19(ivec4) Load 279
281: 81(ivec2) VectorShuffle 280 280 0 1
282: 6(int) Load 8(delta)
283: 81(ivec2) GroupNonUniformRotateKHR 34 281 282 48
284: 74(ptr) AccessChain 27(data) 278 38 29
285: 12(int) CompositeExtract 283 0
Store 284 285
286: 74(ptr) AccessChain 27(data) 278 38 48
287: 12(int) CompositeExtract 283 1
Store 286 287
288: 6(int) Load 8(delta)
289: 82(ptr) AccessChain 27(data) 52 38
290: 19(ivec4) Load 289
291: 93(ivec3) VectorShuffle 290 290 0 1 2
292: 6(int) Load 8(delta)
293: 93(ivec3) GroupNonUniformRotateKHR 34 291 292 48
294: 74(ptr) AccessChain 27(data) 288 38 29
295: 12(int) CompositeExtract 293 0
Store 294 295
296: 74(ptr) AccessChain 27(data) 288 38 48
297: 12(int) CompositeExtract 293 1
Store 296 297
298: 74(ptr) AccessChain 27(data) 288 38 63
299: 12(int) CompositeExtract 293 2
Store 298 299
300: 6(int) Load 8(delta)
301: 82(ptr) AccessChain 27(data) 67 38
302: 19(ivec4) Load 301
303: 6(int) Load 8(delta)
304: 19(ivec4) GroupNonUniformRotateKHR 34 302 303 48
305: 82(ptr) AccessChain 27(data) 300 38
Store 305 304
306: 6(int) Load 8(delta)
307: 14(ptr) AccessChain 27(data) 13 52 29
308: 6(int) Load 307
309: 6(int) Load 8(delta)
310: 6(int) GroupNonUniformRotateKHR 34 308 309 48
311: 14(ptr) AccessChain 27(data) 306 52 29
Store 311 310
312: 6(int) Load 8(delta)
313: 119(ptr) AccessChain 27(data) 38 52
314: 20(ivec4) Load 313
315: 118(ivec2) VectorShuffle 314 314 0 1
316: 6(int) Load 8(delta)
317: 118(ivec2) GroupNonUniformRotateKHR 34 315 316 48
318: 14(ptr) AccessChain 27(data) 312 52 29
319: 6(int) CompositeExtract 317 0
Store 318 319
320: 14(ptr) AccessChain 27(data) 312 52 48
321: 6(int) CompositeExtract 317 1
Store 320 321
322: 6(int) Load 8(delta)
323: 119(ptr) AccessChain 27(data) 52 52
324: 20(ivec4) Load 323
325: 130(ivec3) VectorShuffle 324 324 0 1 2
326: 6(int) Load 8(delta)
327: 130(ivec3) GroupNonUniformRotateKHR 34 325 326 48
328: 14(ptr) AccessChain 27(data) 322 52 29
329: 6(int) CompositeExtract 327 0
Store 328 329
330: 14(ptr) AccessChain 27(data) 322 52 48
331: 6(int) CompositeExtract 327 1
Store 330 331
332: 14(ptr) AccessChain 27(data) 322 52 63
333: 6(int) CompositeExtract 327 2
Store 332 333
334: 6(int) Load 8(delta)
335: 119(ptr) AccessChain 27(data) 67 52
336: 20(ivec4) Load 335
337: 6(int) Load 8(delta)
338: 20(ivec4) GroupNonUniformRotateKHR 34 336 337 48
339: 119(ptr) AccessChain 27(data) 334 52
Store 339 338
340: 6(int) Load 8(delta)
341: 149(ptr) AccessChain 27(data) 13 67 29
342:21(float64_t) Load 341
343: 6(int) Load 8(delta)
344:21(float64_t) GroupNonUniformRotateKHR 34 342 343 48
345: 149(ptr) AccessChain 27(data) 340 67 29
Store 345 344
346: 6(int) Load 8(delta)
347: 157(ptr) AccessChain 27(data) 38 67
348: 22(f64vec4) Load 347
349:156(f64vec2) VectorShuffle 348 348 0 1
350: 6(int) Load 8(delta)
351:156(f64vec2) GroupNonUniformRotateKHR 34 349 350 48
352: 149(ptr) AccessChain 27(data) 346 67 29
353:21(float64_t) CompositeExtract 351 0
Store 352 353
354: 149(ptr) AccessChain 27(data) 346 67 48
355:21(float64_t) CompositeExtract 351 1
Store 354 355
356: 6(int) Load 8(delta)
357: 157(ptr) AccessChain 27(data) 52 67
358: 22(f64vec4) Load 357
359:168(f64vec3) VectorShuffle 358 358 0 1 2
360: 6(int) Load 8(delta)
361:168(f64vec3) GroupNonUniformRotateKHR 34 359 360 48
362: 149(ptr) AccessChain 27(data) 356 67 29
363:21(float64_t) CompositeExtract 361 0
Store 362 363
364: 149(ptr) AccessChain 27(data) 356 67 48
365:21(float64_t) CompositeExtract 361 1
Store 364 365
366: 149(ptr) AccessChain 27(data) 356 67 63
367:21(float64_t) CompositeExtract 361 2
Store 366 367
368: 6(int) Load 8(delta)
369: 157(ptr) AccessChain 27(data) 67 67
370: 22(f64vec4) Load 369
371: 6(int) Load 8(delta)
372: 22(f64vec4) GroupNonUniformRotateKHR 34 370 371 48
373: 157(ptr) AccessChain 27(data) 368 67
Store 373 372
374: 6(int) Load 8(delta)
375: 74(ptr) AccessChain 27(data) 13 38 29
376: 12(int) Load 375
377: 189(bool) SLessThan 376 13
378: 6(int) Load 8(delta)
379: 189(bool) GroupNonUniformRotateKHR 34 377 378 48
380: 12(int) Select 379 38 13
381: 74(ptr) AccessChain 27(data) 374 38 29
Store 381 380
382: 6(int) Load 8(delta)
383: 82(ptr) AccessChain 27(data) 38 38
384: 19(ivec4) Load 383
385: 81(ivec2) VectorShuffle 384 384 0 1
386: 200(bvec2) SLessThan 385 199
387: 6(int) Load 8(delta)
388: 200(bvec2) GroupNonUniformRotateKHR 34 386 387 48
389: 81(ivec2) Select 388 204 199
390: 74(ptr) AccessChain 27(data) 382 38 29
391: 12(int) CompositeExtract 389 0
Store 390 391
392: 74(ptr) AccessChain 27(data) 382 38 48
393: 12(int) CompositeExtract 389 1
Store 392 393
394: 6(int) Load 8(delta)
395: 82(ptr) AccessChain 27(data) 38 38
396: 19(ivec4) Load 395
397: 93(ivec3) VectorShuffle 396 396 0 1 2
398: 215(bvec3) SLessThan 397 214
399: 6(int) Load 8(delta)
400: 215(bvec3) GroupNonUniformRotateKHR 34 398 399 48
401: 93(ivec3) Select 400 219 214
402: 74(ptr) AccessChain 27(data) 394 38 29
403: 12(int) CompositeExtract 401 0
Store 402 403
404: 74(ptr) AccessChain 27(data) 394 38 48
405: 12(int) CompositeExtract 401 1
Store 404 405
406: 74(ptr) AccessChain 27(data) 394 38 63
407: 12(int) CompositeExtract 401 2
Store 406 407
408: 6(int) Load 8(delta)
409: 82(ptr) AccessChain 27(data) 38 38
410: 19(ivec4) Load 409
411: 231(bvec4) SLessThan 410 230
412: 6(int) Load 8(delta)
413: 231(bvec4) GroupNonUniformRotateKHR 34 411 412 48
414: 19(ivec4) Select 413 235 230
415: 82(ptr) AccessChain 27(data) 408 38
Store 415 414
Return
FunctionEnd

View File

@ -0,0 +1,73 @@
#version 450
#extension GL_KHR_shader_subgroup_rotate: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
readonly buffer roblock
{
uint delta;
} ro;
layout(binding = 0) buffer Buffers
{
vec4 f4;
ivec4 i4;
uvec4 u4;
dvec4 d4;
} data[4];
void main()
{
uint delta = ro.delta;
data[delta].f4.x = subgroupRotate(data[0].f4.x, delta);
data[delta].f4.xy = subgroupRotate(data[1].f4.xy, delta);
data[delta].f4.xyz = subgroupRotate(data[2].f4.xyz, delta);
data[delta].f4 = subgroupRotate(data[3].f4, delta);
data[delta].i4.x = subgroupRotate(data[0].i4.x, delta);
data[delta].i4.xy = subgroupRotate(data[1].i4.xy, delta);
data[delta].i4.xyz = subgroupRotate(data[2].i4.xyz, delta);
data[delta].i4 = subgroupRotate(data[3].i4, delta);
data[delta].u4.x = subgroupRotate(data[0].u4.x, delta);
data[delta].u4.xy = subgroupRotate(data[1].u4.xy, delta);
data[delta].u4.xyz = subgroupRotate(data[2].u4.xyz, delta);
data[delta].u4 = subgroupRotate(data[3].u4, delta);
data[delta].d4.x = subgroupRotate(data[0].d4.x, delta);
data[delta].d4.xy = subgroupRotate(data[1].d4.xy, delta);
data[delta].d4.xyz = subgroupRotate(data[2].d4.xyz, delta);
data[delta].d4 = subgroupRotate(data[3].d4, delta);
data[delta].i4.x = int(subgroupRotate(data[0].i4.x < 0, delta));
data[delta].i4.xy = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)), delta));
data[delta].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
data[delta].i4 = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)), delta));
data[delta].f4.x = subgroupClusteredRotate(data[0].f4.x, delta, 1);
data[delta].f4.xy = subgroupClusteredRotate(data[1].f4.xy, delta, 1);
data[delta].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz, delta, 1);
data[delta].f4 = subgroupClusteredRotate(data[3].f4, delta, 1);
data[delta].i4.x = subgroupClusteredRotate(data[0].i4.x, delta, 1);
data[delta].i4.xy = subgroupClusteredRotate(data[1].i4.xy, delta, 1);
data[delta].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz, delta, 1);
data[delta].i4 = subgroupClusteredRotate(data[3].i4, delta, 1);
data[delta].u4.x = subgroupClusteredRotate(data[0].u4.x, delta, 1);
data[delta].u4.xy = subgroupClusteredRotate(data[1].u4.xy, delta, 1);
data[delta].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz, delta, 1);
data[delta].u4 = subgroupClusteredRotate(data[3].u4, delta, 1);
data[delta].d4.x = subgroupClusteredRotate(data[0].d4.x, delta, 1);
data[delta].d4.xy = subgroupClusteredRotate(data[1].d4.xy, delta, 1);
data[delta].d4.xyz = subgroupClusteredRotate(data[2].d4.xyz, delta, 1);
data[delta].d4 = subgroupClusteredRotate(data[3].d4, delta, 1);
data[delta].i4.x = int(subgroupClusteredRotate(data[0].i4.x < 0, delta, 1));
data[delta].i4.xy = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)), delta, 1));
data[delta].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1));
data[delta].i4 = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)), delta, 1));
}

View File

@ -0,0 +1,62 @@
#version 320 es
#extension GL_KHR_shader_subgroup_rotate: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
readonly buffer roblock
{
uint delta;
} ro;
layout(binding = 0) buffer Buffers
{
vec4 f4;
ivec4 i4;
uvec4 u4;
} data[4];
void main()
{
uint delta = ro.delta;
data[0].f4.x = subgroupRotate(data[0].f4.x, delta);
data[0].f4.xy = subgroupRotate(data[1].f4.xy, delta);
data[0].f4.xyz = subgroupRotate(data[2].f4.xyz, delta);
data[0].f4 = subgroupRotate(data[3].f4, delta);
data[0].i4.x = subgroupRotate(data[0].i4.x, delta);
data[0].i4.xy = subgroupRotate(data[1].i4.xy, delta);
data[0].i4.xyz = subgroupRotate(data[2].i4.xyz, delta);
data[0].i4 = subgroupRotate(data[3].i4, delta);
data[1].u4.x = subgroupRotate(data[0].u4.x, delta);
data[1].u4.xy = subgroupRotate(data[1].u4.xy, delta);
data[1].u4.xyz = subgroupRotate(data[2].u4.xyz, delta);
data[1].u4 = subgroupRotate(data[3].u4, delta);
data[1].i4.x = int(subgroupRotate(data[0].i4.x < 0, delta));
data[1].i4.xy = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)), delta));
data[1].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
data[1].i4 = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)), delta));
data[2].f4.x = subgroupClusteredRotate(data[0].f4.x, delta, 1u);
data[2].f4.xy = subgroupClusteredRotate(data[1].f4.xy, delta, 1u);
data[2].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz, delta, 1u);
data[2].f4 = subgroupClusteredRotate(data[3].f4, delta, 1u);
data[2].i4.x = subgroupClusteredRotate(data[0].i4.x, delta, 1u);
data[2].i4.xy = subgroupClusteredRotate(data[1].i4.xy, delta, 1u);
data[2].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz, delta, 1u);
data[2].i4 = subgroupClusteredRotate(data[3].i4, delta, 1u);
data[3].u4.x = subgroupClusteredRotate(data[0].u4.x, delta, 1u);
data[3].u4.xy = subgroupClusteredRotate(data[1].u4.xy, delta, 1u);
data[3].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz, delta, 1u);
data[3].u4 = subgroupClusteredRotate(data[3].u4, delta, 1u);
data[3].i4.x = int(subgroupClusteredRotate(data[0].i4.x < 0, delta, 1u));
data[3].i4.xy = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)), delta, 1u));
data[3].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1u));
data[3].i4 = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)), delta, 1u));
}

View File

@ -0,0 +1,100 @@
#version 450
#extension GL_KHR_shader_subgroup_rotate: enable
#extension GL_EXT_shader_subgroup_extended_types_int8: enable
#extension GL_EXT_shader_subgroup_extended_types_int16: enable
#extension GL_EXT_shader_subgroup_extended_types_int64: enable
#extension GL_EXT_shader_subgroup_extended_types_float16: enable
layout (local_size_x = 8) in;
readonly buffer roblock
{
uint delta;
} ro;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint delta = ro.delta;
data[delta].i8.x = subgroupRotate(data[0].i8.x, delta);
data[delta].i8.xy = subgroupRotate(data[1].i8.xy, delta);
data[delta].i8.xyz = subgroupRotate(data[2].i8.xyz, delta);
data[delta].i8 = subgroupRotate(data[3].i8, delta);
data[delta].i8.x = subgroupClusteredRotate(data[0].i8.x, delta, 1);
data[delta].i8.xy = subgroupClusteredRotate(data[1].i8.xy, delta, 1);
data[delta].i8.xyz = subgroupClusteredRotate(data[2].i8.xyz, delta, 1);
data[delta].i8 = subgroupClusteredRotate(data[3].i8, delta, 1);
data[delta].u8.x = subgroupRotate(data[0].u8.x, delta);
data[delta].u8.xy = subgroupRotate(data[1].u8.xy, delta);
data[delta].u8.xyz = subgroupRotate(data[2].u8.xyz, delta);
data[delta].u8 = subgroupRotate(data[3].u8, delta);
data[delta].u8.x = subgroupClusteredRotate(data[0].u8.x, delta, 1);
data[delta].u8.xy = subgroupClusteredRotate(data[1].u8.xy, delta, 1);
data[delta].u8.xyz = subgroupClusteredRotate(data[2].u8.xyz, delta, 1);
data[delta].u8 = subgroupClusteredRotate(data[3].u8, delta, 1);
data[delta].i16.x = subgroupRotate(data[0].i16.x, delta);
data[delta].i16.xy = subgroupRotate(data[1].i16.xy, delta);
data[delta].i16.xyz = subgroupRotate(data[2].i16.xyz, delta);
data[delta].i16 = subgroupRotate(data[3].i16, delta);
data[delta].i16.x = subgroupClusteredRotate(data[0].i16.x, delta, 1);
data[delta].i16.xy = subgroupClusteredRotate(data[1].i16.xy, delta, 1);
data[delta].i16.xyz = subgroupClusteredRotate(data[2].i16.xyz, delta, 1);
data[delta].i16 = subgroupClusteredRotate(data[3].i16, delta, 1);
data[delta].u16.x = subgroupRotate(data[0].u16.x, delta);
data[delta].u16.xy = subgroupRotate(data[1].u16.xy, delta);
data[delta].u16.xyz = subgroupRotate(data[2].u16.xyz, delta);
data[delta].u16 = subgroupRotate(data[3].u16, delta);
data[delta].u16.x = subgroupClusteredRotate(data[0].u16.x, delta, 1);
data[delta].u16.xy = subgroupClusteredRotate(data[1].u16.xy, delta, 1);
data[delta].u16.xyz = subgroupClusteredRotate(data[2].u16.xyz, delta, 1);
data[delta].u16 = subgroupClusteredRotate(data[3].u16, delta, 1);
data[delta].i64.x = subgroupRotate(data[0].i64.x, delta);
data[delta].i64.xy = subgroupRotate(data[1].i64.xy, delta);
data[delta].i64.xyz = subgroupRotate(data[2].i64.xyz, delta);
data[delta].i64 = subgroupRotate(data[3].i64, delta);
data[delta].i64.x = subgroupClusteredRotate(data[0].i64.x, delta, 1);
data[delta].i64.xy = subgroupClusteredRotate(data[1].i64.xy, delta, 1);
data[delta].i64.xyz = subgroupClusteredRotate(data[2].i64.xyz, delta, 1);
data[delta].i64 = subgroupClusteredRotate(data[3].i64, delta, 1);
data[delta].u64.x = subgroupRotate(data[0].u64.x, delta);
data[delta].u64.xy = subgroupRotate(data[1].u64.xy, delta);
data[delta].u64.xyz = subgroupRotate(data[2].u64.xyz, delta);
data[delta].u64 = subgroupRotate(data[3].u64, delta);
data[delta].u64.x = subgroupClusteredRotate(data[0].u64.x, delta, 1);
data[delta].u64.xy = subgroupClusteredRotate(data[1].u64.xy, delta, 1);
data[delta].u64.xyz = subgroupClusteredRotate(data[2].u64.xyz, delta, 1);
data[delta].u64 = subgroupClusteredRotate(data[3].u64, delta, 1);
data[delta].f16.x = subgroupRotate(data[0].f16.x, delta);
data[delta].f16.xy = subgroupRotate(data[1].f16.xy, delta);
data[delta].f16.xyz = subgroupRotate(data[2].f16.xyz, delta);
data[delta].f16 = subgroupRotate(data[3].f16, delta);
data[delta].f16.x = subgroupClusteredRotate(data[0].f16.x, delta, 1);
data[delta].f16.xy = subgroupClusteredRotate(data[1].f16.xy, delta, 1);
data[delta].f16.xyz = subgroupClusteredRotate(data[2].f16.xyz, delta, 1);
data[delta].f16 = subgroupClusteredRotate(data[3].f16, delta, 1);
}

View File

@ -0,0 +1,100 @@
#version 450
#extension GL_KHR_shader_subgroup_rotate: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
layout (local_size_x = 8) in;
readonly buffer roblock
{
uint delta;
} ro;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint delta = ro.delta;
data[delta].i8.x = subgroupRotate(data[0].i8.x, delta);
data[delta].i8.xy = subgroupRotate(data[1].i8.xy, delta);
data[delta].i8.xyz = subgroupRotate(data[2].i8.xyz, delta);
data[delta].i8 = subgroupRotate(data[3].i8, delta);
data[delta].i8.x = subgroupClusteredRotate(data[0].i8.x, delta, 1);
data[delta].i8.xy = subgroupClusteredRotate(data[1].i8.xy, delta, 1);
data[delta].i8.xyz = subgroupClusteredRotate(data[2].i8.xyz, delta, 1);
data[delta].i8 = subgroupClusteredRotate(data[3].i8, delta, 1);
data[delta].u8.x = subgroupRotate(data[0].u8.x, delta);
data[delta].u8.xy = subgroupRotate(data[1].u8.xy, delta);
data[delta].u8.xyz = subgroupRotate(data[2].u8.xyz, delta);
data[delta].u8 = subgroupRotate(data[3].u8, delta);
data[delta].u8.x = subgroupClusteredRotate(data[0].u8.x, delta, 1);
data[delta].u8.xy = subgroupClusteredRotate(data[1].u8.xy, delta, 1);
data[delta].u8.xyz = subgroupClusteredRotate(data[2].u8.xyz, delta, 1);
data[delta].u8 = subgroupClusteredRotate(data[3].u8, delta, 1);
data[delta].i16.x = subgroupRotate(data[0].i16.x, delta);
data[delta].i16.xy = subgroupRotate(data[1].i16.xy, delta);
data[delta].i16.xyz = subgroupRotate(data[2].i16.xyz, delta);
data[delta].i16 = subgroupRotate(data[3].i16, delta);
data[delta].i16.x = subgroupClusteredRotate(data[0].i16.x, delta, 1);
data[delta].i16.xy = subgroupClusteredRotate(data[1].i16.xy, delta, 1);
data[delta].i16.xyz = subgroupClusteredRotate(data[2].i16.xyz, delta, 1);
data[delta].i16 = subgroupClusteredRotate(data[3].i16, delta, 1);
data[delta].u16.x = subgroupRotate(data[0].u16.x, delta);
data[delta].u16.xy = subgroupRotate(data[1].u16.xy, delta);
data[delta].u16.xyz = subgroupRotate(data[2].u16.xyz, delta);
data[delta].u16 = subgroupRotate(data[3].u16, delta);
data[delta].u16.x = subgroupClusteredRotate(data[0].u16.x, delta, 1);
data[delta].u16.xy = subgroupClusteredRotate(data[1].u16.xy, delta, 1);
data[delta].u16.xyz = subgroupClusteredRotate(data[2].u16.xyz, delta, 1);
data[delta].u16 = subgroupClusteredRotate(data[3].u16, delta, 1);
data[delta].i64.x = subgroupRotate(data[0].i64.x, delta);
data[delta].i64.xy = subgroupRotate(data[1].i64.xy, delta);
data[delta].i64.xyz = subgroupRotate(data[2].i64.xyz, delta);
data[delta].i64 = subgroupRotate(data[3].i64, delta);
data[delta].i64.x = subgroupClusteredRotate(data[0].i64.x, delta, 1);
data[delta].i64.xy = subgroupClusteredRotate(data[1].i64.xy, delta, 1);
data[delta].i64.xyz = subgroupClusteredRotate(data[2].i64.xyz, delta, 1);
data[delta].i64 = subgroupClusteredRotate(data[3].i64, delta, 1);
data[delta].u64.x = subgroupRotate(data[0].u64.x, delta);
data[delta].u64.xy = subgroupRotate(data[1].u64.xy, delta);
data[delta].u64.xyz = subgroupRotate(data[2].u64.xyz, delta);
data[delta].u64 = subgroupRotate(data[3].u64, delta);
data[delta].u64.x = subgroupClusteredRotate(data[0].u64.x, delta, 1);
data[delta].u64.xy = subgroupClusteredRotate(data[1].u64.xy, delta, 1);
data[delta].u64.xyz = subgroupClusteredRotate(data[2].u64.xyz, delta, 1);
data[delta].u64 = subgroupClusteredRotate(data[3].u64, delta, 1);
data[delta].f16.x = subgroupRotate(data[0].f16.x, delta);
data[delta].f16.xy = subgroupRotate(data[1].f16.xy, delta);
data[delta].f16.xyz = subgroupRotate(data[2].f16.xyz, delta);
data[delta].f16 = subgroupRotate(data[3].f16, delta);
data[delta].f16.x = subgroupClusteredRotate(data[0].f16.x, delta, 1);
data[delta].f16.xy = subgroupClusteredRotate(data[1].f16.xy, delta, 1);
data[delta].f16.xyz = subgroupClusteredRotate(data[2].f16.xyz, delta, 1);
data[delta].f16 = subgroupClusteredRotate(data[3].f16, delta, 1);
}

View File

@ -0,0 +1,73 @@
#version 450
#extension GL_KHR_shader_subgroup_rotate: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
readonly buffer roblock
{
uint delta;
} ro;
layout(binding = 0) buffer Buffers
{
vec4 f4;
ivec4 i4;
uvec4 u4;
dvec4 d4;
} data[4];
void main()
{
uint delta = ro.delta;
data[delta].f4.x = subgroupRotate(data[0].f4.x, delta);
data[delta].f4.xy = subgroupRotate(data[1].f4.xy, delta);
data[delta].f4.xyz = subgroupRotate(data[2].f4.xyz, delta);
data[delta].f4 = subgroupRotate(data[3].f4, delta);
data[delta].i4.x = subgroupRotate(data[0].i4.x, delta);
data[delta].i4.xy = subgroupRotate(data[1].i4.xy, delta);
data[delta].i4.xyz = subgroupRotate(data[2].i4.xyz, delta);
data[delta].i4 = subgroupRotate(data[3].i4, delta);
data[delta].u4.x = subgroupRotate(data[0].u4.x, delta);
data[delta].u4.xy = subgroupRotate(data[1].u4.xy, delta);
data[delta].u4.xyz = subgroupRotate(data[2].u4.xyz, delta);
data[delta].u4 = subgroupRotate(data[3].u4, delta);
data[delta].d4.x = subgroupRotate(data[0].d4.x, delta);
data[delta].d4.xy = subgroupRotate(data[1].d4.xy, delta);
data[delta].d4.xyz = subgroupRotate(data[2].d4.xyz, delta);
data[delta].d4 = subgroupRotate(data[3].d4, delta);
data[delta].i4.x = int(subgroupRotate(data[0].i4.x < 0, delta));
data[delta].i4.xy = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)), delta));
data[delta].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
data[delta].i4 = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)), delta));
data[delta].f4.x = subgroupClusteredRotate(data[0].f4.x, delta, 1);
data[delta].f4.xy = subgroupClusteredRotate(data[1].f4.xy, delta, 1);
data[delta].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz, delta, 1);
data[delta].f4 = subgroupClusteredRotate(data[3].f4, delta, 1);
data[delta].i4.x = subgroupClusteredRotate(data[0].i4.x, delta, 1);
data[delta].i4.xy = subgroupClusteredRotate(data[1].i4.xy, delta, 1);
data[delta].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz, delta, 1);
data[delta].i4 = subgroupClusteredRotate(data[3].i4, delta, 1);
data[delta].u4.x = subgroupClusteredRotate(data[0].u4.x, delta, 1);
data[delta].u4.xy = subgroupClusteredRotate(data[1].u4.xy, delta, 1);
data[delta].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz, delta, 1);
data[delta].u4 = subgroupClusteredRotate(data[3].u4, delta, 1);
data[delta].d4.x = subgroupClusteredRotate(data[0].d4.x, delta, 1);
data[delta].d4.xy = subgroupClusteredRotate(data[1].d4.xy, delta, 1);
data[delta].d4.xyz = subgroupClusteredRotate(data[2].d4.xyz, delta, 1);
data[delta].d4 = subgroupClusteredRotate(data[3].d4, delta, 1);
data[delta].i4.x = int(subgroupClusteredRotate(data[0].i4.x < 0, delta, 1));
data[delta].i4.xy = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)), delta, 1));
data[delta].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1));
data[delta].i4 = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)), delta, 1));
}

View File

@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2016 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
// Copyright (C) 2017, 2022-2024 Arm Limited.
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
//
// All rights reserved.
@ -506,6 +506,8 @@ enum TOperator {
EOpSubgroupShuffleXor,
EOpSubgroupShuffleUp,
EOpSubgroupShuffleDown,
EOpSubgroupRotate,
EOpSubgroupClusteredRotate,
EOpSubgroupAdd,
EOpSubgroupMul,
EOpSubgroupMin,

View File

@ -2,7 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2016 LunarG, Inc.
// Copyright (C) 2015-2020 Google, Inc.
// Copyright (C) 2017 ARM Limited.
// Copyright (C) 2017, 2022-2024 Arm Limited.
// Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.
//
// All rights reserved.
@ -2099,6 +2099,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"%s subgroupShuffleXor(%s, uint);\n",
"%s subgroupShuffleUp(%s, uint delta);\n",
"%s subgroupShuffleDown(%s, uint delta);\n",
"%s subgroupRotate(%s, uint);\n",
"%s subgroupClusteredRotate(%s, uint, uint);\n",
"%s subgroupAdd(%s);\n",
"%s subgroupMul(%s);\n",
"%s subgroupMin(%s);\n",
@ -8670,6 +8672,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("subgroupShuffleXor", 1, &E_GL_KHR_shader_subgroup_shuffle);
symbolTable.setFunctionExtensions("subgroupShuffleUp", 1, &E_GL_KHR_shader_subgroup_shuffle_relative);
symbolTable.setFunctionExtensions("subgroupShuffleDown", 1, &E_GL_KHR_shader_subgroup_shuffle_relative);
symbolTable.setFunctionExtensions("subgroupRotate", 1, &E_GL_KHR_shader_subgroup_rotate);
symbolTable.setFunctionExtensions("subgroupClusteredRotate", 1, &E_GL_KHR_shader_subgroup_rotate);
symbolTable.setFunctionExtensions("subgroupAdd", 1, &E_GL_KHR_shader_subgroup_arithmetic);
symbolTable.setFunctionExtensions("subgroupMul", 1, &E_GL_KHR_shader_subgroup_arithmetic);
symbolTable.setFunctionExtensions("subgroupMin", 1, &E_GL_KHR_shader_subgroup_arithmetic);
@ -9931,6 +9935,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("subgroupShuffleXor", EOpSubgroupShuffleXor);
symbolTable.relateToOperator("subgroupShuffleUp", EOpSubgroupShuffleUp);
symbolTable.relateToOperator("subgroupShuffleDown", EOpSubgroupShuffleDown);
symbolTable.relateToOperator("subgroupRotate", EOpSubgroupRotate);
symbolTable.relateToOperator("subgroupClusteredRotate", EOpSubgroupClusteredRotate);
symbolTable.relateToOperator("subgroupAdd", EOpSubgroupAdd);
symbolTable.relateToOperator("subgroupMul", EOpSubgroupMul);
symbolTable.relateToOperator("subgroupMin", EOpSubgroupMin);

View File

@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
// Copyright (C) 2017, 2022-2024 Arm Limited.
// Copyright (C) 2015-2020 Google, Inc.
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
//
@ -235,6 +235,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_KHR_shader_subgroup_ballot] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_shuffle] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_rotate] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_clustered] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_quad] = EBhDisable;
extensionBehavior[E_GL_KHR_memory_scope_semantics] = EBhDisable;

View File

@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
// Copyright (C) 2017, 2022-2024 Arm Limited.
// Copyright (C) 2015-2018 Google, Inc.
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
//
@ -171,6 +171,7 @@ const char* const E_GL_KHR_shader_subgroup_arithmetic = "GL_KHR_shader_sub
const char* const E_GL_KHR_shader_subgroup_ballot = "GL_KHR_shader_subgroup_ballot";
const char* const E_GL_KHR_shader_subgroup_shuffle = "GL_KHR_shader_subgroup_shuffle";
const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative";
const char* const E_GL_KHR_shader_subgroup_rotate = "GL_KHR_shader_subgroup_rotate";
const char* const E_GL_KHR_shader_subgroup_clustered = "GL_KHR_shader_subgroup_clustered";
const char* const E_GL_KHR_shader_subgroup_quad = "GL_KHR_shader_subgroup_quad";
const char* const E_GL_KHR_memory_scope_semantics = "GL_KHR_memory_scope_semantics";

View File

@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2016 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
// Copyright (C) 2017, 2022-2024 Arm Limited.
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
//
// All rights reserved.
@ -565,6 +565,8 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpSubgroupShuffleXor: out.debug << "subgroupShuffleXor"; break;
case EOpSubgroupShuffleUp: out.debug << "subgroupShuffleUp"; break;
case EOpSubgroupShuffleDown: out.debug << "subgroupShuffleDown"; break;
case EOpSubgroupRotate: out.debug << "subgroupRotate"; break;
case EOpSubgroupClusteredRotate: out.debug << "subgroupClusteredRotate"; break;
case EOpSubgroupAdd: out.debug << "subgroupAdd"; break;
case EOpSubgroupMul: out.debug << "subgroupMul"; break;
case EOpSubgroupMin: out.debug << "subgroupMin"; break;
@ -1002,6 +1004,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpSubgroupShuffleXor: out.debug << "subgroupShuffleXor"; break;
case EOpSubgroupShuffleUp: out.debug << "subgroupShuffleUp"; break;
case EOpSubgroupShuffleDown: out.debug << "subgroupShuffleDown"; break;
case EOpSubgroupRotate: out.debug << "subgroupRotate"; break;
case EOpSubgroupClusteredRotate: out.debug << "subgroupClusteredRotate"; break;
case EOpSubgroupAdd: out.debug << "subgroupAdd"; break;
case EOpSubgroupMul: out.debug << "subgroupMul"; break;
case EOpSubgroupMin: out.debug << "subgroupMin"; break;

View File

@ -1,5 +1,6 @@
//
// Copyright (C) 2016 Google, Inc.
// Copyright (C) 2022-2024 Arm Limited.
//
// All rights reserved.
//
@ -252,6 +253,7 @@ INSTANTIATE_TEST_SUITE_P(
"glsl.450.subgroupClustered.comp",
"glsl.450.subgroupClusteredNeg.comp",
"glsl.450.subgroupPartitioned.comp",
"glsl.450.subgroupRotate.comp",
"glsl.450.subgroupShuffle.comp",
"glsl.450.subgroupShuffleRelative.comp",
"glsl.450.subgroupQuad.comp",
@ -277,6 +279,7 @@ INSTANTIATE_TEST_SUITE_P(
"glsl.es320.subgroupClustered.comp",
"glsl.es320.subgroupClusteredNeg.comp",
"glsl.es320.subgroupPartitioned.comp",
"glsl.es320.subgroupRotate.comp",
"glsl.es320.subgroupShuffle.comp",
"glsl.es320.subgroupShuffleRelative.comp",
"glsl.es320.subgroupQuad.comp",

View File

@ -1,6 +1,6 @@
//
// Copyright (C) 2016 Google, Inc.
// Copyright (C) 2019 ARM Limited.
// Copyright (C) 2019, 2022-2024 Arm Limited.
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
//
// All rights reserved.
@ -616,6 +616,7 @@ INSTANTIATE_TEST_SUITE_P(
"spv.subgroupClustered.comp",
"spv.subgroupClusteredNeg.comp",
"spv.subgroupPartitioned.comp",
"spv.subgroupRotate.comp",
"spv.subgroupShuffle.comp",
"spv.subgroupShuffleRelative.comp",
"spv.subgroupQuad.comp",
@ -628,6 +629,8 @@ INSTANTIATE_TEST_SUITE_P(
"spv.subgroupExtendedTypesClusteredNeg.comp",
"spv.subgroupExtendedTypesPartitioned.comp",
"spv.subgroupExtendedTypesPartitionedNeg.comp",
"spv.subgroupExtendedTypesRotate.comp",
"spv.subgroupExtendedTypesRotateNeg.comp",
"spv.subgroupExtendedTypesShuffle.comp",
"spv.subgroupExtendedTypesShuffleNeg.comp",
"spv.subgroupExtendedTypesShuffleRelative.comp",