Update gpu_info.json with new GPUs
Change-Id: Ia8f926927a80e06f859fe083e9a7d17e91eac864
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/206081
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/gpu_info.json b/src/dawn/gpu_info.json
index 2617f1d..cf71025 100644
--- a/src/dawn/gpu_info.json
+++ b/src/dawn/gpu_info.json
@@ -92,22 +92,17 @@
"id": "0x1002",
"devices": [{
- "mask": "0xFF00",
- "architecture": {
- "GCN 2": ["0x1300"],
- "GCN 5": ["0x1500", "0x1600"],
- "RDNA 2": ["0x7400"]
- }
- }, {
"mask": "0xFFF0",
"architecture": {
- "GCN 1": ["0x6600", "0x6610", "0x6660", "0x6790", "0x6800", "0x6810", "0x6820", "0x6830"],
+ "GCN 1": ["0x1300", "0x1310", "0x6600", "0x6610", "0x6660", "0x6790", "0x6800", "0x6810", "0x6820", "0x6830"],
"GCN 2": ["0x6640", "0x6650", "0x67A0", "0x67B0", "0x9830", "0x9850"],
"GCN 3": ["0x6900", "0x6920", "0x6930", "0x7300", "0x9870", "0x98E0"],
- "GCN 4": ["0x67C0", "0x67D0", "0x67E0", "0x67F0", "0x6980", "0x6990", "0x6FD0"],
- "GCN 5": ["0x66A0", "0x6860", "0x6870", "0x6940", "0x69A0"],
+ "GCN 4": ["0x67C0", "0x67D0", "0x67E0", "0x67F0", "0x6980", "0x6990", "0x6FD0", "0x9920"],
+ "GCN 5": ["0x66A0", "0x6860", "0x6870", "0x6940", "0x69A0", "0x15D0", "0x1630"],
"RDNA 1": ["0x7310", "0x7340", "0x7360"],
- "RDNA 2": ["0x73A0", "0x73B0", "0x73D0", "0x73E0", "0x73F0"]
+ "RDNA 2": ["0x73A0", "0x73B0", "0x73D0", "0x73E0", "0x73F0", "0x7400", "0x7420", "0x7430", "0x1430", "0x1500", "0x15E0", "0x1640", "0x1680"],
+ "RDNA 3": ["0x7440", "0x7470", "0x7480", "0x15B0"],
+ "CDNA 1": ["0x7380"]
}
}]
},
@@ -138,7 +133,26 @@
"Midgard": ["0x00000000"],
"Bifrost": ["0x60000000", "0x70000000"],
- "Valhall": ["0x90000000", "0xA0000000", "0xB0000000"]
+ "Valhall": ["0x90000000", "0xA0000000", "0xB0000000"],
+ "Gen 5": ["0xC0000000"]
+ }
+ }]
+ },
+
+ "Broadcom": {
+ "id": "0x14e4",
+
+ "devices": [{
+ "mask": "0x00000000",
+ "architecture": {
+ "_comment": [
+ "The Broadcom GPUs are rare (used by Raspberry Pi and similar low-power devices) and",
+ "have device IDs that are all over place, so they're all going to get lumped into a",
+ "single 'VideoCore' architecture unless someone comes up with a better way to break",
+ "them down."
+ ],
+
+ "VideoCore": ["0x00000000"]
}
}]
},
@@ -154,7 +168,16 @@
},
"Img Tec": {
- "id": "0x1010"
+ "id": "0x1010",
+
+ "devices": [{
+ "mask": "0xFF000000",
+ "architecture": {
+ "Rogue": ["0x00000000", "0x22000000", "0x24000000"],
+ "Furian": ["0x1b000000"],
+ "Albiorix": ["0x35000000", "0x36000000"]
+ }
+ }]
},
"Intel": {
@@ -165,8 +188,8 @@
"architecture": {
"Gen 7": ["0x0100", "0x0400", "0x0A00", "0x0D00", "0x0F00"],
"Gen 8": ["0x1600", "0x2200"],
- "Gen 9": ["0x1900", "0x3100", "0x3E00", "0x5A00", "0x5900", "0x9B00"],
- "Gen 11": ["0x8A00", "0x4E00"],
+ "Gen 9": ["0x1900", "0x3100", "0x3E00", "0x5A00", "0x5900", "0x8700", "0x9B00"],
+ "Gen 11": ["0x8A00", "0x4E00", "0x9800"],
"Gen 12 LP": ["0x4600", "0x4C00", "0x4900", "0x9A00", "0xA700", "0x7D00"],
"Gen 12 HP": ["0x4F00", "0x5600"],
"Gen 13 LP": ["0x6400"],
@@ -206,7 +229,7 @@
"Maxwell": ["0x1300", "0x1400", "0x1600", "0x1700"],
"Pascal": ["0x1500", "0x1B00", "0x1C00", "0x1D00"],
"Turing": ["0x1E00", "0x1F00", "0x2100"],
- "Ampere": ["0x2200", "0x2400", "0x2500"],
+ "Ampere": ["0x2200", "0x2400", "0x2500", "0x2000"],
"Lovelace": ["0x2600", "0x2700", "0x2800"]
}
}, {
@@ -215,7 +238,9 @@
"architecture": {
"Kepler": ["0x1e000000"],
"Maxwell": ["0x92000000"],
- "Pascal": ["0x93000000"]
+ "Pascal": ["0x93000000"],
+ "Ampere": ["0x97000000"],
+ "Volta": ["0xa5000000"]
}
}]
},
@@ -237,15 +262,29 @@
"Qualcomm_ACPI": {
"name_override": "Qualcomm",
- "id": "0x4D4F4351"
+ "id": "0x4D4F4351",
+
+ "devices": [{
+ "mask": "0xFF000000",
+ "architecture": {
+ "Adreno 8xx": ["0x36000000"]
+ }
+ }]
+
},
"Samsung": {
"id": "0x144d",
"devices": [{
+ "_comment": [
+ "Haven't seen enough of these to determine a good masking pattern, so just using full",
+ "device IDs of known devices in the meantime."
+ ],
+ "mask": "0xFFFFFFFF",
"architecture": {
- "RDNA 2": ["0x73A0"]
+ "RDNA 2": ["0x000073A0", "0x01300100"],
+ "RDNA 3": ["0x02600200"]
}
}]
}
diff --git a/src/dawn/updating_gpu_info.md b/src/dawn/updating_gpu_info.md
new file mode 100644
index 0000000..63a1e1d
--- /dev/null
+++ b/src/dawn/updating_gpu_info.md
@@ -0,0 +1,37 @@
+# Updating gpu_info.json
+
+Dawn uses `gpu_info.json` to group GPUs by vendor and architecture when calling `adapter.info`. It uses
+vendor and masked PCI device IDs to identify the GPUs, and as such will need to be updated from time to time as new
+devices come on the market.
+
+## Guidelines for adding a new device or set of devices
+
+There are no automated processes to add devices to `gpu_info.json`. Everything is inserted by hand. Fortunately the
+file is intended to be human readable, and should be relatively easy to update following the comments at the top of the
+file and referencing the existing entries.
+
+When adding new devices use of a `mask` is encouraged when applicable to capture more devices with less entries.
+However, it's important to ensure that the masked device IDs are not overly broad or capture devices which do not belong
+to a given architecture. Many GPU vendors do not use very consistent patterns in their IDs, or have strange exceptions
+to the patterns that do exist.
+
+When in doubt, prefer adding an explicit device ID without a `mask` over adding an masked ID that might accidentally
+capture more devices than intended.
+
+A GPUs `architecture` should be the vendor's terminology for a given family of devices when possible. An `architecture`
+group should not be detailed enough to identify specific devices, but should ideally group all devices made within a
+span of a couple of years or longer. It is OK to have significant performance disparities between devices in a single
+`architecture` group, as long as the capabilities and behavior of the devices are roughly similar.
+
+## Rolling new devices
+
+Capturing new devices that need to be added to `gpu_info.json` right now is unfortunately a fairly awkward process. The
+method used so far has been to checkout https://github.com/kainino0x/gpuinfo-vulkan-query, update the data submodule
+with the latest records from https://gpuinfo.org using the script at https://github.com/kainino0x/gpuinfo-vulkan-slurp
+(Ask kainino@ or bajones@ for access), and then run `device_id.py` with the path to the `gpu_info.json` file you are
+updating. That script will compare all the records to the entries in `gpu_info.json` and print out how each of them are
+categorized followed by a list of all the uncategorized device IDs and descriptions sorted by vendor. You'll have to
+manually look at the device descriptions and research their architectural design in order to categorize them.
+
+Good luck!
+