@@ -77,42 +77,59 @@ public bool IsWindowsRocmSupportedGpu()
7777 if ( ! IsAmd || string . IsNullOrWhiteSpace ( Name ) )
7878 return null ;
7979
80- var name = Name . ToLowerInvariant ( ) ;
81-
82- if ( name . Contains ( "9070" ) || name . Contains ( "R9700" ) )
83- return "gfx1201" ;
84-
85- if ( name . Contains ( "9060" ) )
86- return "gfx1200" ;
87-
88- if ( name . Contains ( "z2" ) || name . Contains ( "880m" ) || name . Contains ( "8050s" ) || name . Contains ( "8060s" ) )
89- return "gfx1151" ;
90-
91- if ( name . Contains ( "740m" ) || name . Contains ( "760m" ) || name . Contains ( "780m" ) || name . Contains ( "z1" ) )
92- return "gfx1103" ;
93-
94- if (
95- name . Contains ( "w7400" )
96- || name . Contains ( "w7500" )
97- || name . Contains ( "w7600" )
98- || name . Contains ( "7500 xt" )
99- || name . Contains ( "7600" )
100- || name . Contains ( "7650 gre" )
101- || name . Contains ( "7700s" )
102- )
103- return "gfx1102" ;
104-
105- if (
106- name . Contains ( "v710" )
107- || name . Contains ( "7700" )
108- || ( name . Contains ( "7800" ) && ! name . Contains ( "w7800" ) )
109- )
110- return "gfx1101" ;
111-
112- if ( name . Contains ( "w7800" ) || name . Contains ( "7900" ) || name . Contains ( "7950" ) || name . Contains ( "7990" ) )
113- return "gfx1100" ;
114-
115- return null ;
80+ // Normalize for safer substring checks (handles RX7800 vs RX 7800, etc.)
81+ var name = Name ;
82+ var nameNoSpaces = name . Replace ( " " , "" , StringComparison . Ordinal ) ;
83+
84+ return name switch
85+ {
86+ // RDNA4
87+ _ when Has ( "R9700" ) || Has ( "9070" ) => "gfx1201" ,
88+ _ when Has ( "9060" ) => "gfx1200" ,
89+
90+ // RDNA3.5 APUs
91+ _ when Has ( "860M" ) => "gfx1152" ,
92+ _ when Has ( "890M" ) => "gfx1150" ,
93+ _ when Has ( "8040S" ) || Has ( "8050S" ) || Has ( "8060S" ) || Has ( "880M" ) || Has ( "Z2 Extreme" ) =>
94+ "gfx1151" ,
95+
96+ // RDNA3 APUs (Phoenix)
97+ _ when Has ( "740M" ) || Has ( "760M" ) || Has ( "780M" ) || Has ( "Z1" ) || Has ( "Z2" ) => "gfx1103" ,
98+
99+ // RDNA3 dGPU Navi33
100+ _ when Has ( "7400" ) || Has ( "7500" ) || Has ( "7600" ) || Has ( "7650" ) || Has ( "7700S" ) => "gfx1102" ,
101+
102+ // RDNA3 dGPU Navi32
103+ _ when Has ( "7700" ) || Has ( "RX 7800" ) || HasNoSpace ( "RX7800" ) => "gfx1101" ,
104+
105+ // RDNA3 dGPU Navi31 (incl. Pro)
106+ _ when Has ( "W7800" ) || Has ( "7900" ) || Has ( "7950" ) || Has ( "7990" ) => "gfx1100" ,
107+
108+ // RDNA2 APUs (Rembrandt)
109+ _ when Has ( "660M" ) || Has ( "680M" ) => "gfx1035" ,
110+
111+ // RDNA2 Navi24 low-end (incl. some mobiles)
112+ _ when Has ( "6300" ) || Has ( "6400" ) || Has ( "6450" ) || Has ( "6500" ) || Has ( "6550" ) || Has ( "6500M" ) =>
113+ "gfx1034" ,
114+
115+ // RDNA2 Navi23
116+ _ when Has ( "6600" ) || Has ( "6650" ) || Has ( "6700S" ) || Has ( "6800S" ) || Has ( "6600M" ) => "gfx1032" ,
117+
118+ // RDNA2 Navi22 (note: desktop 6800 is NOT here; that’s Navi21/gfx1030)
119+ _ when Has ( "6700" ) || Has ( "6750" ) || Has ( "6800M" ) || Has ( "6850M" ) => "gfx1031" ,
120+
121+ // RDNA2 Navi21 (big die)
122+ _ when Has ( "6800" ) || Has ( "6900" ) || Has ( "6950" ) => "gfx1030" ,
123+
124+ _ => null ,
125+ } ;
126+
127+ bool HasNoSpace ( string s ) =>
128+ nameNoSpaces . Contains (
129+ s . Replace ( " " , "" , StringComparison . Ordinal ) ,
130+ StringComparison . OrdinalIgnoreCase
131+ ) ;
132+ bool Has ( string s ) => name . Contains ( s , StringComparison . OrdinalIgnoreCase ) ;
116133 }
117134
118135 public virtual bool Equals ( GpuInfo ? other )
0 commit comments