blob: 64643b4af737f015e19596c922bb7306e06be3ff [file] [log] [blame]
{
"_comment": [
"Copyright 2022 The Dawn Authors",
"",
"Licensed under the Apache License, Version 2.0 (the \"License\");",
"you may not use this file except in compliance with the License.",
"You may obtain a copy of the License at",
"",
" http://www.apache.org/licenses/LICENSE-2.0",
"",
"Unless required by applicable law or agreed to in writing, software",
"distributed under the License is distributed on an \"AS IS\" BASIS,",
"WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",
"See the License for the specific language governing permissions and",
"limitations under the License."
],
"vendors": {
"_Example Vendor": {
"_comment": [
"Each vendor must have an `id` field, which is it's PCI Vendor ID, and may optionally ",
"have a `devices` field which defines device -> architecture mappings which will be ",
"when populating the GPUAdapterInfo. Keys that begin with an `_` (like this one) denote ",
"commnents, and will be ignored by the parser."
],
"id": "0xDEAD",
"devices": [{
"_comment": [
"The `devices` is an array of 'Device Sets', each of which contains an `architecture` ",
"object which defines an architecture name as a key followed by an array of ",
"PCI device IDs that map to that architecture. The architecture name is what will be ",
"reported to the GPUAdapterInfo, made lower-case and with spaces converted to hyphens."
],
"architecture": {
"Alpha": ["0x0A01", "0x0A02"],
"Beta": ["0x0B01", "0x0B02", "0x0B03"]
}
}, {
"_comment": [
"A Device Set can also define a binary `mask`, which will be be applied to any device ",
"ID prior to comparison, making it easier to capture ranges of device IDs. ",
"Architectures may be duplicated between Device Sets as long as the device ID values ",
"Don't overlap."
],
"mask": "0xFF00",
"architecture": {
"Beta": ["0x1B00"],
"Gamma": ["0x0C00", "0x1C00"]
}
}, {
"_comment": [
"Finally, Device Sets may be flagged as `internal`. Architectures defined in an ",
"internal device set will never be reported in the GPUAdapterInfo, but will generate ",
"appropriate helper functions in Dawn (such as `IsExampleVendorDelta()`) in order to ",
"aid in applying workarounds. Device IDs of internal device sets may overlap with ",
"ones defined in non-internal device sets, but architectures must be unique between ",
"internal and non-internal device sets.",
"Internal architectures facilitate the (hopefully rare) cases where more targeted ",
"GPU identification is required by Dawn's implementation than is provided by the normal ",
"architecture groupings. When possible, however, using non-internal architectures ",
"should be preferred when applying workarounds."
],
"internal": true,
"mask": "0xFFF0",
"architecture": {
"Beta Rev 3": ["0x1B30"]
}
}]
},
"AMD": {
"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 2": ["0x6640", "0x6650", "0x67A0", "0x67B0", "0x9830", "0x9850"],
"GCN 3": ["0x6900", "0x6920", "0x6930", "0x7300", "0x9870", "0x98E0"],
"GCN 4": ["0x67C0", "0x67D0", "0x67E0", "0x67F0", "0x6980", "0x6990"],
"GCN 5": ["0x66A0", "0x6860", "0x6870", "0x6940", "0x69A0"],
"RDNA 1": ["0x7310", "0x7340", "0x7360"],
"RDNA 2": ["0x73A0", "0x73B0", "0x73D0", "0x73E0", "0x73F0"]
}
}]
},
"Apple": {
"id": "0x106b",
"_comment": [
"Apple GPUs do not report a DeviceID via the Metal API, and as such the typical device",
"pattern matching does not work for them. The recommended approach is to find the highest",
"supported 'common' family supported and report it as the architecture.",
"Examples: 'common-1', 'common-3'",
"https://developer.apple.com/documentation/metal/gpu_devices_and_work_submission/detecting_gpu_features_and_metal_software_versions"
]
},
"ARM": {
"id": "0x13B5",
"devices": [{
"mask": "0xF0000000",
"architecture": {
"_comment": [
"The Midgard GPUs have device IDs like 0x07______ and 0x08______, but it's easiest to",
"mask those values out and simply check for the highest octet being zero, since that",
"distinguishes it from the other architectures."
],
"Midgard": ["0x00000000"],
"Bifrost": ["0x60000000", "0x70000000"],
"Valhall": ["0x90000000", "0xA0000000"]
}
}]
},
"Google": {
"id": "0x1AE0",
"devices": [{
"architecture": {
"Swiftshader": ["0xC0DE"]
}
}]
},
"Img Tec": {
"id": "0x1010"
},
"Intel": {
"id": "0x8086",
"devices": [{
"mask": "0xFF00",
"architecture": {
"Gen 7": ["0x0100", "0x0400", "0x0A00", "0x0D00", "0x0F00"],
"Gen 8": ["0x1600", "0x2200"],
"Gen 9": ["0x1900", "0x3100", "0x3E00", "0x5A00", "0x5900", "0x9B00"],
"Gen 11": ["0x8A00"],
"Gen 12 LP": ["0x4600", "0x4C00", "0x4900", "0x9A00"],
"Gen 12 HP": ["0x4F00", "0x5600"]
}
}]
},
"Mesa": {
"id": "0x10005"
},
"Microsoft": {
"id": "0x1414",
"devices": [{
"architecture": {
"WARP": ["0x8c"]
}
}]
},
"Nvidia": {
"id": "0x10DE",
"devices": [{
"mask": "0xFF00",
"architecture": {
"Fermi": ["0x0D00"],
"Kepler": ["0x0F00", "0x1000", "0x1100", "0x1200"],
"Maxwell": ["0x1300", "0x1400", "0x1600", "0x1700"],
"Pascal": ["0x1500", "0x1B00", "0x1C00", "0x1D00"],
"Turing": ["0x1E00", "0x1F00", "0x2100"],
"Ampere": ["0x2200", "0x2400", "0x2500"]
}
}]
},
"Qualcomm": {
"id": "0x5143",
"devices": [{
"mask": "0xFF000000",
"architecture": {
"Adreno 4xx": ["0x04000000"],
"Adreno 5xx": ["0x05000000"],
"Adreno 6xx": ["0x06000000"],
"Adreno 7xx": ["0x07000000"]
}
}]
},
"Samsung": {
"id": "0x144d",
"devices": [{
"architecture": {
"RDNA 2": ["0x73A0"]
}
}]
}
}
}