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,8 +1,21 @@
1//! This file is auto-generated by tools/update_cpu_features.zig.
2
1const std = @import("../std.zig");3const std = @import("../std.zig");
2const CpuFeature = std.Target.Cpu.Feature;4const CpuFeature = std.Target.Cpu.Feature;
3const CpuModel = std.Target.Cpu.Model;5const CpuModel = std.Target.Cpu.Model;
46
5pub const Feature = enum {7pub 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,
6 v1_0,19 v1_0,
7 v1_1,20 v1_1,
8 v1_2,21 v1_2,
...@@ -10,19 +23,8 @@ pub const Feature = enum {...@@ -10,19 +23,8 @@ pub const Feature = enum {
10 v1_4,23 v1_4,
11 v1_5,24 v1_5,
12 v1_6,25 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,
24 variable_pointers,26 variable_pointers,
25 physical_storage_buffer,27 vector16,
26};28};
2729
28pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;30pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
...@@ -35,105 +37,143 @@ pub const all_features = blk: {...@@ -35,105 +37,143 @@ pub const all_features = blk: {
35 const len = @typeInfo(Feature).@"enum".fields.len;37 const len = @typeInfo(Feature).@"enum".fields.len;
36 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);38 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
37 var result: [len]CpuFeature = undefined;39 var result: [len]CpuFeature = undefined;
38 result[@intFromEnum(Feature.v1_0)] = .{40 result[@intFromEnum(Feature.addresses)] = .{
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)] = .{
49 .llvm_name = null,41 .llvm_name = null,
50 .description = "Enable version 1.2",42 .description = "Enable Addresses capability",
51 .dependencies = featureSet(&[_]Feature{.v1_1}),43 .dependencies = featureSet(&[_]Feature{
44 .v1_0,
45 }),
52 };46 };
53 result[@intFromEnum(Feature.v1_3)] = .{47 result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{
54 .llvm_name = null,48 .llvm_name = null,
55 .description = "Enable version 1.3",49 .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability",
56 .dependencies = featureSet(&[_]Feature{.v1_2}),50 .dependencies = featureSet(&[_]Feature{
51 .v1_5,
52 }),
57 };53 };
58 result[@intFromEnum(Feature.v1_4)] = .{54 result[@intFromEnum(Feature.float16)] = .{
59 .llvm_name = null,55 .llvm_name = null,
60 .description = "Enable version 1.4",56 .description = "Enable Float16 capability",
61 .dependencies = featureSet(&[_]Feature{.v1_3}),57 .dependencies = featureSet(&[_]Feature{
58 .v1_0,
59 }),
62 };60 };
63 result[@intFromEnum(Feature.v1_5)] = .{61 result[@intFromEnum(Feature.float64)] = .{
64 .llvm_name = null,62 .llvm_name = null,
65 .description = "Enable version 1.5",63 .description = "Enable Float64 capability",
66 .dependencies = featureSet(&[_]Feature{.v1_4}),64 .dependencies = featureSet(&[_]Feature{
65 .v1_0,
66 }),
67 };67 };
68 result[@intFromEnum(Feature.v1_6)] = .{68 result[@intFromEnum(Feature.generic_pointer)] = .{
69 .llvm_name = null,69 .llvm_name = null,
70 .description = "Enable version 1.6",70 .description = "Enable GenericPointer capability",
71 .dependencies = featureSet(&[_]Feature{.v1_5}),71 .dependencies = featureSet(&[_]Feature{
72 .addresses,
73 }),
72 };74 };
73 result[@intFromEnum(Feature.int64)] = .{75 result[@intFromEnum(Feature.int64)] = .{
74 .llvm_name = null,76 .llvm_name = null,
75 .description = "Enable Int64 capability",77 .description = "Enable Int64 capability",
76 .dependencies = featureSet(&[_]Feature{.v1_0}),78 .dependencies = featureSet(&[_]Feature{
77 };79 .v1_0,
78 result[@intFromEnum(Feature.float16)] = .{80 }),
79 .llvm_name = null,
80 .description = "Enable Float16 capability",
81 .dependencies = featureSet(&[_]Feature{.v1_0}),
82 };81 };
83 result[@intFromEnum(Feature.float64)] = .{82 result[@intFromEnum(Feature.kernel)] = .{
84 .llvm_name = null,83 .llvm_name = null,
85 .description = "Enable Float64 capability",84 .description = "Enable Kernel capability",
86 .dependencies = featureSet(&[_]Feature{.v1_0}),85 .dependencies = featureSet(&[_]Feature{
86 .v1_0,
87 }),
87 };88 };
88 result[@intFromEnum(Feature.matrix)] = .{89 result[@intFromEnum(Feature.matrix)] = .{
89 .llvm_name = null,90 .llvm_name = null,
90 .description = "Enable Matrix capability",91 .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 }),
92 };109 };
93 result[@intFromEnum(Feature.storage_push_constant16)] = .{110 result[@intFromEnum(Feature.storage_push_constant16)] = .{
94 .llvm_name = null,111 .llvm_name = null,
95 .description = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability",112 .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 }),
97 };116 };
98 result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{117 result[@intFromEnum(Feature.v1_0)] = .{
99 .llvm_name = null,118 .llvm_name = null,
100 .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability",119 .description = "Enable version 1.0",
101 .dependencies = featureSet(&[_]Feature{.v1_5}),120 .dependencies = featureSet(&[_]Feature{}),
102 };121 };
103 result[@intFromEnum(Feature.kernel)] = .{122 result[@intFromEnum(Feature.v1_1)] = .{
104 .llvm_name = null,123 .llvm_name = null,
105 .description = "Enable Kernel capability",124 .description = "Enable version 1.1",
106 .dependencies = featureSet(&[_]Feature{.v1_0}),125 .dependencies = featureSet(&[_]Feature{
126 .v1_0,
127 }),
107 };128 };
108 result[@intFromEnum(Feature.addresses)] = .{129 result[@intFromEnum(Feature.v1_2)] = .{
109 .llvm_name = null,130 .llvm_name = null,
110 .description = "Enable Addresses capability",131 .description = "Enable version 1.2",
111 .dependencies = featureSet(&[_]Feature{.v1_0}),132 .dependencies = featureSet(&[_]Feature{
133 .v1_1,
134 }),
112 };135 };
113 result[@intFromEnum(Feature.generic_pointer)] = .{136 result[@intFromEnum(Feature.v1_3)] = .{
114 .llvm_name = null,137 .llvm_name = null,
115 .description = "Enable GenericPointer capability",138 .description = "Enable version 1.3",
116 .dependencies = featureSet(&[_]Feature{ .v1_0, .addresses }),139 .dependencies = featureSet(&[_]Feature{
140 .v1_2,
141 }),
117 };142 };
118 result[@intFromEnum(Feature.vector16)] = .{143 result[@intFromEnum(Feature.v1_4)] = .{
119 .llvm_name = null,144 .llvm_name = null,
120 .description = "Enable Vector16 capability",145 .description = "Enable version 1.4",
121 .dependencies = featureSet(&[_]Feature{ .v1_0, .kernel }),146 .dependencies = featureSet(&[_]Feature{
147 .v1_3,
148 }),
122 };149 };
123 result[@intFromEnum(Feature.shader)] = .{150 result[@intFromEnum(Feature.v1_5)] = .{
124 .llvm_name = null,151 .llvm_name = null,
125 .description = "Enable Shader capability",152 .description = "Enable version 1.5",
126 .dependencies = featureSet(&[_]Feature{ .v1_0, .matrix }),153 .dependencies = featureSet(&[_]Feature{
154 .v1_4,
155 }),
127 };156 };
128 result[@intFromEnum(Feature.physical_storage_buffer)] = .{157 result[@intFromEnum(Feature.v1_6)] = .{
129 .llvm_name = null,158 .llvm_name = null,
130 .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",159 .description = "Enable version 1.6",
131 .dependencies = featureSet(&[_]Feature{.v1_0}),160 .dependencies = featureSet(&[_]Feature{
161 .v1_5,
162 }),
132 };163 };
133 result[@intFromEnum(Feature.variable_pointers)] = .{164 result[@intFromEnum(Feature.variable_pointers)] = .{
134 .llvm_name = null,165 .llvm_name = null,
135 .description = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities",166 .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
136 .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 }),
137 };177 };
138 const ti = @typeInfo(Feature);178 const ti = @typeInfo(Feature);
139 for (&result, 0..) |*elem, i| {179 for (&result, 0..) |*elem, i| {
...@@ -147,18 +187,23 @@ pub const cpu = struct {...@@ -147,18 +187,23 @@ pub const cpu = struct {
147 pub const generic: CpuModel = .{187 pub const generic: CpuModel = .{
148 .name = "generic",188 .name = "generic",
149 .llvm_name = "generic",189 .llvm_name = "generic",
150 .features = featureSet(&[_]Feature{.v1_0}),190 .features = featureSet(&[_]Feature{}),
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 }),
157 };191 };
158
159 pub const opencl_v2: CpuModel = .{192 pub const opencl_v2: CpuModel = .{
160 .name = "opencl_v2",193 .name = "opencl_v2",
161 .llvm_name = null,194 .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 }),
163 };208 };
164};209};
tools/update_cpu_features.zig+122
...@@ -1047,6 +1047,128 @@ const targets = [_]ArchTarget{...@@ -1047,6 +1047,128 @@ const targets = [_]ArchTarget{
1047 },1047 },
1048 },1048 },
1049 },1049 },
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 },
1050 .{1172 .{
1051 .zig_name = "riscv",1173 .zig_name = "riscv",
1052 .llvm = .{1174 .llvm = .{