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.
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.
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!