From 4bf1e4d198abd2018bf23f9067617800a2bc0554 Mon Sep 17 00:00:00 2001 From: Ali Cheraghi Date: Wed, 21 May 2025 15:26:18 +0330 Subject: [PATCH] target: auto-generated spirv features --- lib/std/Target/spirv.zig | 217 ++++++++++++++++++++-------------- tools/update_cpu_features.zig | 122 +++++++++++++++++++ 2 files changed, 253 insertions(+), 86 deletions(-) diff --git a/lib/std/Target/spirv.zig b/lib/std/Target/spirv.zig index 90abacdd08..229d77a6d6 100644 --- a/lib/std/Target/spirv.zig +++ b/lib/std/Target/spirv.zig @@ -1,8 +1,21 @@ +//! This file is auto-generated by tools/update_cpu_features.zig. + const std = @import("../std.zig"); const CpuFeature = std.Target.Cpu.Feature; const CpuModel = std.Target.Cpu.Model; pub const Feature = enum { + addresses, + arbitrary_precision_integers, + float16, + float64, + generic_pointer, + int64, + kernel, + matrix, + physical_storage_buffer, + shader, + storage_push_constant16, v1_0, v1_1, v1_2, @@ -10,19 +23,8 @@ pub const Feature = enum { v1_4, v1_5, v1_6, - int64, - float16, - float64, - matrix, - storage_push_constant16, - arbitrary_precision_integers, - kernel, - addresses, - generic_pointer, - vector16, - shader, variable_pointers, - physical_storage_buffer, + vector16, }; pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet; @@ -35,6 +37,83 @@ pub const all_features = blk: { const len = @typeInfo(Feature).@"enum".fields.len; std.debug.assert(len <= CpuFeature.Set.needed_bit_count); var result: [len]CpuFeature = undefined; + result[@intFromEnum(Feature.addresses)] = .{ + .llvm_name = null, + .description = "Enable Addresses capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), + }; + result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{ + .llvm_name = null, + .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability", + .dependencies = featureSet(&[_]Feature{ + .v1_5, + }), + }; + result[@intFromEnum(Feature.float16)] = .{ + .llvm_name = null, + .description = "Enable Float16 capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), + }; + result[@intFromEnum(Feature.float64)] = .{ + .llvm_name = null, + .description = "Enable Float64 capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), + }; + result[@intFromEnum(Feature.generic_pointer)] = .{ + .llvm_name = null, + .description = "Enable GenericPointer capability", + .dependencies = featureSet(&[_]Feature{ + .addresses, + }), + }; + result[@intFromEnum(Feature.int64)] = .{ + .llvm_name = null, + .description = "Enable Int64 capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), + }; + result[@intFromEnum(Feature.kernel)] = .{ + .llvm_name = null, + .description = "Enable Kernel capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), + }; + result[@intFromEnum(Feature.matrix)] = .{ + .llvm_name = null, + .description = "Enable Matrix capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), + }; + result[@intFromEnum(Feature.physical_storage_buffer)] = .{ + .llvm_name = null, + .description = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), + }; + result[@intFromEnum(Feature.shader)] = .{ + .llvm_name = null, + .description = "Enable Shader capability", + .dependencies = featureSet(&[_]Feature{ + .matrix, + }), + }; + result[@intFromEnum(Feature.storage_push_constant16)] = .{ + .llvm_name = null, + .description = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability", + .dependencies = featureSet(&[_]Feature{ + .v1_3, + }), + }; result[@intFromEnum(Feature.v1_0)] = .{ .llvm_name = null, .description = "Enable version 1.0", @@ -43,97 +122,58 @@ pub const all_features = blk: { result[@intFromEnum(Feature.v1_1)] = .{ .llvm_name = null, .description = "Enable version 1.1", - .dependencies = featureSet(&[_]Feature{.v1_0}), + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), }; result[@intFromEnum(Feature.v1_2)] = .{ .llvm_name = null, .description = "Enable version 1.2", - .dependencies = featureSet(&[_]Feature{.v1_1}), + .dependencies = featureSet(&[_]Feature{ + .v1_1, + }), }; result[@intFromEnum(Feature.v1_3)] = .{ .llvm_name = null, .description = "Enable version 1.3", - .dependencies = featureSet(&[_]Feature{.v1_2}), + .dependencies = featureSet(&[_]Feature{ + .v1_2, + }), }; result[@intFromEnum(Feature.v1_4)] = .{ .llvm_name = null, .description = "Enable version 1.4", - .dependencies = featureSet(&[_]Feature{.v1_3}), + .dependencies = featureSet(&[_]Feature{ + .v1_3, + }), }; result[@intFromEnum(Feature.v1_5)] = .{ .llvm_name = null, .description = "Enable version 1.5", - .dependencies = featureSet(&[_]Feature{.v1_4}), + .dependencies = featureSet(&[_]Feature{ + .v1_4, + }), }; result[@intFromEnum(Feature.v1_6)] = .{ .llvm_name = null, .description = "Enable version 1.6", - .dependencies = featureSet(&[_]Feature{.v1_5}), + .dependencies = featureSet(&[_]Feature{ + .v1_5, + }), }; - result[@intFromEnum(Feature.int64)] = .{ + result[@intFromEnum(Feature.variable_pointers)] = .{ .llvm_name = null, - .description = "Enable Int64 capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), - }; - result[@intFromEnum(Feature.float16)] = .{ - .llvm_name = null, - .description = "Enable Float16 capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), - }; - result[@intFromEnum(Feature.float64)] = .{ - .llvm_name = null, - .description = "Enable Float64 capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), - }; - result[@intFromEnum(Feature.matrix)] = .{ - .llvm_name = null, - .description = "Enable Matrix capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), - }; - result[@intFromEnum(Feature.storage_push_constant16)] = .{ - .llvm_name = null, - .description = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability", - .dependencies = featureSet(&[_]Feature{.v1_3}), - }; - result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{ - .llvm_name = null, - .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability", - .dependencies = featureSet(&[_]Feature{.v1_5}), - }; - result[@intFromEnum(Feature.kernel)] = .{ - .llvm_name = null, - .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", - .dependencies = featureSet(&[_]Feature{ .v1_0, .addresses }), + .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), }; result[@intFromEnum(Feature.vector16)] = .{ .llvm_name = null, .description = "Enable Vector16 capability", - .dependencies = featureSet(&[_]Feature{ .v1_0, .kernel }), - }; - result[@intFromEnum(Feature.shader)] = .{ - .llvm_name = null, - .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}), - }; - result[@intFromEnum(Feature.variable_pointers)] = .{ - .llvm_name = null, - .description = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities", - .dependencies = featureSet(&[_]Feature{.v1_0}), + .dependencies = featureSet(&[_]Feature{ + .kernel, + }), }; const ti = @typeInfo(Feature); for (&result, 0..) |*elem, i| { @@ -147,18 +187,23 @@ pub const cpu = struct { pub const generic: CpuModel = .{ .name = "generic", .llvm_name = "generic", - .features = featureSet(&[_]Feature{.v1_0}), + .features = featureSet(&[_]Feature{}), }; - - pub const vulkan_v1_2: CpuModel = .{ - .name = "vulkan_v1_2", - .llvm_name = null, - .features = featureSet(&[_]Feature{ .v1_5, .shader }), - }; - pub const opencl_v2: CpuModel = .{ .name = "opencl_v2", .llvm_name = null, - .features = featureSet(&[_]Feature{ .v1_2, .kernel, .addresses, .generic_pointer }), + .features = featureSet(&[_]Feature{ + .generic_pointer, + .kernel, + .v1_2, + }), + }; + pub const vulkan_v1_2: CpuModel = .{ + .name = "vulkan_v1_2", + .llvm_name = null, + .features = featureSet(&[_]Feature{ + .shader, + .v1_5, + }), }; }; diff --git a/tools/update_cpu_features.zig b/tools/update_cpu_features.zig index 9ac7b7ef2a..f033195aac 100644 --- a/tools/update_cpu_features.zig +++ b/tools/update_cpu_features.zig @@ -1047,6 +1047,128 @@ const targets = [_]ArchTarget{ }, }, }, + .{ + .zig_name = "spirv", + .llvm = .{ + .name = "SPIRV", + .td_name = "SPIRV", + }, + .branch_quota = 2000, + .extra_features = &.{ + .{ + .zig_name = "v1_0", + .desc = "Enable version 1.0", + .deps = &.{}, + }, + .{ + .zig_name = "v1_1", + .desc = "Enable version 1.1", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "v1_2", + .desc = "Enable version 1.2", + .deps = &.{"v1_1"}, + }, + .{ + .zig_name = "v1_3", + .desc = "Enable version 1.3", + .deps = &.{"v1_2"}, + }, + .{ + .zig_name = "v1_4", + .desc = "Enable version 1.4", + .deps = &.{"v1_3"}, + }, + .{ + .zig_name = "v1_5", + .desc = "Enable version 1.5", + .deps = &.{"v1_4"}, + }, + .{ + .zig_name = "v1_6", + .desc = "Enable version 1.6", + .deps = &.{"v1_5"}, + }, + .{ + .zig_name = "int64", + .desc = "Enable Int64 capability", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "float16", + .desc = "Enable Float16 capability", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "float64", + .desc = "Enable Float64 capability", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "matrix", + .desc = "Enable Matrix capability", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "storage_push_constant16", + .desc = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability", + .deps = &.{"v1_3"}, + }, + .{ + .zig_name = "arbitrary_precision_integers", + .desc = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability", + .deps = &.{"v1_5"}, + }, + .{ + .zig_name = "kernel", + .desc = "Enable Kernel capability", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "addresses", + .desc = "Enable Addresses capability", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "generic_pointer", + .desc = "Enable GenericPointer capability", + .deps = &.{ "v1_0", "addresses" }, + }, + .{ + .zig_name = "vector16", + .desc = "Enable Vector16 capability", + .deps = &.{ "v1_0", "kernel" }, + }, + .{ + .zig_name = "shader", + .desc = "Enable Shader capability", + .deps = &.{ "v1_0", "matrix" }, + }, + .{ + .zig_name = "variable_pointers", + .desc = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability", + .deps = &.{"v1_0"}, + }, + .{ + .zig_name = "physical_storage_buffer", + .desc = "Enable SPV_KHR_variable_pointers extension and the (VariablePointers, VariablePointersStorageBuffer) capabilities", + .deps = &.{"v1_0"}, + }, + }, + .extra_cpus = &.{ + .{ + .llvm_name = null, + .zig_name = "vulkan_v1_2", + .features = &.{ "v1_5", "shader" }, + }, + .{ + .llvm_name = null, + .zig_name = "opencl_v2", + .features = &.{ "v1_2", "kernel", "addresses", "generic_pointer" }, + }, + }, + }, .{ .zig_name = "riscv", .llvm = .{