diff --git a/build.zig b/build.zig index 51a3ce4..0b55f62 100644 --- a/build.zig +++ b/build.zig @@ -2,6 +2,8 @@ const std = @import("std"); const Step = std.Build.Step; const builtin = @import("builtin"); +const driver_version: std.SemanticVersion = .{ .major = 1, .minor = 0, .patch = 0 }; + const ImplementationDesc = struct { name: []const u8, icd_name: ?[]const u8 = null, @@ -73,6 +75,7 @@ pub fn build(b: *std.Build) !void { const logs_option: LogType = b.option(LogType, "logs", "Driver logs") orelse .none; const options = b.addOptions(); + options.addOption(std.SemanticVersion, "driver_version", driver_version); options.addOption(LogType, "logs", logs_option); base_mod.addImport("zmath", zmath); @@ -118,6 +121,8 @@ pub fn build(b: *std.Build) !void { .use_llvm = use_llvm, }); + options.addOption(std.SemanticVersion, b.fmt("{s}_vulkan_version", .{impl.name}), impl.vulkan_version); + if (impl.custom) |func| { func(b, lib, lib_mod, base_mod, vulkan, base_c_mod, target, optimize, use_llvm) catch continue; } diff --git a/src/ape/lib.zig b/src/ape/lib.zig index a8f2adb..06555ba 100644 --- a/src/ape/lib.zig +++ b/src/ape/lib.zig @@ -4,6 +4,7 @@ pub const base = @import("base"); pub const soft = @import("soft"); pub const c = base.c; +pub const config = base.config; pub const ApeInstance = @import("ApeInstance.zig"); @@ -11,8 +12,12 @@ pub const Instance = ApeInstance; pub const DRIVER_NAME = "Ape"; -pub const VULKAN_VERSION = vk.makeApiVersion(0, 1, 0, 0); -pub const DRIVER_VERSION = vk.makeApiVersion(0, 0, 0, 1); +pub const VULKAN_VERSION = vk.makeApiVersion( + 0, + config.ape_vulkan_version.major, + config.ape_vulkan_version.minor, + config.ape_vulkan_version.patch, +); pub const std_options = base.std_options; diff --git a/src/soft/SoftPhysicalDevice.zig b/src/soft/SoftPhysicalDevice.zig index 6a6b046..4b441a1 100644 --- a/src/soft/SoftPhysicalDevice.zig +++ b/src/soft/SoftPhysicalDevice.zig @@ -57,7 +57,7 @@ pub fn create(allocator: std.mem.Allocator, instance: *base.Instance) VkError!*S }; interface.props.api_version = @bitCast(lib.VULKAN_VERSION); - interface.props.driver_version = @bitCast(lib.DRIVER_VERSION); + interface.props.driver_version = @bitCast(base.DRIVER_VERSION); interface.props.device_id = lib.DEVICE_ID; interface.props.device_type = .cpu; interface.props.pipeline_cache_uuid = lib.PIPELINE_CACHE_UUID; diff --git a/src/soft/lib.zig b/src/soft/lib.zig index e1b4f91..89652c6 100644 --- a/src/soft/lib.zig +++ b/src/soft/lib.zig @@ -3,6 +3,7 @@ const vk = @import("vulkan"); pub const base = @import("base"); pub const c = @import("soft_c"); +pub const config = base.config; pub const Device = @import("device/Device.zig"); @@ -38,8 +39,12 @@ pub const Instance = SoftInstance; pub const DRIVER_LOGS_ENV_NAME = base.DRIVER_LOGS_ENV_NAME; pub const DRIVER_NAME = "Soft"; -pub const VULKAN_VERSION = vk.makeApiVersion(0, 1, 0, 0); -pub const DRIVER_VERSION = vk.makeApiVersion(0, 0, 0, 1); +pub const VULKAN_VERSION = vk.makeApiVersion( + 0, + config.soft_vulkan_version.major, + config.soft_vulkan_version.minor, + config.soft_vulkan_version.patch, +); pub const DEVICE_ID = 0x600DCAFE; pub const PIPELINE_CACHE_UUID: [vk.UUID_SIZE]u8 = "ApeSoftCacheUUID".*; diff --git a/src/vulkan/lib.zig b/src/vulkan/lib.zig index 3100972..820cf1d 100644 --- a/src/vulkan/lib.zig +++ b/src/vulkan/lib.zig @@ -56,8 +56,12 @@ pub const VULKAN_VENDOR_ID: i32 = @intFromEnum(vk.VendorId.ape); /// Default driver name pub const DRIVER_NAME = "Unnamed Ape Driver"; -/// Default Vulkan version -pub const VULKAN_VERSION = vk.makeApiVersion(0, 1, 0, 0); +pub const DRIVER_VERSION = vk.makeApiVersion( + 0, + config.driver_version.major, + config.driver_version.minor, + config.driver_version.patch, +); /// Maximum number of descriptor sets per pipeline pub const VULKAN_MAX_DESCRIPTOR_SETS = 8;