diff --git a/StableDiffusion.NET/Backends/Backends.cs b/StableDiffusion.NET/Backends/Backends.cs index 2ce6607..a2d7295 100644 --- a/StableDiffusion.NET/Backends/Backends.cs +++ b/StableDiffusion.NET/Backends/Backends.cs @@ -15,11 +15,12 @@ public static class Backends public static CudaBackend CudaBackend { get; } = new(); public static RocmBackend RocmBackend { get; } = new(); public static SyclBackend SyclBackend { get; } = new(); + public static VulkanBackend VulkanBackend { get; } = new(); private static readonly List CUSTOM_BACKENDS = []; public static IReadOnlyList CustomBackends => CUSTOM_BACKENDS.AsReadOnly(); - public static IEnumerable RegisteredBackends => [CpuBackend, CudaBackend, RocmBackend, SyclBackend, .. CUSTOM_BACKENDS]; + public static IEnumerable RegisteredBackends => [CpuBackend, CudaBackend, RocmBackend, SyclBackend, VulkanBackend, .. CUSTOM_BACKENDS]; public static IEnumerable AvailableBackends => RegisteredBackends.Where(x => x.IsAvailable); public static IEnumerable ActiveBackends => AvailableBackends.Where(x => x.IsEnabled); @@ -37,7 +38,7 @@ public static class Backends public static bool RegisterBackend(IBackend backend) { - if (backend is NET.CpuBackend or NET.CudaBackend or NET.RocmBackend or NET.SyclBackend) + if (backend is NET.CpuBackend or NET.CudaBackend or NET.RocmBackend or NET.SyclBackend or NET.VulkanBackend) throw new ArgumentException("Default backends can't be registered again."); if (CUSTOM_BACKENDS.Contains(backend)) diff --git a/StableDiffusion.NET/Backends/VulkanBackend.cs b/StableDiffusion.NET/Backends/VulkanBackend.cs new file mode 100644 index 0000000..0fa5097 --- /dev/null +++ b/StableDiffusion.NET/Backends/VulkanBackend.cs @@ -0,0 +1,29 @@ +using System.Runtime.InteropServices; +using JetBrains.Annotations; + +namespace StableDiffusion.NET; + +[PublicAPI] +public class VulkanBackend : IBackend +{ + #region Properties & Fields + + //TODO DarthAffe 28.08.2024: Find a way to detect vulkan compatibility + public bool IsEnabled { get; set; } = false; + + public int Priority { get; set; } = 5; + + public bool IsAvailable => RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + && (RuntimeInformation.OSArchitecture == Architecture.X64); + + public string PathPart => "vulkan"; + + #endregion + + #region Constructors + + internal VulkanBackend() + { } + + #endregion +} \ No newline at end of file