authorgravatar for alichraghi@proton.meAli Chraghi <alichraghi@proton.me> 2025-05-21 15:26:18+03:30
committergravatar for alichraghi@proton.meAli Chraghi <alichraghi@proton.me> 2025-05-21 15:26:18+03:30
log4bf1e4d198abd2018bf23f9067617800a2bc0554
treed9ff4b0459757c0834cbe0d370742ee58ef727d8
parent8fa54eb7987bdb8138c625f03aa9fb91239dba48

target: auto-generated spirv features


2 files changed, 247 insertions(+), 80 deletions(-)

lib/std/Target/spirv.zig+125-80
......@@ -1,8 +1,21 @@
1//! This file is auto-generated by tools/update_cpu_features.zig.
2
13const std = @import("../std.zig");
24const CpuFeature = std.Target.Cpu.Feature;
35const CpuModel = std.Target.Cpu.Model;
46
57pub 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,
......@@ -10,19 +23,8 @@ pub const Feature = enum {
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,
22 vector16,
23 shader,
2426 variable_pointers,
25 physical_storage_buffer,
27 vector16,
2628};
2729
2830pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
......@@ -35,105 +37,143 @@ pub const all_features = blk: {
3537 const len = @typeInfo(Feature).@"enum".fields.len;
3638 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
3739 var result: [len]CpuFeature = undefined;
38 result[@intFromEnum(Feature.v1_0)] = .{
39 .llvm_name = null,
40 .description = "Enable version 1.0",
41 .dependencies = featureSet(&[_]Feature{}),
42 };
43 result[@intFromEnum(Feature.v1_1)] = .{
44 .llvm_name = null,
45 .description = "Enable version 1.1",
46 .dependencies = featureSet(&[_]Feature{.v1_0}),
47 };
48 result[@intFromEnum(Feature.v1_2)] = .{
40 result[@intFromEnum(Feature.addresses)] = .{
4941 .llvm_name = null,
50 .description = "Enable version 1.2",
51 .dependencies = featureSet(&[_]Feature{.v1_1}),
42 .description = "Enable Addresses capability",
43 .dependencies = featureSet(&[_]Feature{
44 .v1_0,
45 }),
5246 };
53 result[@intFromEnum(Feature.v1_3)] = .{
47 result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{
5448 .llvm_name = null,
55 .description = "Enable version 1.3",
56 .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 }),
5753 };
58 result[@intFromEnum(Feature.v1_4)] = .{
54 result[@intFromEnum(Feature.float16)] = .{
5955 .llvm_name = null,
60 .description = "Enable version 1.4",
61 .dependencies = featureSet(&[_]Feature{.v1_3}),
56 .description = "Enable Float16 capability",
57 .dependencies = featureSet(&[_]Feature{
58 .v1_0,
59 }),
6260 };
63 result[@intFromEnum(Feature.v1_5)] = .{
61 result[@intFromEnum(Feature.float64)] = .{
6462 .llvm_name = null,
65 .description = "Enable version 1.5",
66 .dependencies = featureSet(&[_]Feature{.v1_4}),
63 .description = "Enable Float64 capability",
64 .dependencies = featureSet(&[_]Feature{
65 .v1_0,
66 }),
6767 };
68 result[@intFromEnum(Feature.v1_6)] = .{
68 result[@intFromEnum(Feature.generic_pointer)] = .{
6969 .llvm_name = null,
70 .description = "Enable version 1.6",
71 .dependencies = featureSet(&[_]Feature{.v1_5}),
70 .description = "Enable GenericPointer capability",
71 .dependencies = featureSet(&[_]Feature{
72 .addresses,
73 }),
7274 };
7375 result[@intFromEnum(Feature.int64)] = .{
7476 .llvm_name = null,
7577 .description = "Enable Int64 capability",
76 .dependencies = featureSet(&[_]Feature{.v1_0}),
77 };
78 result[@intFromEnum(Feature.float16)] = .{
79 .llvm_name = null,
80 .description = "Enable Float16 capability",
81 .dependencies = featureSet(&[_]Feature{.v1_0}),
78 .dependencies = featureSet(&[_]Feature{
79 .v1_0,
80 }),
8281 };
83 result[@intFromEnum(Feature.float64)] = .{
82 result[@intFromEnum(Feature.kernel)] = .{
8483 .llvm_name = null,
85 .description = "Enable Float64 capability",
86 .dependencies = featureSet(&[_]Feature{.v1_0}),
84 .description = "Enable Kernel capability",
85 .dependencies = featureSet(&[_]Feature{
86 .v1_0,
87 }),
8788 };
8889 result[@intFromEnum(Feature.matrix)] = .{
8990 .llvm_name = null,
9091 .description = "Enable Matrix capability",
91 .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 }),
92109 };
93110 result[@intFromEnum(Feature.storage_push_constant16)] = .{
94111 .llvm_name = null,
95112 .description = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability",
96 .dependencies = featureSet(&[_]Feature{.v1_3}),
113 .dependencies = featureSet(&[_]Feature{
114 .v1_3,
115 }),
97116 };
98 result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{
117 result[@intFromEnum(Feature.v1_0)] = .{
99118 .llvm_name = null,
100 .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability",
101 .dependencies = featureSet(&[_]Feature{.v1_5}),
119 .description = "Enable version 1.0",
120 .dependencies = featureSet(&[_]Feature{}),
102121 };
103 result[@intFromEnum(Feature.kernel)] = .{
122 result[@intFromEnum(Feature.v1_1)] = .{
104123 .llvm_name = null,
105 .description = "Enable Kernel capability",
106 .dependencies = featureSet(&[_]Feature{.v1_0}),
124 .description = "Enable version 1.1",
125 .dependencies = featureSet(&[_]Feature{
126 .v1_0,
127 }),
107128 };
108 result[@intFromEnum(Feature.addresses)] = .{
129 result[@intFromEnum(Feature.v1_2)] = .{
109130 .llvm_name = null,
110 .description = "Enable Addresses capability",
111 .dependencies = featureSet(&[_]Feature{.v1_0}),
131 .description = "Enable version 1.2",
132 .dependencies = featureSet(&[_]Feature{
133 .v1_1,
134 }),
112135 };
113 result[@intFromEnum(Feature.generic_pointer)] = .{
136 result[@intFromEnum(Feature.v1_3)] = .{
114137 .llvm_name = null,
115 .description = "Enable GenericPointer capability",
116 .dependencies = featureSet(&[_]Feature{ .v1_0, .addresses }),
138 .description = "Enable version 1.3",
139 .dependencies = featureSet(&[_]Feature{
140 .v1_2,
141 }),
117142 };
118 result[@intFromEnum(Feature.vector16)] = .{
143 result[@intFromEnum(Feature.v1_4)] = .{
119144 .llvm_name = null,
120 .description = "Enable Vector16 capability",
121 .dependencies = featureSet(&[_]Feature{ .v1_0, .kernel }),
145 .description = "Enable version 1.4",
146 .dependencies = featureSet(&[_]Feature{
147 .v1_3,
148 }),
122149 };
123 result[@intFromEnum(Feature.shader)] = .{
150 result[@intFromEnum(Feature.v1_5)] = .{
124151 .llvm_name = null,
125 .description = "Enable Shader capability",
126 .dependencies = featureSet(&[_]Feature{ .v1_0, .matrix }),
152 .description = "Enable version 1.5",
153 .dependencies = featureSet(&[_]Feature{
154 .v1_4,
155 }),
127156 };
128 result[@intFromEnum(Feature.physical_storage_buffer)] = .{
157 result[@intFromEnum(Feature.v1_6)] = .{
129158 .llvm_name = null,
130 .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
131 .dependencies = featureSet(&[_]Feature{.v1_0}),
159 .description = "Enable version 1.6",
160 .dependencies = featureSet(&[_]Feature{
161 .v1_5,
162 }),
132163 };
133164 result[@intFromEnum(Feature.variable_pointers)] = .{
134165 .llvm_name = null,
135 .description = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities",
136 .dependencies = featureSet(&[_]Feature{.v1_0}),
166 .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
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 }),
137177 };
138178 const ti = @typeInfo(Feature);
139179 for (&result, 0..) |*elem, i| {
......@@ -147,18 +187,23 @@ pub const cpu = struct {
147187 pub const generic: CpuModel = .{
148188 .name = "generic",
149189 .llvm_name = "generic",
150 .features = featureSet(&[_]Feature{.v1_0}),
151 };
152
153 pub const vulkan_v1_2: CpuModel = .{
154 .name = "vulkan_v1_2",
155 .llvm_name = null,
156 .features = featureSet(&[_]Feature{ .v1_5, .shader }),
190 .features = featureSet(&[_]Feature{}),
157191 };
158
159192 pub const opencl_v2: CpuModel = .{
160193 .name = "opencl_v2",
161194 .llvm_name = null,
162 .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 }),
163208 };
164209};
tools/update_cpu_features.zig+122
......@@ -1047,6 +1047,128 @@ const targets = [_]ArchTarget{
10471047 },
10481048 },
10491049 },
1050 .{
1051 .zig_name = "spirv",
1052 .llvm = .{
1053 .name = "SPIRV",
1054 .td_name = "SPIRV",
1055 },
1056 .branch_quota = 2000,
1057 .extra_features = &.{
1058 .{
1059 .zig_name = "v1_0",
1060 .desc = "Enable version 1.0",
1061 .deps = &.{},
1062 },
1063 .{
1064 .zig_name = "v1_1",
1065 .desc = "Enable version 1.1",
1066 .deps = &.{"v1_0"},
1067 },
1068 .{
1069 .zig_name = "v1_2",
1070 .desc = "Enable version 1.2",
1071 .deps = &.{"v1_1"},
1072 },
1073 .{
1074 .zig_name = "v1_3",
1075 .desc = "Enable version 1.3",
1076 .deps = &.{"v1_2"},
1077 },
1078 .{
1079 .zig_name = "v1_4",
1080 .desc = "Enable version 1.4",
1081 .deps = &.{"v1_3"},
1082 },
1083 .{
1084 .zig_name = "v1_5",
1085 .desc = "Enable version 1.5",
1086 .deps = &.{"v1_4"},
1087 },
1088 .{
1089 .zig_name = "v1_6",
1090 .desc = "Enable version 1.6",
1091 .deps = &.{"v1_5"},
1092 },
1093 .{
1094 .zig_name = "int64",
1095 .desc = "Enable Int64 capability",
1096 .deps = &.{"v1_0"},
1097 },
1098 .{
1099 .zig_name = "float16",
1100 .desc = "Enable Float16 capability",
1101 .deps = &.{"v1_0"},
1102 },
1103 .{
1104 .zig_name = "float64",
1105 .desc = "Enable Float64 capability",
1106 .deps = &.{"v1_0"},
1107 },
1108 .{
1109 .zig_name = "matrix",
1110 .desc = "Enable Matrix capability",
1111 .deps = &.{"v1_0"},
1112 },
1113 .{
1114 .zig_name = "storage_push_constant16",
1115 .desc = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability",
1116 .deps = &.{"v1_3"},
1117 },
1118 .{
1119 .zig_name = "arbitrary_precision_integers",
1120 .desc = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability",
1121 .deps = &.{"v1_5"},
1122 },
1123 .{
1124 .zig_name = "kernel",
1125 .desc = "Enable Kernel capability",
1126 .deps = &.{"v1_0"},
1127 },
1128 .{
1129 .zig_name = "addresses",
1130 .desc = "Enable Addresses capability",
1131 .deps = &.{"v1_0"},
1132 },
1133 .{
1134 .zig_name = "generic_pointer",
1135 .desc = "Enable GenericPointer capability",
1136 .deps = &.{ "v1_0", "addresses" },
1137 },
1138 .{
1139 .zig_name = "vector16",
1140 .desc = "Enable Vector16 capability",
1141 .deps = &.{ "v1_0", "kernel" },
1142 },
1143 .{
1144 .zig_name = "shader",
1145 .desc = "Enable Shader capability",
1146 .deps = &.{ "v1_0", "matrix" },
1147 },
1148 .{
1149 .zig_name = "variable_pointers",
1150 .desc = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
1151 .deps = &.{"v1_0"},
1152 },
1153 .{
1154 .zig_name = "physical_storage_buffer",
1155 .desc = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities",
1156 .deps = &.{"v1_0"},
1157 },
1158 },
1159 .extra_cpus = &.{
1160 .{
1161 .llvm_name = null,
1162 .zig_name = "vulkan_v1_2",
1163 .features = &.{ "v1_5", "shader" },
1164 },
1165 .{
1166 .llvm_name = null,
1167 .zig_name = "opencl_v2",
1168 .features = &.{ "v1_2", "kernel", "addresses", "generic_pointer" },
1169 },
1170 },
1171 },
10501172 .{
10511173 .zig_name = "riscv",
10521174 .llvm = .{