diff --git a/StableDiffusion.NET/Backends/Backends.cs b/StableDiffusion.NET/Backends/Backends.cs index 150befb..2ce6607 100644 --- a/StableDiffusion.NET/Backends/Backends.cs +++ b/StableDiffusion.NET/Backends/Backends.cs @@ -14,11 +14,12 @@ public static class Backends public static CpuBackend CpuBackend { get; } = new(); public static CudaBackend CudaBackend { get; } = new(); public static RocmBackend RocmBackend { get; } = new(); + public static SyclBackend SyclBackend { get; } = new(); private static readonly List CUSTOM_BACKENDS = []; public static IReadOnlyList CustomBackends => CUSTOM_BACKENDS.AsReadOnly(); - public static IEnumerable RegisteredBackends => [CpuBackend, CudaBackend, RocmBackend, .. CUSTOM_BACKENDS]; + public static IEnumerable RegisteredBackends => [CpuBackend, CudaBackend, RocmBackend, SyclBackend, .. CUSTOM_BACKENDS]; public static IEnumerable AvailableBackends => RegisteredBackends.Where(x => x.IsAvailable); public static IEnumerable ActiveBackends => AvailableBackends.Where(x => x.IsEnabled); @@ -36,7 +37,7 @@ public static class Backends public static bool RegisterBackend(IBackend backend) { - if (backend is NET.CpuBackend or NET.CudaBackend or NET.RocmBackend) + if (backend is NET.CpuBackend or NET.CudaBackend or NET.RocmBackend or NET.SyclBackend) throw new ArgumentException("Default backends can't be registered again."); if (CUSTOM_BACKENDS.Contains(backend)) diff --git a/StableDiffusion.NET/Backends/SyclBackend.cs b/StableDiffusion.NET/Backends/SyclBackend.cs new file mode 100644 index 0000000..80e0b5b --- /dev/null +++ b/StableDiffusion.NET/Backends/SyclBackend.cs @@ -0,0 +1,30 @@ +using System.Runtime.InteropServices; +using JetBrains.Annotations; + +namespace StableDiffusion.NET; + +[PublicAPI] +public class SyclBackend : IBackend +{ + #region Properties & Fields + + //TODO DarthAffe 10.08.2024: tbh I'm not really sure how to detect a sycl-compatible system so for now it's disabled by default + public bool IsEnabled { get; set; } = false; + + public int Priority => 5; + + public bool IsAvailable => (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + && (RuntimeInformation.OSArchitecture == Architecture.X64); + + public string PathPart => "sycl"; + + #endregion + + #region Constructors + + internal SyclBackend() + { } + + #endregion +} \ No newline at end of file