authorgravatar for alichraghi@proton.meAli Chraghi <alichraghi@proton.me> 2025-03-09 06:42:38+03:30
committergravatar for alichraghi@proton.meAli Chraghi <alichraghi@proton.me> 2025-03-17 21:56:17+03:30
log78ad866dd1fc49cb826215002274991201cbb89e
treec220fd66f7560f1b116272f1840a3ced5a788315
parentc1977bf0fbe523afb4721bc8346ee6536e3c0aa2

target: split `addresses` and `physical_storage_buffer` features


2 files changed, 18 insertions(+), 13 deletions(-)

lib/std/Target/spirv.zig+13-7
......@@ -15,13 +15,14 @@ pub const Feature = enum {
1515 int64,
1616 float16,
1717 float64,
18 addresses,
1918 matrix,
2019 storage_push_constant16,
2120 kernel,
21 addresses,
2222 generic_pointer,
2323 vector16,
2424 shader,
25 physical_storage_buffer,
2526};
2627
2728pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
......@@ -94,11 +95,6 @@ pub const all_features = blk: {
9495 .description = "Enable Float64 capability",
9596 .dependencies = featureSet(&[_]Feature{.v1_0}),
9697 };
97 result[@intFromEnum(Feature.addresses)] = .{
98 .llvm_name = null,
99 .description = "Enable either the Addresses capability or, SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
100 .dependencies = featureSet(&[_]Feature{.v1_0}),
101 };
10298 result[@intFromEnum(Feature.matrix)] = .{
10399 .llvm_name = null,
104100 .description = "Enable Matrix capability",
......@@ -114,6 +110,11 @@ pub const all_features = blk: {
114110 .description = "Enable Kernel capability",
115111 .dependencies = featureSet(&[_]Feature{.v1_0}),
116112 };
113 result[@intFromEnum(Feature.addresses)] = .{
114 .llvm_name = null,
115 .description = "Enable Addresses capability",
116 .dependencies = featureSet(&[_]Feature{.v1_0}),
117 };
117118 result[@intFromEnum(Feature.generic_pointer)] = .{
118119 .llvm_name = null,
119120 .description = "Enable GenericPointer capability",
......@@ -129,6 +130,11 @@ pub const all_features = blk: {
129130 .description = "Enable Shader capability",
130131 .dependencies = featureSet(&[_]Feature{ .v1_0, .matrix }),
131132 };
133 result[@intFromEnum(Feature.physical_storage_buffer)] = .{
134 .llvm_name = null,
135 .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
136 .dependencies = featureSet(&[_]Feature{.v1_0}),
137 };
132138 const ti = @typeInfo(Feature);
133139 for (&result, 0..) |*elem, i| {
134140 elem.index = i;
......@@ -147,7 +153,7 @@ pub const cpu = struct {
147153 pub const vulkan_v1_2: CpuModel = .{
148154 .name = "vulkan_v1_2",
149155 .llvm_name = null,
150 .features = featureSet(&[_]Feature{ .v1_5, .shader, .addresses }),
156 .features = featureSet(&[_]Feature{ .v1_5, .shader, .physical_storage_buffer }),
151157 };
152158
153159 pub const opencl_v2: CpuModel = .{
src/codegen/spirv/Module.zig+5-6
......@@ -343,18 +343,17 @@ pub fn finalize(self: *Module, a: Allocator) ![]Word {
343343 try self.addExtension("SPV_KHR_16bit_storage");
344344 try self.addCapability(.StoragePushConstant16);
345345 },
346 .addresses => if (self.hasFeature(.shader)) {
347 try self.addExtension("SPV_KHR_physical_storage_buffer");
348 try self.addCapability(.PhysicalStorageBufferAddresses);
349 } else {
350 try self.addCapability(.Addresses);
351 },
346 .addresses => try self.addCapability(.Addresses),
352347 // Kernel
353348 .kernel => try self.addCapability(.Kernel),
354349 .generic_pointer => try self.addCapability(.GenericPointer),
355350 .vector16 => try self.addCapability(.Vector16),
356351 // Shader
357352 .shader => try self.addCapability(.Shader),
353 .physical_storage_buffer => {
354 try self.addExtension("SPV_KHR_physical_storage_buffer");
355 try self.addCapability(.PhysicalStorageBufferAddresses);
356 },
358357 }
359358 }
360359 }