zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4bf1e4d198abd2018bf23f9067617800a2bc0554 (tree)
parent 8fa54eb7987bdb8138c625f03aa9fb91239dba48
Author: Ali Cheraghi <alichraghi@proton.me>
Date:   Wed, 21 May 2025 15:26:18 +0330

target: auto-generated spirv features

Diffstat:
Mlib/std/Target/spirv.zig | 205++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
Mtools/update_cpu_features.zig | 122+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 247 insertions(+), 80 deletions(-)

diff --git 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,105 +37,143 @@ 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.v1_0)] = .{ - .llvm_name = null, - .description = "Enable version 1.0", - .dependencies = featureSet(&[_]Feature{}), - }; - result[@intFromEnum(Feature.v1_1)] = .{ - .llvm_name = null, - .description = "Enable version 1.1", - .dependencies = featureSet(&[_]Feature{.v1_0}), - }; - result[@intFromEnum(Feature.v1_2)] = .{ + result[@intFromEnum(Feature.addresses)] = .{ .llvm_name = null, - .description = "Enable version 1.2", - .dependencies = featureSet(&[_]Feature{.v1_1}), + .description = "Enable Addresses capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), }; - result[@intFromEnum(Feature.v1_3)] = .{ + result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{ .llvm_name = null, - .description = "Enable version 1.3", - .dependencies = featureSet(&[_]Feature{.v1_2}), + .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability", + .dependencies = featureSet(&[_]Feature{ + .v1_5, + }), }; - result[@intFromEnum(Feature.v1_4)] = .{ + result[@intFromEnum(Feature.float16)] = .{ .llvm_name = null, - .description = "Enable version 1.4", - .dependencies = featureSet(&[_]Feature{.v1_3}), + .description = "Enable Float16 capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), }; - result[@intFromEnum(Feature.v1_5)] = .{ + result[@intFromEnum(Feature.float64)] = .{ .llvm_name = null, - .description = "Enable version 1.5", - .dependencies = featureSet(&[_]Feature{.v1_4}), + .description = "Enable Float64 capability", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), }; - result[@intFromEnum(Feature.v1_6)] = .{ + result[@intFromEnum(Feature.generic_pointer)] = .{ .llvm_name = null, - .description = "Enable version 1.6", - .dependencies = featureSet(&[_]Feature{.v1_5}), + .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.float16)] = .{ - .llvm_name = null, - .description = "Enable Float16 capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), }; - result[@intFromEnum(Feature.float64)] = .{ + result[@intFromEnum(Feature.kernel)] = .{ .llvm_name = null, - .description = "Enable Float64 capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), + .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}), + .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}), + .dependencies = featureSet(&[_]Feature{ + .v1_3, + }), }; - result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{ + result[@intFromEnum(Feature.v1_0)] = .{ .llvm_name = null, - .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability", - .dependencies = featureSet(&[_]Feature{.v1_5}), + .description = "Enable version 1.0", + .dependencies = featureSet(&[_]Feature{}), }; - result[@intFromEnum(Feature.kernel)] = .{ + result[@intFromEnum(Feature.v1_1)] = .{ .llvm_name = null, - .description = "Enable Kernel capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), + .description = "Enable version 1.1", + .dependencies = featureSet(&[_]Feature{ + .v1_0, + }), }; - result[@intFromEnum(Feature.addresses)] = .{ + result[@intFromEnum(Feature.v1_2)] = .{ .llvm_name = null, - .description = "Enable Addresses capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), + .description = "Enable version 1.2", + .dependencies = featureSet(&[_]Feature{ + .v1_1, + }), }; - result[@intFromEnum(Feature.generic_pointer)] = .{ + result[@intFromEnum(Feature.v1_3)] = .{ .llvm_name = null, - .description = "Enable GenericPointer capability", - .dependencies = featureSet(&[_]Feature{ .v1_0, .addresses }), + .description = "Enable version 1.3", + .dependencies = featureSet(&[_]Feature{ + .v1_2, + }), }; - result[@intFromEnum(Feature.vector16)] = .{ + result[@intFromEnum(Feature.v1_4)] = .{ .llvm_name = null, - .description = "Enable Vector16 capability", - .dependencies = featureSet(&[_]Feature{ .v1_0, .kernel }), + .description = "Enable version 1.4", + .dependencies = featureSet(&[_]Feature{ + .v1_3, + }), }; - result[@intFromEnum(Feature.shader)] = .{ + result[@intFromEnum(Feature.v1_5)] = .{ .llvm_name = null, - .description = "Enable Shader capability", - .dependencies = featureSet(&[_]Feature{ .v1_0, .matrix }), + .description = "Enable version 1.5", + .dependencies = featureSet(&[_]Feature{ + .v1_4, + }), }; - result[@intFromEnum(Feature.physical_storage_buffer)] = .{ + result[@intFromEnum(Feature.v1_6)] = .{ .llvm_name = null, - .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability", - .dependencies = featureSet(&[_]Feature{.v1_0}), + .description = "Enable version 1.6", + .dependencies = featureSet(&[_]Feature{ + .v1_5, + }), }; 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}), + .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{ + .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}), - }; - - pub const vulkan_v1_2: CpuModel = .{ - .name = "vulkan_v1_2", - .llvm_name = null, - .features = featureSet(&[_]Feature{ .v1_5, .shader }), + .features = featureSet(&[_]Feature{}), }; - 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 @@ -1048,6 +1048,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 = .{ .name = "RISCV",