Skip to content

Commit dc6ffc2

Browse files
authored
Merge pull request #23815 from alichraghi/master
spirv: unroll all vector operations
2 parents 35ba8d9 + 4bf1e4d commit dc6ffc2

17 files changed

+717
-705
lines changed

lib/std/Target.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2014,7 +2014,7 @@ pub const Cpu = struct {
20142014
.global, .local, .shared => is_gpu,
20152015
.constant => is_gpu and (context == null or context == .constant),
20162016
.param => is_nvptx,
2017-
.input, .output, .uniform, .push_constant, .storage_buffer => is_spirv,
2017+
.input, .output, .uniform, .push_constant, .storage_buffer, .physical_storage_buffer => is_spirv,
20182018
};
20192019
}
20202020
};

lib/std/Target/spirv.zig

Lines changed: 127 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
1+
//! This file is auto-generated by tools/update_cpu_features.zig.
2+
13
const std = @import("../std.zig");
24
const CpuFeature = std.Target.Cpu.Feature;
35
const CpuModel = std.Target.Cpu.Model;
46

57
pub const Feature = enum {
8+
addresses,
9+
arbitrary_precision_integers,
10+
float16,
11+
float64,
12+
generic_pointer,
13+
int64,
14+
kernel,
15+
matrix,
16+
physical_storage_buffer,
17+
shader,
18+
storage_push_constant16,
619
v1_0,
720
v1_1,
821
v1_2,
922
v1_3,
1023
v1_4,
1124
v1_5,
1225
v1_6,
13-
int64,
14-
float16,
15-
float64,
16-
matrix,
17-
storage_push_constant16,
18-
arbitrary_precision_integers,
19-
kernel,
20-
addresses,
21-
generic_pointer,
26+
variable_pointers,
2227
vector16,
23-
shader,
24-
physical_storage_buffer,
2528
};
2629

2730
pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
@@ -34,100 +37,143 @@ pub const all_features = blk: {
3437
const len = @typeInfo(Feature).@"enum".fields.len;
3538
std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
3639
var result: [len]CpuFeature = undefined;
37-
result[@intFromEnum(Feature.v1_0)] = .{
38-
.llvm_name = null,
39-
.description = "Enable version 1.0",
40-
.dependencies = featureSet(&[_]Feature{}),
41-
};
42-
result[@intFromEnum(Feature.v1_1)] = .{
43-
.llvm_name = null,
44-
.description = "Enable version 1.1",
45-
.dependencies = featureSet(&[_]Feature{.v1_0}),
46-
};
47-
result[@intFromEnum(Feature.v1_2)] = .{
40+
result[@intFromEnum(Feature.addresses)] = .{
4841
.llvm_name = null,
49-
.description = "Enable version 1.2",
50-
.dependencies = featureSet(&[_]Feature{.v1_1}),
42+
.description = "Enable Addresses capability",
43+
.dependencies = featureSet(&[_]Feature{
44+
.v1_0,
45+
}),
5146
};
52-
result[@intFromEnum(Feature.v1_3)] = .{
47+
result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{
5348
.llvm_name = null,
54-
.description = "Enable version 1.3",
55-
.dependencies = featureSet(&[_]Feature{.v1_2}),
49+
.description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability",
50+
.dependencies = featureSet(&[_]Feature{
51+
.v1_5,
52+
}),
5653
};
57-
result[@intFromEnum(Feature.v1_4)] = .{
54+
result[@intFromEnum(Feature.float16)] = .{
5855
.llvm_name = null,
59-
.description = "Enable version 1.4",
60-
.dependencies = featureSet(&[_]Feature{.v1_3}),
56+
.description = "Enable Float16 capability",
57+
.dependencies = featureSet(&[_]Feature{
58+
.v1_0,
59+
}),
6160
};
62-
result[@intFromEnum(Feature.v1_5)] = .{
61+
result[@intFromEnum(Feature.float64)] = .{
6362
.llvm_name = null,
64-
.description = "Enable version 1.5",
65-
.dependencies = featureSet(&[_]Feature{.v1_4}),
63+
.description = "Enable Float64 capability",
64+
.dependencies = featureSet(&[_]Feature{
65+
.v1_0,
66+
}),
6667
};
67-
result[@intFromEnum(Feature.v1_6)] = .{
68+
result[@intFromEnum(Feature.generic_pointer)] = .{
6869
.llvm_name = null,
69-
.description = "Enable version 1.6",
70-
.dependencies = featureSet(&[_]Feature{.v1_5}),
70+
.description = "Enable GenericPointer capability",
71+
.dependencies = featureSet(&[_]Feature{
72+
.addresses,
73+
}),
7174
};
7275
result[@intFromEnum(Feature.int64)] = .{
7376
.llvm_name = null,
7477
.description = "Enable Int64 capability",
75-
.dependencies = featureSet(&[_]Feature{.v1_0}),
76-
};
77-
result[@intFromEnum(Feature.float16)] = .{
78-
.llvm_name = null,
79-
.description = "Enable Float16 capability",
80-
.dependencies = featureSet(&[_]Feature{.v1_0}),
78+
.dependencies = featureSet(&[_]Feature{
79+
.v1_0,
80+
}),
8181
};
82-
result[@intFromEnum(Feature.float64)] = .{
82+
result[@intFromEnum(Feature.kernel)] = .{
8383
.llvm_name = null,
84-
.description = "Enable Float64 capability",
85-
.dependencies = featureSet(&[_]Feature{.v1_0}),
84+
.description = "Enable Kernel capability",
85+
.dependencies = featureSet(&[_]Feature{
86+
.v1_0,
87+
}),
8688
};
8789
result[@intFromEnum(Feature.matrix)] = .{
8890
.llvm_name = null,
8991
.description = "Enable Matrix capability",
90-
.dependencies = featureSet(&[_]Feature{.v1_0}),
92+
.dependencies = featureSet(&[_]Feature{
93+
.v1_0,
94+
}),
95+
};
96+
result[@intFromEnum(Feature.physical_storage_buffer)] = .{
97+
.llvm_name = null,
98+
.description = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities",
99+
.dependencies = featureSet(&[_]Feature{
100+
.v1_0,
101+
}),
102+
};
103+
result[@intFromEnum(Feature.shader)] = .{
104+
.llvm_name = null,
105+
.description = "Enable Shader capability",
106+
.dependencies = featureSet(&[_]Feature{
107+
.matrix,
108+
}),
91109
};
92110
result[@intFromEnum(Feature.storage_push_constant16)] = .{
93111
.llvm_name = null,
94112
.description = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability",
95-
.dependencies = featureSet(&[_]Feature{.v1_3}),
113+
.dependencies = featureSet(&[_]Feature{
114+
.v1_3,
115+
}),
96116
};
97-
result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{
117+
result[@intFromEnum(Feature.v1_0)] = .{
98118
.llvm_name = null,
99-
.description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability",
100-
.dependencies = featureSet(&[_]Feature{.v1_5}),
119+
.description = "Enable version 1.0",
120+
.dependencies = featureSet(&[_]Feature{}),
101121
};
102-
result[@intFromEnum(Feature.kernel)] = .{
122+
result[@intFromEnum(Feature.v1_1)] = .{
103123
.llvm_name = null,
104-
.description = "Enable Kernel capability",
105-
.dependencies = featureSet(&[_]Feature{.v1_0}),
124+
.description = "Enable version 1.1",
125+
.dependencies = featureSet(&[_]Feature{
126+
.v1_0,
127+
}),
106128
};
107-
result[@intFromEnum(Feature.addresses)] = .{
129+
result[@intFromEnum(Feature.v1_2)] = .{
108130
.llvm_name = null,
109-
.description = "Enable Addresses capability",
110-
.dependencies = featureSet(&[_]Feature{.v1_0}),
131+
.description = "Enable version 1.2",
132+
.dependencies = featureSet(&[_]Feature{
133+
.v1_1,
134+
}),
111135
};
112-
result[@intFromEnum(Feature.generic_pointer)] = .{
136+
result[@intFromEnum(Feature.v1_3)] = .{
113137
.llvm_name = null,
114-
.description = "Enable GenericPointer capability",
115-
.dependencies = featureSet(&[_]Feature{ .v1_0, .addresses }),
138+
.description = "Enable version 1.3",
139+
.dependencies = featureSet(&[_]Feature{
140+
.v1_2,
141+
}),
116142
};
117-
result[@intFromEnum(Feature.vector16)] = .{
143+
result[@intFromEnum(Feature.v1_4)] = .{
118144
.llvm_name = null,
119-
.description = "Enable Vector16 capability",
120-
.dependencies = featureSet(&[_]Feature{ .v1_0, .kernel }),
145+
.description = "Enable version 1.4",
146+
.dependencies = featureSet(&[_]Feature{
147+
.v1_3,
148+
}),
121149
};
122-
result[@intFromEnum(Feature.shader)] = .{
150+
result[@intFromEnum(Feature.v1_5)] = .{
123151
.llvm_name = null,
124-
.description = "Enable Shader capability",
125-
.dependencies = featureSet(&[_]Feature{ .v1_0, .matrix }),
152+
.description = "Enable version 1.5",
153+
.dependencies = featureSet(&[_]Feature{
154+
.v1_4,
155+
}),
126156
};
127-
result[@intFromEnum(Feature.physical_storage_buffer)] = .{
157+
result[@intFromEnum(Feature.v1_6)] = .{
158+
.llvm_name = null,
159+
.description = "Enable version 1.6",
160+
.dependencies = featureSet(&[_]Feature{
161+
.v1_5,
162+
}),
163+
};
164+
result[@intFromEnum(Feature.variable_pointers)] = .{
128165
.llvm_name = null,
129166
.description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
130-
.dependencies = featureSet(&[_]Feature{.v1_0}),
167+
.dependencies = featureSet(&[_]Feature{
168+
.v1_0,
169+
}),
170+
};
171+
result[@intFromEnum(Feature.vector16)] = .{
172+
.llvm_name = null,
173+
.description = "Enable Vector16 capability",
174+
.dependencies = featureSet(&[_]Feature{
175+
.kernel,
176+
}),
131177
};
132178
const ti = @typeInfo(Feature);
133179
for (&result, 0..) |*elem, i| {
@@ -141,18 +187,23 @@ pub const cpu = struct {
141187
pub const generic: CpuModel = .{
142188
.name = "generic",
143189
.llvm_name = "generic",
144-
.features = featureSet(&[_]Feature{.v1_0}),
190+
.features = featureSet(&[_]Feature{}),
145191
};
146-
147-
pub const vulkan_v1_2: CpuModel = .{
148-
.name = "vulkan_v1_2",
149-
.llvm_name = null,
150-
.features = featureSet(&[_]Feature{ .v1_5, .shader, .physical_storage_buffer }),
151-
};
152-
153192
pub const opencl_v2: CpuModel = .{
154193
.name = "opencl_v2",
155194
.llvm_name = null,
156-
.features = featureSet(&[_]Feature{ .v1_2, .kernel, .addresses, .generic_pointer }),
195+
.features = featureSet(&[_]Feature{
196+
.generic_pointer,
197+
.kernel,
198+
.v1_2,
199+
}),
200+
};
201+
pub const vulkan_v1_2: CpuModel = .{
202+
.name = "vulkan_v1_2",
203+
.llvm_name = null,
204+
.features = featureSet(&[_]Feature{
205+
.shader,
206+
.v1_5,
207+
}),
157208
};
158209
};

lib/std/builtin.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,7 @@ pub const AddressSpace = enum(u5) {
531531
uniform,
532532
push_constant,
533533
storage_buffer,
534+
physical_storage_buffer,
534535

535536
// AVR address spaces.
536537
flash,

0 commit comments

Comments
 (0)