|
12 | 12 | using StabilityMatrix.Avalonia.Languages; |
13 | 13 | using StabilityMatrix.Core.Exceptions; |
14 | 14 | using StabilityMatrix.Core.Helper; |
| 15 | +using StabilityMatrix.Core.Helper.HardwareInfo; |
15 | 16 | using StabilityMatrix.Core.Models; |
16 | 17 | using StabilityMatrix.Core.Models.FileInterfaces; |
17 | 18 | using StabilityMatrix.Core.Models.Packages; |
@@ -696,6 +697,69 @@ public async Task InstallUvIfNecessary(IProgress<ProgressReport>? progress = nul |
696 | 697 | File.Delete(UvDownloadPath); |
697 | 698 | } |
698 | 699 |
|
| 700 | + public string? GetGfxArchFromAmdGpuName() |
| 701 | + { |
| 702 | + var gpu = |
| 703 | + settingsManager.Settings.PreferredGpu |
| 704 | + ?? HardwareHelper.IterGpuInfo().FirstOrDefault(x => x is { Name: not null, IsAmd: true }); |
| 705 | + |
| 706 | + if (gpu?.Name is null || !gpu.IsAmd) |
| 707 | + return null; |
| 708 | + |
| 709 | + // Normalize for safer substring checks (handles RX7800 vs RX 7800, etc.) |
| 710 | + var name = gpu.Name; |
| 711 | + var nameNoSpaces = name.Replace(" ", "", StringComparison.Ordinal); |
| 712 | + |
| 713 | + return name switch |
| 714 | + { |
| 715 | + // RDNA4 |
| 716 | + _ when Has("9060") || Has("9070") => "gfx1201", |
| 717 | + |
| 718 | + // RDNA3.5 APUs |
| 719 | + _ when Has("860M") => "gfx1152", |
| 720 | + _ when Has("890M") => "gfx1150", |
| 721 | + _ when Has("8040S") || Has("8050S") || Has("8060S") || Has("880M") || Has("Z2 Extreme") => |
| 722 | + "gfx1151", |
| 723 | + |
| 724 | + // RDNA3 APUs (Phoenix) |
| 725 | + _ when Has("740M") || Has("760M") || Has("780M") || Has("Z1") || Has("Z2") => "gfx1103", |
| 726 | + |
| 727 | + // RDNA3 dGPU Navi33 |
| 728 | + _ when Has("7400") || Has("7500") || Has("7600") || Has("7650") || Has("7700S") => "gfx1102", |
| 729 | + |
| 730 | + // RDNA3 dGPU Navi32 |
| 731 | + _ when Has("7700") || Has("RX 7800") || HasNoSpace("RX7800") => "gfx1101", |
| 732 | + |
| 733 | + // RDNA3 dGPU Navi31 (incl. Pro) |
| 734 | + _ when Has("W7800") || Has("7900") || Has("7950") || Has("7990") => "gfx1100", |
| 735 | + |
| 736 | + // RDNA2 APUs (Rembrandt) |
| 737 | + _ when Has("660M") || Has("680M") => "gfx1035", |
| 738 | + |
| 739 | + // RDNA2 Navi24 low-end (incl. some mobiles) |
| 740 | + _ when Has("6300") || Has("6400") || Has("6450") || Has("6500") || Has("6550") || Has("6500M") => |
| 741 | + "gfx1034", |
| 742 | + |
| 743 | + // RDNA2 Navi23 |
| 744 | + _ when Has("6600") || Has("6650") || Has("6700S") || Has("6800S") || Has("6600M") => "gfx1032", |
| 745 | + |
| 746 | + // RDNA2 Navi22 (note: desktop 6800 is NOT here; that’s Navi21/gfx1030) |
| 747 | + _ when Has("6700") || Has("6750") || Has("6800M") || Has("6850M") => "gfx1031", |
| 748 | + |
| 749 | + // RDNA2 Navi21 (big die) |
| 750 | + _ when Has("6800") || Has("6900") || Has("6950") => "gfx1030", |
| 751 | + |
| 752 | + _ => null, |
| 753 | + }; |
| 754 | + |
| 755 | + bool HasNoSpace(string s) => |
| 756 | + nameNoSpaces.Contains( |
| 757 | + s.Replace(" ", "", StringComparison.Ordinal), |
| 758 | + StringComparison.OrdinalIgnoreCase |
| 759 | + ); |
| 760 | + bool Has(string s) => name.Contains(s, StringComparison.OrdinalIgnoreCase); |
| 761 | + } |
| 762 | + |
699 | 763 | private async Task DownloadAndExtractPrerequisite( |
700 | 764 | IProgress<ProgressReport>? progress, |
701 | 765 | string downloadUrl, |
|
0 commit comments