From 04d54a3efcac5f6289c057110b8ede3351a358a8 Mon Sep 17 00:00:00 2001 From: henrygd Date: Fri, 13 Feb 2026 19:41:12 -0500 Subject: [PATCH] update sysfs amd collector to pull pretty name from amdgpu.ids (#1569) --- agent/gpu_amd_linux.go | 155 ++++++-- agent/gpu_amd_linux_test.go | 236 ++++++++++++ agent/test-data/amdgpu.ids | 700 ++++++++++++++++++++++++++++++++++++ 3 files changed, 1067 insertions(+), 24 deletions(-) create mode 100644 agent/gpu_amd_linux_test.go create mode 100644 agent/test-data/amdgpu.ids diff --git a/agent/gpu_amd_linux.go b/agent/gpu_amd_linux.go index cba8fe5e..0b1398b2 100644 --- a/agent/gpu_amd_linux.go +++ b/agent/gpu_amd_linux.go @@ -3,6 +3,7 @@ package agent import ( + "bufio" "fmt" "log/slog" "os" @@ -15,6 +16,15 @@ import ( "github.com/henrygd/beszel/internal/entities/system" ) +var amdgpuNameCache = struct { + sync.RWMutex + hits map[string]string + misses map[string]struct{} +}{ + hits: make(map[string]string), + misses: make(map[string]struct{}), +} + // hasAmdSysfs returns true if any AMD GPU sysfs nodes are found func (gm *GPUManager) hasAmdSysfs() bool { cards, err := filepath.Glob("/sys/class/drm/card*/device/vendor") @@ -75,6 +85,7 @@ func (gm *GPUManager) collectAmdStats() error { } } +// isAmdGpu checks whether a DRM card path belongs to AMD vendor ID 0x1002. func isAmdGpu(cardPath string) bool { vendorPath := filepath.Join(cardPath, "device/vendor") vendor, err := os.ReadFile(vendorPath) @@ -134,6 +145,7 @@ func (gm *GPUManager) updateAmdGpuData(cardPath string) bool { return true } +// readSysfsFloat reads and parses a numeric value from a sysfs file. func readSysfsFloat(path string) (float64, error) { val, err := os.ReadFile(path) if err != nil { @@ -142,6 +154,110 @@ func readSysfsFloat(path string) (float64, error) { return strconv.ParseFloat(strings.TrimSpace(string(val)), 64) } +// normalizeHexID normalizes hex IDs by trimming spaces, lowercasing, and dropping 0x. +func normalizeHexID(id string) string { + return strings.TrimPrefix(strings.ToLower(strings.TrimSpace(id)), "0x") +} + +// cacheKeyForAmdgpu builds the cache key for a device and optional revision. +func cacheKeyForAmdgpu(deviceID, revisionID string) string { + if revisionID != "" { + return deviceID + ":" + revisionID + } + return deviceID +} + +// lookupAmdgpuNameInFile resolves an AMDGPU name from amdgpu.ids by device/revision. +func lookupAmdgpuNameInFile(deviceID, revisionID, filePath string) (name string, exact bool, found bool) { + file, err := os.Open(filePath) + if err != nil { + return "", false, false + } + defer file.Close() + + var byDevice string + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + parts := strings.SplitN(line, ",", 3) + if len(parts) != 3 { + continue + } + + dev := normalizeHexID(parts[0]) + rev := normalizeHexID(parts[1]) + productName := strings.TrimSpace(parts[2]) + if dev == "" || productName == "" || dev != deviceID { + continue + } + if byDevice == "" { + byDevice = productName + } + if revisionID != "" && rev == revisionID { + return productName, true, true + } + } + if byDevice != "" { + return byDevice, false, true + } + return "", false, false +} + +// getCachedAmdgpuName returns cached hit/miss status for the given device/revision. +func getCachedAmdgpuName(deviceID, revisionID string) (name string, found bool, done bool) { + // Build the list of cache keys to check. We always look up the exact device+revision key. + // When revisionID is set, we also look up deviceID alone, since the cache may store a + // device-only fallback when we couldn't resolve the exact revision. + keys := []string{cacheKeyForAmdgpu(deviceID, revisionID)} + if revisionID != "" { + keys = append(keys, deviceID) + } + + knownMisses := 0 + amdgpuNameCache.RLock() + defer amdgpuNameCache.RUnlock() + for _, key := range keys { + if name, ok := amdgpuNameCache.hits[key]; ok { + return name, true, true + } + if _, ok := amdgpuNameCache.misses[key]; ok { + knownMisses++ + } + } + // done=true means "don't bother doing slow lookup": we either found a name (above) or + // every key we checked was already a known miss, so we've tried before and failed. + return "", false, knownMisses == len(keys) +} + +// normalizeAmdgpuName trims standard suffixes from AMDGPU product names. +func normalizeAmdgpuName(name string) string { + return strings.TrimSuffix(strings.TrimSpace(name), " Graphics") +} + +// cacheAmdgpuName stores a resolved AMDGPU name in the lookup cache. +func cacheAmdgpuName(deviceID, revisionID, name string, exact bool) { + name = normalizeAmdgpuName(name) + amdgpuNameCache.Lock() + defer amdgpuNameCache.Unlock() + if exact && revisionID != "" { + amdgpuNameCache.hits[cacheKeyForAmdgpu(deviceID, revisionID)] = name + } + amdgpuNameCache.hits[deviceID] = name +} + +// cacheMissingAmdgpuName records unresolved device/revision lookups. +func cacheMissingAmdgpuName(deviceID, revisionID string) { + amdgpuNameCache.Lock() + defer amdgpuNameCache.Unlock() + amdgpuNameCache.misses[deviceID] = struct{}{} + if revisionID != "" { + amdgpuNameCache.misses[cacheKeyForAmdgpu(deviceID, revisionID)] = struct{}{} + } +} + // getAmdGpuName attempts to get a descriptive GPU name. // First tries product_name (rarely available), then looks up the PCI device ID. // Falls back to showing the raw device ID if not found in the lookup table. @@ -153,33 +269,24 @@ func getAmdGpuName(devicePath string) string { // Read PCI device ID and look it up if deviceID, err := os.ReadFile(filepath.Join(devicePath, "device")); err == nil { - id := strings.TrimPrefix(strings.ToLower(strings.TrimSpace(string(deviceID))), "0x") - if name, ok := getRadeonNames()[id]; ok { - return fmt.Sprintf("Radeon %s", name) + id := normalizeHexID(string(deviceID)) + revision := "" + if revBytes, revErr := os.ReadFile(filepath.Join(devicePath, "revision")); revErr == nil { + revision = normalizeHexID(string(revBytes)) } + + if name, found, done := getCachedAmdgpuName(id, revision); found { + return name + } else if !done { + if name, exact, ok := lookupAmdgpuNameInFile(id, revision, "/usr/share/libdrm/amdgpu.ids"); ok { + cacheAmdgpuName(id, revision, name, exact) + return normalizeAmdgpuName(name) + } + cacheMissingAmdgpuName(id, revision) + } + return fmt.Sprintf("AMD GPU (%s)", id) } return "AMD GPU" } - -// getRadeonNames returns the AMD GPU name lookup table -// Device IDs from https://pci-ids.ucw.cz/read/PC/1002 -var getRadeonNames = sync.OnceValue(func() map[string]string { - return map[string]string{ - "7550": "RX 9070", - "7590": "RX 9060 XT", - "7551": "AI PRO R9700", - - "744c": "RX 7900", - - "1681": "680M", - - "7448": "PRO W7900", - "745e": "PRO W7800", - "7470": "PRO W7700", - "73e3": "PRO W6600", - "7422": "PRO W6400", - "7341": "PRO W5500", - } -}) diff --git a/agent/gpu_amd_linux_test.go b/agent/gpu_amd_linux_test.go new file mode 100644 index 00000000..4423dd7f --- /dev/null +++ b/agent/gpu_amd_linux_test.go @@ -0,0 +1,236 @@ +//go:build linux + +package agent + +import ( + "os" + "path/filepath" + "testing" + + "github.com/henrygd/beszel/internal/entities/system" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestNormalizeHexID(t *testing.T) { + tests := []struct { + in string + want string + }{ + {"0x1002", "1002"}, + {"C2", "c2"}, + {" 15BF ", "15bf"}, + {"0x15bf", "15bf"}, + {"", ""}, + } + for _, tt := range tests { + subName := tt.in + if subName == "" { + subName = "empty_string" + } + t.Run(subName, func(t *testing.T) { + got := normalizeHexID(tt.in) + assert.Equal(t, tt.want, got) + }) + } +} + +func TestCacheKeyForAmdgpu(t *testing.T) { + tests := []struct { + deviceID string + revisionID string + want string + }{ + {"1114", "c2", "1114:c2"}, + {"15bf", "", "15bf"}, + {"1506", "c1", "1506:c1"}, + } + for _, tt := range tests { + got := cacheKeyForAmdgpu(tt.deviceID, tt.revisionID) + assert.Equal(t, tt.want, got) + } +} + +func TestReadSysfsFloat(t *testing.T) { + dir := t.TempDir() + + validPath := filepath.Join(dir, "val") + require.NoError(t, os.WriteFile(validPath, []byte(" 42.5 \n"), 0o644)) + got, err := readSysfsFloat(validPath) + require.NoError(t, err) + assert.Equal(t, 42.5, got) + + // Integer and scientific + sciPath := filepath.Join(dir, "sci") + require.NoError(t, os.WriteFile(sciPath, []byte("1e2"), 0o644)) + got, err = readSysfsFloat(sciPath) + require.NoError(t, err) + assert.Equal(t, 100.0, got) + + // Missing file + _, err = readSysfsFloat(filepath.Join(dir, "missing")) + require.Error(t, err) + + // Invalid content + badPath := filepath.Join(dir, "bad") + require.NoError(t, os.WriteFile(badPath, []byte("not a number"), 0o644)) + _, err = readSysfsFloat(badPath) + require.Error(t, err) +} + +func TestIsAmdGpu(t *testing.T) { + dir := t.TempDir() + deviceDir := filepath.Join(dir, "device") + require.NoError(t, os.MkdirAll(deviceDir, 0o755)) + + // AMD vendor 0x1002 -> true + require.NoError(t, os.WriteFile(filepath.Join(deviceDir, "vendor"), []byte("0x1002\n"), 0o644)) + assert.True(t, isAmdGpu(dir), "vendor 0x1002 should be AMD") + + // Non-AMD vendor -> false + require.NoError(t, os.WriteFile(filepath.Join(deviceDir, "vendor"), []byte("0x10de\n"), 0o644)) + assert.False(t, isAmdGpu(dir), "vendor 0x10de should not be AMD") + + // Missing vendor file -> false + require.NoError(t, os.Remove(filepath.Join(deviceDir, "vendor"))) + assert.False(t, isAmdGpu(dir), "missing vendor file should be false") +} + +func TestAmdgpuNameCacheRoundTrip(t *testing.T) { + // Cache a name and retrieve it (unique key to avoid affecting other tests) + deviceID, revisionID := "cachedev99", "00" + cacheAmdgpuName(deviceID, revisionID, "AMD Test GPU 99 Graphics", true) + + name, found, done := getCachedAmdgpuName(deviceID, revisionID) + assert.True(t, found) + assert.True(t, done) + assert.Equal(t, "AMD Test GPU 99", name) + + // Device-only key also stored + name2, found2, _ := getCachedAmdgpuName(deviceID, "") + assert.True(t, found2) + assert.Equal(t, "AMD Test GPU 99", name2) + + // Cache a miss + cacheMissingAmdgpuName("missedev99", "ab") + _, found3, done3 := getCachedAmdgpuName("missedev99", "ab") + assert.False(t, found3) + assert.True(t, done3, "done should be true so caller skips file lookup") +} + +func TestUpdateAmdGpuDataWithFakeSysfs(t *testing.T) { + dir := t.TempDir() + cardPath := filepath.Join(dir, "card0") + devicePath := filepath.Join(cardPath, "device") + hwmonPath := filepath.Join(devicePath, "hwmon", "hwmon0") + require.NoError(t, os.MkdirAll(hwmonPath, 0o755)) + + write := func(name, content string) { + require.NoError(t, os.WriteFile(filepath.Join(devicePath, name), []byte(content), 0o644)) + } + write("vendor", "0x1002") + write("device", "0x1506") + write("revision", "0xc1") + write("gpu_busy_percent", "25") + write("mem_info_vram_used", "1073741824") + write("mem_info_vram_total", "2147483648") + require.NoError(t, os.WriteFile(filepath.Join(hwmonPath, "temp1_input"), []byte("45000"), 0o644)) + require.NoError(t, os.WriteFile(filepath.Join(hwmonPath, "power1_input"), []byte("20000000"), 0o644)) + + // Pre-cache name so getAmdGpuName returns a known value (it uses system amdgpu.ids path) + cacheAmdgpuName("1506", "c1", "AMD Radeon 610M Graphics", true) + + gm := &GPUManager{GpuDataMap: make(map[string]*system.GPUData)} + ok := gm.updateAmdGpuData(cardPath) + require.True(t, ok) + + gpu, ok := gm.GpuDataMap["card0"] + require.True(t, ok) + assert.Equal(t, "AMD Radeon 610M", gpu.Name) + assert.Equal(t, 25.0, gpu.Usage) + assert.Equal(t, bytesToMegabytes(1073741824), gpu.MemoryUsed) + assert.Equal(t, bytesToMegabytes(2147483648), gpu.MemoryTotal) + assert.Equal(t, 45.0, gpu.Temperature) + assert.Equal(t, 20.0, gpu.Power) + assert.Equal(t, 1.0, gpu.Count) +} + +func TestLookupAmdgpuNameInFile(t *testing.T) { + idsPath := filepath.Join("test-data", "amdgpu.ids") + + tests := []struct { + name string + deviceID string + revisionID string + wantName string + wantExact bool + wantFound bool + }{ + { + name: "exact device and revision match", + deviceID: "1114", + revisionID: "c2", + wantName: "AMD Radeon 860M Graphics", + wantExact: true, + wantFound: true, + }, + { + name: "exact match 15BF revision 01 returns 760M", + deviceID: "15bf", + revisionID: "01", + wantName: "AMD Radeon 760M Graphics", + wantExact: true, + wantFound: true, + }, + { + name: "exact match 15BF revision 00 returns 780M", + deviceID: "15bf", + revisionID: "00", + wantName: "AMD Radeon 780M Graphics", + wantExact: true, + wantFound: true, + }, + { + name: "device-only match returns first entry for device", + deviceID: "1506", + revisionID: "", + wantName: "AMD Radeon 610M", + wantExact: false, + wantFound: true, + }, + { + name: "unknown device not found", + deviceID: "dead", + revisionID: "00", + wantName: "", + wantExact: false, + wantFound: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + gotName, gotExact, gotFound := lookupAmdgpuNameInFile(tt.deviceID, tt.revisionID, idsPath) + assert.Equal(t, tt.wantName, gotName, "name") + assert.Equal(t, tt.wantExact, gotExact, "exact") + assert.Equal(t, tt.wantFound, gotFound, "found") + }) + } +} + +func TestGetAmdGpuNameFromIdsFile(t *testing.T) { + // Test that getAmdGpuName resolves a name when we can't inject the ids path. + // We only verify behavior when product_name is missing and device/revision + // would be read from sysfs; the actual lookup uses /usr/share/libdrm/amdgpu.ids. + // So this test focuses on normalizeAmdgpuName and that lookupAmdgpuNameInFile + // returns the expected name for our test-data file. + idsPath := filepath.Join("test-data", "amdgpu.ids") + name, exact, found := lookupAmdgpuNameInFile("1435", "ae", idsPath) + require.True(t, found) + require.True(t, exact) + assert.Equal(t, "AMD Custom GPU 0932", name) + assert.Equal(t, "AMD Custom GPU 0932", normalizeAmdgpuName(name)) + + // " Graphics" suffix is trimmed by normalizeAmdgpuName + name2 := "AMD Radeon 860M Graphics" + assert.Equal(t, "AMD Radeon 860M", normalizeAmdgpuName(name2)) +} diff --git a/agent/test-data/amdgpu.ids b/agent/test-data/amdgpu.ids new file mode 100644 index 00000000..0ad852e1 --- /dev/null +++ b/agent/test-data/amdgpu.ids @@ -0,0 +1,700 @@ +# List of AMDGPU IDs +# +# Syntax: +# device_id, revision_id, product_name <-- single tab after comma + +1.0.0 +1114, C2, AMD Radeon 860M Graphics +1114, C3, AMD Radeon 840M Graphics +1114, D2, AMD Radeon 860M Graphics +1114, D3, AMD Radeon 840M Graphics +1309, 00, AMD Radeon R7 Graphics +130A, 00, AMD Radeon R6 Graphics +130B, 00, AMD Radeon R4 Graphics +130C, 00, AMD Radeon R7 Graphics +130D, 00, AMD Radeon R6 Graphics +130E, 00, AMD Radeon R5 Graphics +130F, 00, AMD Radeon R7 Graphics +130F, D4, AMD Radeon R7 Graphics +130F, D5, AMD Radeon R7 Graphics +130F, D6, AMD Radeon R7 Graphics +130F, D7, AMD Radeon R7 Graphics +1313, 00, AMD Radeon R7 Graphics +1313, D4, AMD Radeon R7 Graphics +1313, D5, AMD Radeon R7 Graphics +1313, D6, AMD Radeon R7 Graphics +1315, 00, AMD Radeon R5 Graphics +1315, D4, AMD Radeon R5 Graphics +1315, D5, AMD Radeon R5 Graphics +1315, D6, AMD Radeon R5 Graphics +1315, D7, AMD Radeon R5 Graphics +1316, 00, AMD Radeon R5 Graphics +1318, 00, AMD Radeon R5 Graphics +131B, 00, AMD Radeon R4 Graphics +131C, 00, AMD Radeon R7 Graphics +131D, 00, AMD Radeon R6 Graphics +1435, AE, AMD Custom GPU 0932 +1506, C1, AMD Radeon 610M +1506, C2, AMD Radeon 610M +1506, C3, AMD Radeon 610M +1506, C4, AMD Radeon 610M +150E, C1, AMD Radeon 890M Graphics +150E, C4, AMD Radeon 890M Graphics +150E, C5, AMD Radeon 890M Graphics +150E, C6, AMD Radeon 890M Graphics +150E, D1, AMD Radeon 890M Graphics +150E, D2, AMD Radeon 890M Graphics +150E, D3, AMD Radeon 890M Graphics +1586, C1, Radeon 8060S Graphics +1586, C2, Radeon 8050S Graphics +1586, C4, Radeon 8050S Graphics +1586, D1, Radeon 8060S Graphics +1586, D2, Radeon 8050S Graphics +1586, D4, Radeon 8050S Graphics +1586, D5, Radeon 8040S Graphics +15BF, 00, AMD Radeon 780M Graphics +15BF, 01, AMD Radeon 760M Graphics +15BF, 02, AMD Radeon 780M Graphics +15BF, 03, AMD Radeon 760M Graphics +15BF, C1, AMD Radeon 780M Graphics +15BF, C2, AMD Radeon 780M Graphics +15BF, C3, AMD Radeon 760M Graphics +15BF, C4, AMD Radeon 780M Graphics +15BF, C5, AMD Radeon 740M Graphics +15BF, C6, AMD Radeon 780M Graphics +15BF, C7, AMD Radeon 780M Graphics +15BF, C8, AMD Radeon 760M Graphics +15BF, C9, AMD Radeon 780M Graphics +15BF, CA, AMD Radeon 740M Graphics +15BF, CB, AMD Radeon 760M Graphics +15BF, CC, AMD Radeon 740M Graphics +15BF, CD, AMD Radeon 760M Graphics +15BF, CF, AMD Radeon 780M Graphics +15BF, D0, AMD Radeon 780M Graphics +15BF, D1, AMD Radeon 780M Graphics +15BF, D2, AMD Radeon 780M Graphics +15BF, D3, AMD Radeon 780M Graphics +15BF, D4, AMD Radeon 780M Graphics +15BF, D5, AMD Radeon 760M Graphics +15BF, D6, AMD Radeon 760M Graphics +15BF, D7, AMD Radeon 780M Graphics +15BF, D8, AMD Radeon 740M Graphics +15BF, D9, AMD Radeon 780M Graphics +15BF, DA, AMD Radeon 780M Graphics +15BF, DB, AMD Radeon 760M Graphics +15BF, DC, AMD Radeon 760M Graphics +15BF, DD, AMD Radeon 780M Graphics +15BF, DE, AMD Radeon 740M Graphics +15BF, DF, AMD Radeon 760M Graphics +15BF, F0, AMD Radeon 760M Graphics +15C8, C1, AMD Radeon 740M Graphics +15C8, C2, AMD Radeon 740M Graphics +15C8, C3, AMD Radeon 740M Graphics +15C8, C4, AMD Radeon 740M Graphics +15C8, D1, AMD Radeon 740M Graphics +15C8, D2, AMD Radeon 740M Graphics +15C8, D3, AMD Radeon 740M Graphics +15C8, D4, AMD Radeon 740M Graphics +15D8, 00, AMD Radeon RX Vega 8 Graphics WS +15D8, 91, AMD Radeon Vega 3 Graphics +15D8, 91, AMD Ryzen Embedded R1606G with Radeon Vega Gfx +15D8, 92, AMD Radeon Vega 3 Graphics +15D8, 92, AMD Ryzen Embedded R1505G with Radeon Vega Gfx +15D8, 93, AMD Radeon Vega 1 Graphics +15D8, A1, AMD Radeon Vega 10 Graphics +15D8, A2, AMD Radeon Vega 8 Graphics +15D8, A3, AMD Radeon Vega 6 Graphics +15D8, A4, AMD Radeon Vega 3 Graphics +15D8, B1, AMD Radeon Vega 10 Graphics +15D8, B2, AMD Radeon Vega 8 Graphics +15D8, B3, AMD Radeon Vega 6 Graphics +15D8, B4, AMD Radeon Vega 3 Graphics +15D8, C1, AMD Radeon Vega 10 Graphics +15D8, C2, AMD Radeon Vega 8 Graphics +15D8, C3, AMD Radeon Vega 6 Graphics +15D8, C4, AMD Radeon Vega 3 Graphics +15D8, C5, AMD Radeon Vega 3 Graphics +15D8, C8, AMD Radeon Vega 11 Graphics +15D8, C9, AMD Radeon Vega 8 Graphics +15D8, CA, AMD Radeon Vega 11 Graphics +15D8, CB, AMD Radeon Vega 8 Graphics +15D8, CC, AMD Radeon Vega 3 Graphics +15D8, CE, AMD Radeon Vega 3 Graphics +15D8, CF, AMD Ryzen Embedded R1305G with Radeon Vega Gfx +15D8, D1, AMD Radeon Vega 10 Graphics +15D8, D2, AMD Radeon Vega 8 Graphics +15D8, D3, AMD Radeon Vega 6 Graphics +15D8, D4, AMD Radeon Vega 3 Graphics +15D8, D8, AMD Radeon Vega 11 Graphics +15D8, D9, AMD Radeon Vega 8 Graphics +15D8, DA, AMD Radeon Vega 11 Graphics +15D8, DB, AMD Radeon Vega 3 Graphics +15D8, DB, AMD Radeon Vega 8 Graphics +15D8, DC, AMD Radeon Vega 3 Graphics +15D8, DD, AMD Radeon Vega 3 Graphics +15D8, DE, AMD Radeon Vega 3 Graphics +15D8, DF, AMD Radeon Vega 3 Graphics +15D8, E3, AMD Radeon Vega 3 Graphics +15D8, E4, AMD Ryzen Embedded R1102G with Radeon Vega Gfx +15DD, 81, AMD Ryzen Embedded V1807B with Radeon Vega Gfx +15DD, 82, AMD Ryzen Embedded V1756B with Radeon Vega Gfx +15DD, 83, AMD Ryzen Embedded V1605B with Radeon Vega Gfx +15DD, 84, AMD Radeon Vega 6 Graphics +15DD, 85, AMD Ryzen Embedded V1202B with Radeon Vega Gfx +15DD, 86, AMD Radeon Vega 11 Graphics +15DD, 88, AMD Radeon Vega 8 Graphics +15DD, C1, AMD Radeon Vega 11 Graphics +15DD, C2, AMD Radeon Vega 8 Graphics +15DD, C3, AMD Radeon Vega 3 / 10 Graphics +15DD, C4, AMD Radeon Vega 8 Graphics +15DD, C5, AMD Radeon Vega 3 Graphics +15DD, C6, AMD Radeon Vega 11 Graphics +15DD, C8, AMD Radeon Vega 8 Graphics +15DD, C9, AMD Radeon Vega 11 Graphics +15DD, CA, AMD Radeon Vega 8 Graphics +15DD, CB, AMD Radeon Vega 3 Graphics +15DD, CC, AMD Radeon Vega 6 Graphics +15DD, CE, AMD Radeon Vega 3 Graphics +15DD, CF, AMD Radeon Vega 3 Graphics +15DD, D0, AMD Radeon Vega 10 Graphics +15DD, D1, AMD Radeon Vega 8 Graphics +15DD, D3, AMD Radeon Vega 11 Graphics +15DD, D5, AMD Radeon Vega 8 Graphics +15DD, D6, AMD Radeon Vega 11 Graphics +15DD, D7, AMD Radeon Vega 8 Graphics +15DD, D8, AMD Radeon Vega 3 Graphics +15DD, D9, AMD Radeon Vega 6 Graphics +15DD, E1, AMD Radeon Vega 3 Graphics +15DD, E2, AMD Radeon Vega 3 Graphics +163F, AE, AMD Custom GPU 0405 +163F, E1, AMD Custom GPU 0405 +164E, D8, AMD Radeon 610M +164E, D9, AMD Radeon 610M +164E, DA, AMD Radeon 610M +164E, DB, AMD Radeon 610M +164E, DC, AMD Radeon 610M +1681, 06, AMD Radeon 680M +1681, 07, AMD Radeon 660M +1681, 0A, AMD Radeon 680M +1681, 0B, AMD Radeon 660M +1681, C7, AMD Radeon 680M +1681, C8, AMD Radeon 680M +1681, C9, AMD Radeon 660M +1900, 01, AMD Radeon 780M Graphics +1900, 02, AMD Radeon 760M Graphics +1900, 03, AMD Radeon 780M Graphics +1900, 04, AMD Radeon 760M Graphics +1900, 05, AMD Radeon 780M Graphics +1900, 06, AMD Radeon 780M Graphics +1900, 07, AMD Radeon 760M Graphics +1900, B0, AMD Radeon 780M Graphics +1900, B1, AMD Radeon 780M Graphics +1900, B2, AMD Radeon 780M Graphics +1900, B3, AMD Radeon 780M Graphics +1900, B4, AMD Radeon 780M Graphics +1900, B5, AMD Radeon 780M Graphics +1900, B6, AMD Radeon 780M Graphics +1900, B7, AMD Radeon 760M Graphics +1900, B8, AMD Radeon 760M Graphics +1900, B9, AMD Radeon 780M Graphics +1900, BA, AMD Radeon 780M Graphics +1900, BB, AMD Radeon 780M Graphics +1900, C0, AMD Radeon 780M Graphics +1900, C1, AMD Radeon 760M Graphics +1900, C2, AMD Radeon 780M Graphics +1900, C3, AMD Radeon 760M Graphics +1900, C4, AMD Radeon 780M Graphics +1900, C5, AMD Radeon 780M Graphics +1900, C6, AMD Radeon 760M Graphics +1900, C7, AMD Radeon 780M Graphics +1900, C8, AMD Radeon 760M Graphics +1900, C9, AMD Radeon 780M Graphics +1900, CA, AMD Radeon 760M Graphics +1900, CB, AMD Radeon 780M Graphics +1900, CC, AMD Radeon 780M Graphics +1900, CD, AMD Radeon 760M Graphics +1900, CE, AMD Radeon 780M Graphics +1900, CF, AMD Radeon 760M Graphics +1900, D0, AMD Radeon 780M Graphics +1900, D1, AMD Radeon 760M Graphics +1900, D2, AMD Radeon 780M Graphics +1900, D3, AMD Radeon 760M Graphics +1900, D4, AMD Radeon 780M Graphics +1900, D5, AMD Radeon 780M Graphics +1900, D6, AMD Radeon 760M Graphics +1900, D7, AMD Radeon 780M Graphics +1900, D8, AMD Radeon 760M Graphics +1900, D9, AMD Radeon 780M Graphics +1900, DA, AMD Radeon 760M Graphics +1900, DB, AMD Radeon 780M Graphics +1900, DC, AMD Radeon 780M Graphics +1900, DD, AMD Radeon 760M Graphics +1900, DE, AMD Radeon 780M Graphics +1900, DF, AMD Radeon 760M Graphics +1900, F0, AMD Radeon 780M Graphics +1900, F1, AMD Radeon 780M Graphics +1900, F2, AMD Radeon 780M Graphics +1901, C1, AMD Radeon 740M Graphics +1901, C2, AMD Radeon 740M Graphics +1901, C3, AMD Radeon 740M Graphics +1901, C6, AMD Radeon 740M Graphics +1901, C7, AMD Radeon 740M Graphics +1901, C8, AMD Radeon 740M Graphics +1901, C9, AMD Radeon 740M Graphics +1901, CA, AMD Radeon 740M Graphics +1901, D1, AMD Radeon 740M Graphics +1901, D2, AMD Radeon 740M Graphics +1901, D3, AMD Radeon 740M Graphics +1901, D4, AMD Radeon 740M Graphics +1901, D5, AMD Radeon 740M Graphics +1901, D6, AMD Radeon 740M Graphics +1901, D7, AMD Radeon 740M Graphics +1901, D8, AMD Radeon 740M Graphics +6600, 00, AMD Radeon HD 8600 / 8700M +6600, 81, AMD Radeon R7 M370 +6601, 00, AMD Radeon HD 8500M / 8700M +6604, 00, AMD Radeon R7 M265 Series +6604, 81, AMD Radeon R7 M350 +6605, 00, AMD Radeon R7 M260 Series +6605, 81, AMD Radeon R7 M340 +6606, 00, AMD Radeon HD 8790M +6607, 00, AMD Radeon R5 M240 +6608, 00, AMD FirePro W2100 +6610, 00, AMD Radeon R7 200 Series +6610, 81, AMD Radeon R7 350 +6610, 83, AMD Radeon R5 340 +6610, 87, AMD Radeon R7 200 Series +6611, 00, AMD Radeon R7 200 Series +6611, 87, AMD Radeon R7 200 Series +6613, 00, AMD Radeon R7 200 Series +6617, 00, AMD Radeon R7 240 Series +6617, 87, AMD Radeon R7 200 Series +6617, C7, AMD Radeon R7 240 Series +6640, 00, AMD Radeon HD 8950 +6640, 80, AMD Radeon R9 M380 +6646, 00, AMD Radeon R9 M280X +6646, 80, AMD Radeon R9 M385 +6646, 80, AMD Radeon R9 M470X +6647, 00, AMD Radeon R9 M200X Series +6647, 80, AMD Radeon R9 M380 +6649, 00, AMD FirePro W5100 +6658, 00, AMD Radeon R7 200 Series +665C, 00, AMD Radeon HD 7700 Series +665D, 00, AMD Radeon R7 200 Series +665F, 81, AMD Radeon R7 360 Series +6660, 00, AMD Radeon HD 8600M Series +6660, 81, AMD Radeon R5 M335 +6660, 83, AMD Radeon R5 M330 +6663, 00, AMD Radeon HD 8500M Series +6663, 83, AMD Radeon R5 M320 +6664, 00, AMD Radeon R5 M200 Series +6665, 00, AMD Radeon R5 M230 Series +6665, 83, AMD Radeon R5 M320 +6665, C3, AMD Radeon R5 M435 +6666, 00, AMD Radeon R5 M200 Series +6667, 00, AMD Radeon R5 M200 Series +666F, 00, AMD Radeon HD 8500M +66A1, 02, AMD Instinct MI60 / MI50 +66A1, 06, AMD Radeon Pro VII +66AF, C1, AMD Radeon VII +6780, 00, AMD FirePro W9000 +6784, 00, ATI FirePro V (FireGL V) Graphics Adapter +6788, 00, ATI FirePro V (FireGL V) Graphics Adapter +678A, 00, AMD FirePro W8000 +6798, 00, AMD Radeon R9 200 / HD 7900 Series +6799, 00, AMD Radeon HD 7900 Series +679A, 00, AMD Radeon HD 7900 Series +679B, 00, AMD Radeon HD 7900 Series +679E, 00, AMD Radeon HD 7800 Series +67A0, 00, AMD Radeon FirePro W9100 +67A1, 00, AMD Radeon FirePro W8100 +67B0, 00, AMD Radeon R9 200 Series +67B0, 80, AMD Radeon R9 390 Series +67B1, 00, AMD Radeon R9 200 Series +67B1, 80, AMD Radeon R9 390 Series +67B9, 00, AMD Radeon R9 200 Series +67C0, 00, AMD Radeon Pro WX 7100 Graphics +67C0, 80, AMD Radeon E9550 +67C2, 01, AMD Radeon Pro V7350x2 +67C2, 02, AMD Radeon Pro V7300X +67C4, 00, AMD Radeon Pro WX 7100 Graphics +67C4, 80, AMD Radeon E9560 / E9565 Graphics +67C7, 00, AMD Radeon Pro WX 5100 Graphics +67C7, 80, AMD Radeon E9390 Graphics +67D0, 01, AMD Radeon Pro V7350x2 +67D0, 02, AMD Radeon Pro V7300X +67DF, C0, AMD Radeon Pro 580X +67DF, C1, AMD Radeon RX 580 Series +67DF, C2, AMD Radeon RX 570 Series +67DF, C3, AMD Radeon RX 580 Series +67DF, C4, AMD Radeon RX 480 Graphics +67DF, C5, AMD Radeon RX 470 Graphics +67DF, C6, AMD Radeon RX 570 Series +67DF, C7, AMD Radeon RX 480 Graphics +67DF, CF, AMD Radeon RX 470 Graphics +67DF, D7, AMD Radeon RX 470 Graphics +67DF, E0, AMD Radeon RX 470 Series +67DF, E1, AMD Radeon RX 590 Series +67DF, E3, AMD Radeon RX Series +67DF, E7, AMD Radeon RX 580 Series +67DF, EB, AMD Radeon Pro 580X +67DF, EF, AMD Radeon RX 570 Series +67DF, F7, AMD Radeon RX P30PH +67DF, FF, AMD Radeon RX 470 Series +67E0, 00, AMD Radeon Pro WX Series +67E3, 00, AMD Radeon Pro WX 4100 +67E8, 00, AMD Radeon Pro WX Series +67E8, 01, AMD Radeon Pro WX Series +67E8, 80, AMD Radeon E9260 Graphics +67EB, 00, AMD Radeon Pro V5300X +67EF, C0, AMD Radeon RX Graphics +67EF, C1, AMD Radeon RX 460 Graphics +67EF, C2, AMD Radeon Pro Series +67EF, C3, AMD Radeon RX Series +67EF, C5, AMD Radeon RX 460 Graphics +67EF, C7, AMD Radeon RX Graphics +67EF, CF, AMD Radeon RX 460 Graphics +67EF, E0, AMD Radeon RX 560 Series +67EF, E1, AMD Radeon RX Series +67EF, E2, AMD Radeon RX 560X +67EF, E3, AMD Radeon RX Series +67EF, E5, AMD Radeon RX 560 Series +67EF, E7, AMD Radeon RX 560 Series +67EF, EF, AMD Radeon 550 Series +67EF, FF, AMD Radeon RX 460 Graphics +67FF, C0, AMD Radeon Pro 465 +67FF, C1, AMD Radeon RX 560 Series +67FF, CF, AMD Radeon RX 560 Series +67FF, EF, AMD Radeon RX 560 Series +67FF, FF, AMD Radeon RX 550 Series +6800, 00, AMD Radeon HD 7970M +6801, 00, AMD Radeon HD 8970M +6806, 00, AMD Radeon R9 M290X +6808, 00, AMD FirePro W7000 +6808, 00, ATI FirePro V (FireGL V) Graphics Adapter +6809, 00, ATI FirePro W5000 +6810, 00, AMD Radeon R9 200 Series +6810, 81, AMD Radeon R9 370 Series +6811, 00, AMD Radeon R9 200 Series +6811, 81, AMD Radeon R7 370 Series +6818, 00, AMD Radeon HD 7800 Series +6819, 00, AMD Radeon HD 7800 Series +6820, 00, AMD Radeon R9 M275X +6820, 81, AMD Radeon R9 M375 +6820, 83, AMD Radeon R9 M375X +6821, 00, AMD Radeon R9 M200X Series +6821, 83, AMD Radeon R9 M370X +6821, 87, AMD Radeon R7 M380 +6822, 00, AMD Radeon E8860 +6823, 00, AMD Radeon R9 M200X Series +6825, 00, AMD Radeon HD 7800M Series +6826, 00, AMD Radeon HD 7700M Series +6827, 00, AMD Radeon HD 7800M Series +6828, 00, AMD FirePro W600 +682B, 00, AMD Radeon HD 8800M Series +682B, 87, AMD Radeon R9 M360 +682C, 00, AMD FirePro W4100 +682D, 00, AMD Radeon HD 7700M Series +682F, 00, AMD Radeon HD 7700M Series +6830, 00, AMD Radeon 7800M Series +6831, 00, AMD Radeon 7700M Series +6835, 00, AMD Radeon R7 Series / HD 9000 Series +6837, 00, AMD Radeon HD 7700 Series +683D, 00, AMD Radeon HD 7700 Series +683F, 00, AMD Radeon HD 7700 Series +684C, 00, ATI FirePro V (FireGL V) Graphics Adapter +6860, 00, AMD Radeon Instinct MI25 +6860, 01, AMD Radeon Instinct MI25 +6860, 02, AMD Radeon Instinct MI25 +6860, 03, AMD Radeon Pro V340 +6860, 04, AMD Radeon Instinct MI25x2 +6860, 07, AMD Radeon Pro V320 +6861, 00, AMD Radeon Pro WX 9100 +6862, 00, AMD Radeon Pro SSG +6863, 00, AMD Radeon Vega Frontier Edition +6864, 03, AMD Radeon Pro V340 +6864, 04, AMD Radeon Instinct MI25x2 +6864, 05, AMD Radeon Pro V340 +6868, 00, AMD Radeon Pro WX 8200 +686C, 00, AMD Radeon Instinct MI25 MxGPU +686C, 01, AMD Radeon Instinct MI25 MxGPU +686C, 02, AMD Radeon Instinct MI25 MxGPU +686C, 03, AMD Radeon Pro V340 MxGPU +686C, 04, AMD Radeon Instinct MI25x2 MxGPU +686C, 05, AMD Radeon Pro V340L MxGPU +686C, 06, AMD Radeon Instinct MI25 MxGPU +687F, 01, AMD Radeon RX Vega +687F, C0, AMD Radeon RX Vega +687F, C1, AMD Radeon RX Vega +687F, C3, AMD Radeon RX Vega +687F, C7, AMD Radeon RX Vega +6900, 00, AMD Radeon R7 M260 +6900, 81, AMD Radeon R7 M360 +6900, 83, AMD Radeon R7 M340 +6900, C1, AMD Radeon R5 M465 Series +6900, C3, AMD Radeon R5 M445 Series +6900, D1, AMD Radeon 530 Series +6900, D3, AMD Radeon 530 Series +6901, 00, AMD Radeon R5 M255 +6902, 00, AMD Radeon Series +6907, 00, AMD Radeon R5 M255 +6907, 87, AMD Radeon R5 M315 +6920, 00, AMD Radeon R9 M395X +6920, 01, AMD Radeon R9 M390X +6921, 00, AMD Radeon R9 M390X +6929, 00, AMD FirePro S7150 +6929, 01, AMD FirePro S7100X +692B, 00, AMD FirePro W7100 +6938, 00, AMD Radeon R9 200 Series +6938, F0, AMD Radeon R9 200 Series +6938, F1, AMD Radeon R9 380 Series +6939, 00, AMD Radeon R9 200 Series +6939, F0, AMD Radeon R9 200 Series +6939, F1, AMD Radeon R9 380 Series +694C, C0, AMD Radeon RX Vega M GH Graphics +694E, C0, AMD Radeon RX Vega M GL Graphics +6980, 00, AMD Radeon Pro WX 3100 +6981, 00, AMD Radeon Pro WX 3200 Series +6981, 01, AMD Radeon Pro WX 3200 Series +6981, 10, AMD Radeon Pro WX 3200 Series +6985, 00, AMD Radeon Pro WX 3100 +6986, 00, AMD Radeon Pro WX 2100 +6987, 80, AMD Embedded Radeon E9171 +6987, C0, AMD Radeon 550X Series +6987, C1, AMD Radeon RX 640 +6987, C3, AMD Radeon 540X Series +6987, C7, AMD Radeon 540 +6995, 00, AMD Radeon Pro WX 2100 +6997, 00, AMD Radeon Pro WX 2100 +699F, 81, AMD Embedded Radeon E9170 Series +699F, C0, AMD Radeon 500 Series +699F, C1, AMD Radeon 540 Series +699F, C3, AMD Radeon 500 Series +699F, C7, AMD Radeon RX 550 / 550 Series +699F, C9, AMD Radeon 540 +6FDF, E7, AMD Radeon RX 590 GME +6FDF, EF, AMD Radeon RX 580 2048SP +7300, C1, AMD FirePro S9300 x2 +7300, C8, AMD Radeon R9 Fury Series +7300, C9, AMD Radeon Pro Duo +7300, CA, AMD Radeon R9 Fury Series +7300, CB, AMD Radeon R9 Fury Series +7312, 00, AMD Radeon Pro W5700 +731E, C6, AMD Radeon RX 5700XTB +731E, C7, AMD Radeon RX 5700B +731F, C0, AMD Radeon RX 5700 XT 50th Anniversary +731F, C1, AMD Radeon RX 5700 XT +731F, C2, AMD Radeon RX 5600M +731F, C3, AMD Radeon RX 5700M +731F, C4, AMD Radeon RX 5700 +731F, C5, AMD Radeon RX 5700 XT +731F, CA, AMD Radeon RX 5600 XT +731F, CB, AMD Radeon RX 5600 OEM +7340, C1, AMD Radeon RX 5500M +7340, C3, AMD Radeon RX 5300M +7340, C5, AMD Radeon RX 5500 XT +7340, C7, AMD Radeon RX 5500 +7340, C9, AMD Radeon RX 5500XTB +7340, CF, AMD Radeon RX 5300 +7341, 00, AMD Radeon Pro W5500 +7347, 00, AMD Radeon Pro W5500M +7360, 41, AMD Radeon Pro 5600M +7360, C3, AMD Radeon Pro V520 +7362, C1, AMD Radeon Pro V540 +7362, C3, AMD Radeon Pro V520 +738C, 01, AMD Instinct MI100 +73A1, 00, AMD Radeon Pro V620 +73A3, 00, AMD Radeon Pro W6800 +73A5, C0, AMD Radeon RX 6950 XT +73AE, 00, AMD Radeon Pro V620 MxGPU +73AF, C0, AMD Radeon RX 6900 XT +73BF, C0, AMD Radeon RX 6900 XT +73BF, C1, AMD Radeon RX 6800 XT +73BF, C3, AMD Radeon RX 6800 +73DF, C0, AMD Radeon RX 6750 XT +73DF, C1, AMD Radeon RX 6700 XT +73DF, C2, AMD Radeon RX 6800M +73DF, C3, AMD Radeon RX 6800M +73DF, C5, AMD Radeon RX 6700 XT +73DF, CF, AMD Radeon RX 6700M +73DF, D5, AMD Radeon RX 6750 GRE 12GB +73DF, D7, AMD TDC-235 +73DF, DF, AMD Radeon RX 6700 +73DF, E5, AMD Radeon RX 6750 GRE 12GB +73DF, FF, AMD Radeon RX 6700 +73E0, 00, AMD Radeon RX 6600M +73E1, 00, AMD Radeon Pro W6600M +73E3, 00, AMD Radeon Pro W6600 +73EF, C0, AMD Radeon RX 6800S +73EF, C1, AMD Radeon RX 6650 XT +73EF, C2, AMD Radeon RX 6700S +73EF, C3, AMD Radeon RX 6650M +73EF, C4, AMD Radeon RX 6650M XT +73FF, C1, AMD Radeon RX 6600 XT +73FF, C3, AMD Radeon RX 6600M +73FF, C7, AMD Radeon RX 6600 +73FF, CB, AMD Radeon RX 6600S +73FF, CF, AMD Radeon RX 6600 LE +73FF, DF, AMD Radeon RX 6750 GRE 10GB +7408, 00, AMD Instinct MI250X +740C, 01, AMD Instinct MI250X / MI250 +740F, 02, AMD Instinct MI210 +7421, 00, AMD Radeon Pro W6500M +7422, 00, AMD Radeon Pro W6400 +7423, 00, AMD Radeon Pro W6300M +7423, 01, AMD Radeon Pro W6300 +7424, 00, AMD Radeon RX 6300 +743F, C1, AMD Radeon RX 6500 XT +743F, C3, AMD Radeon RX 6500 +743F, C3, AMD Radeon RX 6500M +743F, C7, AMD Radeon RX 6400 +743F, C8, AMD Radeon RX 6500M +743F, CC, AMD Radeon 6550S +743F, CE, AMD Radeon RX 6450M +743F, CF, AMD Radeon RX 6300M +743F, D3, AMD Radeon RX 6550M +743F, D7, AMD Radeon RX 6400 +7448, 00, AMD Radeon Pro W7900 +7449, 00, AMD Radeon Pro W7800 48GB +744A, 00, AMD Radeon Pro W7900 Dual Slot +744B, 00, AMD Radeon Pro W7900D +744C, C8, AMD Radeon RX 7900 XTX +744C, CC, AMD Radeon RX 7900 XT +744C, CE, AMD Radeon RX 7900 GRE +744C, CF, AMD Radeon RX 7900M +745E, CC, AMD Radeon Pro W7800 +7460, 00, AMD Radeon Pro V710 +7461, 00, AMD Radeon Pro V710 MxGPU +7470, 00, AMD Radeon Pro W7700 +747E, C8, AMD Radeon RX 7800 XT +747E, D8, AMD Radeon RX 7800M +747E, DB, AMD Radeon RX 7700 +747E, FF, AMD Radeon RX 7700 XT +7480, 00, AMD Radeon Pro W7600 +7480, C0, AMD Radeon RX 7600 XT +7480, C1, AMD Radeon RX 7700S +7480, C2, AMD Radeon RX 7650 GRE +7480, C3, AMD Radeon RX 7600S +7480, C7, AMD Radeon RX 7600M XT +7480, CF, AMD Radeon RX 7600 +7481, C7, AMD Steam Machine +7483, CF, AMD Radeon RX 7600M +7489, 00, AMD Radeon Pro W7500 +7499, 00, AMD Radeon Pro W7400 +7499, C0, AMD Radeon RX 7400 +7499, C1, AMD Radeon RX 7300 +74A0, 00, AMD Instinct MI300A +74A1, 00, AMD Instinct MI300X +74A2, 00, AMD Instinct MI308X +74A5, 00, AMD Instinct MI325X +74A8, 00, AMD Instinct MI308X HF +74A9, 00, AMD Instinct MI300X HF +74B5, 00, AMD Instinct MI300X VF +74B6, 00, AMD Instinct MI308X +74BD, 00, AMD Instinct MI300X HF +7550, C0, AMD Radeon RX 9070 XT +7550, C2, AMD Radeon RX 9070 GRE +7550, C3, AMD Radeon RX 9070 +7551, C0, AMD Radeon AI PRO R9700 +7590, C0, AMD Radeon RX 9060 XT +7590, C7, AMD Radeon RX 9060 +75A0, C0, AMD Instinct MI350X +75A3, C0, AMD Instinct MI355X +75B0, C0, AMD Instinct MI350X VF +75B3, C0, AMD Instinct MI355X VF +9830, 00, AMD Radeon HD 8400 / R3 Series +9831, 00, AMD Radeon HD 8400E +9832, 00, AMD Radeon HD 8330 +9833, 00, AMD Radeon HD 8330E +9834, 00, AMD Radeon HD 8210 +9835, 00, AMD Radeon HD 8210E +9836, 00, AMD Radeon HD 8200 / R3 Series +9837, 00, AMD Radeon HD 8280E +9838, 00, AMD Radeon HD 8200 / R3 series +9839, 00, AMD Radeon HD 8180 +983D, 00, AMD Radeon HD 8250 +9850, 00, AMD Radeon R3 Graphics +9850, 03, AMD Radeon R3 Graphics +9850, 40, AMD Radeon R2 Graphics +9850, 45, AMD Radeon R3 Graphics +9851, 00, AMD Radeon R4 Graphics +9851, 01, AMD Radeon R5E Graphics +9851, 05, AMD Radeon R5 Graphics +9851, 06, AMD Radeon R5E Graphics +9851, 40, AMD Radeon R4 Graphics +9851, 45, AMD Radeon R5 Graphics +9852, 00, AMD Radeon R2 Graphics +9852, 40, AMD Radeon E1 Graphics +9853, 00, AMD Radeon R2 Graphics +9853, 01, AMD Radeon R4E Graphics +9853, 03, AMD Radeon R2 Graphics +9853, 05, AMD Radeon R1E Graphics +9853, 06, AMD Radeon R1E Graphics +9853, 07, AMD Radeon R1E Graphics +9853, 08, AMD Radeon R1E Graphics +9853, 40, AMD Radeon R2 Graphics +9854, 00, AMD Radeon R3 Graphics +9854, 01, AMD Radeon R3E Graphics +9854, 02, AMD Radeon R3 Graphics +9854, 05, AMD Radeon R2 Graphics +9854, 06, AMD Radeon R4 Graphics +9854, 07, AMD Radeon R3 Graphics +9855, 02, AMD Radeon R6 Graphics +9855, 05, AMD Radeon R4 Graphics +9856, 00, AMD Radeon R2 Graphics +9856, 01, AMD Radeon R2E Graphics +9856, 02, AMD Radeon R2 Graphics +9856, 05, AMD Radeon R1E Graphics +9856, 06, AMD Radeon R2 Graphics +9856, 07, AMD Radeon R1E Graphics +9856, 08, AMD Radeon R1E Graphics +9856, 13, AMD Radeon R1E Graphics +9874, 81, AMD Radeon R6 Graphics +9874, 84, AMD Radeon R7 Graphics +9874, 85, AMD Radeon R6 Graphics +9874, 87, AMD Radeon R5 Graphics +9874, 88, AMD Radeon R7E Graphics +9874, 89, AMD Radeon R6E Graphics +9874, C4, AMD Radeon R7 Graphics +9874, C5, AMD Radeon R6 Graphics +9874, C6, AMD Radeon R6 Graphics +9874, C7, AMD Radeon R5 Graphics +9874, C8, AMD Radeon R7 Graphics +9874, C9, AMD Radeon R7 Graphics +9874, CA, AMD Radeon R5 Graphics +9874, CB, AMD Radeon R5 Graphics +9874, CC, AMD Radeon R7 Graphics +9874, CD, AMD Radeon R7 Graphics +9874, CE, AMD Radeon R5 Graphics +9874, E1, AMD Radeon R7 Graphics +9874, E2, AMD Radeon R7 Graphics +9874, E3, AMD Radeon R7 Graphics +9874, E4, AMD Radeon R7 Graphics +9874, E5, AMD Radeon R5 Graphics +9874, E6, AMD Radeon R5 Graphics +98E4, 80, AMD Radeon R5E Graphics +98E4, 81, AMD Radeon R4E Graphics +98E4, 83, AMD Radeon R2E Graphics +98E4, 84, AMD Radeon R2E Graphics +98E4, 86, AMD Radeon R1E Graphics +98E4, C0, AMD Radeon R4 Graphics +98E4, C1, AMD Radeon R5 Graphics +98E4, C2, AMD Radeon R4 Graphics +98E4, C4, AMD Radeon R5 Graphics +98E4, C6, AMD Radeon R5 Graphics +98E4, C8, AMD Radeon R4 Graphics +98E4, C9, AMD Radeon R4 Graphics +98E4, CA, AMD Radeon R5 Graphics +98E4, D0, AMD Radeon R2 Graphics +98E4, D1, AMD Radeon R2 Graphics +98E4, D2, AMD Radeon R2 Graphics +98E4, D4, AMD Radeon R2 Graphics +98E4, D9, AMD Radeon R5 Graphics +98E4, DA, AMD Radeon R5 Graphics +98E4, DB, AMD Radeon R3 Graphics +98E4, E1, AMD Radeon R3 Graphics +98E4, E2, AMD Radeon R3 Graphics +98E4, E9, AMD Radeon R4 Graphics +98E4, EA, AMD Radeon R4 Graphics +98E4, EB, AMD Radeon R3 Graphics +98E4, EB, AMD Radeon R4 Graphics