diff --git a/lib/std/Target/spirv.zig b/lib/std/Target/spirv.zig index 6657bfd971..f45f9a6358 100644 --- a/lib/std/Target/spirv.zig +++ b/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 = .{ diff --git a/src/codegen/spirv/Module.zig b/src/codegen/spirv/Module.zig index 5ed1e2df1a..f7d32ba178 100644 --- a/src/codegen/spirv/Module.zig +++ b/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); + }, } } }