Commit 78ad866dd1

Ali Cheraghi <alichraghi@proton.me>
2025-03-09 04:12:38
target: split `addresses` and `physical_storage_buffer` features
1 parent c1977bf
Changed files (2)
lib
std
Target
src
codegen
lib/std/Target/spirv.zig
@@ -15,13 +15,14 @@ pub const Feature = enum {
     int64,
     float16,
     float64,
-    addresses,
     matrix,
     storage_push_constant16,
     kernel,
+    addresses,
     generic_pointer,
     vector16,
     shader,
+    physical_storage_buffer,
 };
 
 pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
@@ -94,11 +95,6 @@ pub const all_features = blk: {
         .description = "Enable Float64 capability",
         .dependencies = featureSet(&[_]Feature{.v1_0}),
     };
-    result[@intFromEnum(Feature.addresses)] = .{
-        .llvm_name = null,
-        .description = "Enable either the Addresses capability or, SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
-        .dependencies = featureSet(&[_]Feature{.v1_0}),
-    };
     result[@intFromEnum(Feature.matrix)] = .{
         .llvm_name = null,
         .description = "Enable Matrix capability",
@@ -114,6 +110,11 @@ pub const all_features = blk: {
         .description = "Enable Kernel capability",
         .dependencies = featureSet(&[_]Feature{.v1_0}),
     };
+    result[@intFromEnum(Feature.addresses)] = .{
+        .llvm_name = null,
+        .description = "Enable Addresses capability",
+        .dependencies = featureSet(&[_]Feature{.v1_0}),
+    };
     result[@intFromEnum(Feature.generic_pointer)] = .{
         .llvm_name = null,
         .description = "Enable GenericPointer capability",
@@ -129,6 +130,11 @@ pub const all_features = blk: {
         .description = "Enable Shader capability",
         .dependencies = featureSet(&[_]Feature{ .v1_0, .matrix }),
     };
+    result[@intFromEnum(Feature.physical_storage_buffer)] = .{
+        .llvm_name = null,
+        .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
+        .dependencies = featureSet(&[_]Feature{.v1_0}),
+    };
     const ti = @typeInfo(Feature);
     for (&result, 0..) |*elem, i| {
         elem.index = i;
@@ -147,7 +153,7 @@ pub const cpu = struct {
     pub const vulkan_v1_2: CpuModel = .{
         .name = "vulkan_v1_2",
         .llvm_name = null,
-        .features = featureSet(&[_]Feature{ .v1_5, .shader, .addresses }),
+        .features = featureSet(&[_]Feature{ .v1_5, .shader, .physical_storage_buffer }),
     };
 
     pub const opencl_v2: CpuModel = .{
src/codegen/spirv/Module.zig
@@ -343,18 +343,17 @@ pub fn finalize(self: *Module, a: Allocator) ![]Word {
                     try self.addExtension("SPV_KHR_16bit_storage");
                     try self.addCapability(.StoragePushConstant16);
                 },
-                .addresses => if (self.hasFeature(.shader)) {
-                    try self.addExtension("SPV_KHR_physical_storage_buffer");
-                    try self.addCapability(.PhysicalStorageBufferAddresses);
-                } else {
-                    try self.addCapability(.Addresses);
-                },
+                .addresses => try self.addCapability(.Addresses),
                 // Kernel
                 .kernel => try self.addCapability(.Kernel),
                 .generic_pointer => try self.addCapability(.GenericPointer),
                 .vector16 => try self.addCapability(.Vector16),
                 // Shader
                 .shader => try self.addCapability(.Shader),
+                .physical_storage_buffer => {
+                    try self.addExtension("SPV_KHR_physical_storage_buffer");
+                    try self.addCapability(.PhysicalStorageBufferAddresses);
+                },
             }
         }
     }