diff options
Diffstat (limited to 'chromium/gpu/config')
28 files changed, 1225 insertions, 558 deletions
diff --git a/chromium/gpu/config/gpu_blocklist_unittest.cc b/chromium/gpu/config/gpu_blocklist_unittest.cc index 68428cee88a..4f1df7a10ea 100644 --- a/chromium/gpu/config/gpu_blocklist_unittest.cc +++ b/chromium/gpu/config/gpu_blocklist_unittest.cc @@ -20,7 +20,7 @@ class GpuBlocklistTest : public testing::Test { void RunFeatureTest(GpuFeatureType feature_type) { const int kFeatureListForEntry1[1] = {feature_type}; - const uint32_t kDeviceIDsForEntry1[1] = {0x0640}; + const GpuControlList::Device kDevicesForEntry1[1] = {{0x0640, 0x0}}; const GpuControlList::Entry kTestEntries[1] = {{ 1, // id "Test entry", // description @@ -38,8 +38,8 @@ class GpuBlocklistTest : public testing::Test { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x10de, // vendor_id - 1, // DeviceIDs size - kDeviceIDsForEntry1, // DeviceIDs + 1, // Devices size + kDevicesForEntry1, // Devices GpuControlList::kMultiGpuCategoryAny, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info diff --git a/chromium/gpu/config/gpu_control_list.cc b/chromium/gpu/config/gpu_control_list.cc index b59016f27ee..f2a193025d7 100644 --- a/chromium/gpu/config/gpu_control_list.cc +++ b/chromium/gpu/config/gpu_control_list.cc @@ -7,6 +7,7 @@ #include <utility> #include "base/logging.h" +#include "base/notreached.h" #include "base/numerics/safe_conversions.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" @@ -159,6 +160,33 @@ bool GpuControlList::Version::Contains(const std::string& version_string, if (op == kBetween) ref_version2.erase(ref_version2.begin()); } + } else if (schema == kVersionSchemaNvidiaDriver) { + // The driver version we get from the os is "XX.XX.XXXA.BBCC", while the + // workaround is of the form "ABB.CC". Drop the first two stanzas from the + // detected version, erase all but the last character of the third, and move + // "B" to the previous stanza. + if (version.size() != 4) + return false; + // Remember that the detected version might not have leading zeros, so we + // have to be a bit careful. [2] is of the form "001A", where A > 0, so we + // just care that there's at least one digit. However, if there's less than + // that, the splitter stops anyway on that stanza, and the check for four + // stanzas will fail instead. + version.erase(version.begin(), version.begin() + 2); + version[0].erase(0, version[0].length() - 1); + // The last stanza may be missing leading zeros, so handle them. + if (version[1].length() < 3) { + // Two or more removed leading zeros, so BB are both zero. + version[0] += "00"; + } else if (version[1].length() < 4) { + // One removed leading zero. BB is 0[1-9]. + version[0] += "0" + version[1].substr(0, 1); + version[1].erase(0, 1); + } else { + // No leading zeros. + version[0] += version[1].substr(0, 2); + version[1].erase(0, 2); + } } int relation = Version::Compare(version, ref_version1, style); switch (op) { @@ -418,9 +446,9 @@ bool GpuControlList::Conditions::Contains(OsType target_os_type, } } } else if (intel_gpu_generation.IsSpecified()) { - for (size_t ii = 0; ii < candidates.size(); ++ii) { - std::string candidate_generation = GetIntelGpuGeneration( - candidates[ii].vendor_id, candidates[ii].device_id); + for (auto& candidate : candidates) { + std::string candidate_generation = + GetIntelGpuGeneration(candidate.vendor_id, candidate.device_id); if (candidate_generation.empty()) continue; if (intel_gpu_generation.Contains(candidate_generation)) { @@ -429,24 +457,29 @@ bool GpuControlList::Conditions::Contains(OsType target_os_type, } } } else { - GPUInfo::GPUDevice gpu; - gpu.vendor_id = vendor_id; - if (device_id_size == 0) { - for (size_t ii = 0; ii < candidates.size(); ++ii) { - if (gpu.vendor_id == candidates[ii].vendor_id) { + if (device_size == 0) { + for (auto& candidate : candidates) { + if (vendor_id == candidate.vendor_id) { found = true; break; } } } else { - for (size_t ii = 0; ii < device_id_size; ++ii) { - gpu.device_id = device_ids[ii]; - for (size_t jj = 0; jj < candidates.size(); ++jj) { - if (gpu.vendor_id == candidates[jj].vendor_id && - gpu.device_id == candidates[jj].device_id) { - found = true; - break; - } + for (size_t ii = 0; !found && ii < device_size; ++ii) { + uint32_t device_id = devices[ii].device_id; +#if defined(OS_WIN) + uint32_t revision = devices[ii].revision; +#endif // OS_WIN + for (auto& candidate : candidates) { + if (vendor_id != candidate.vendor_id || + device_id != candidate.device_id) + continue; +#if defined(OS_WIN) + if (revision && revision != candidate.revision) + continue; +#endif // OS_WIN + found = true; + break; } } } diff --git a/chromium/gpu/config/gpu_control_list.h b/chromium/gpu/config/gpu_control_list.h index 0820fa38738..9c6077b7ef4 100644 --- a/chromium/gpu/config/gpu_control_list.h +++ b/chromium/gpu/config/gpu_control_list.h @@ -92,6 +92,10 @@ class GPU_EXPORT GpuControlList { // DDDD(old schema) or CCC.DDDD(new schema) is the build number. // That is, indicates the actual driver number. kVersionSchemaIntelDriver, + // The version format of Nvidia drivers is XX.XX.XXXA.AAAA where the X's + // can be any digits, and the A's are the actual version. The workaround + // list specifies them as AAA.AA to match how Nvidia publishes them. + kVersionSchemaNvidiaDriver, }; enum SupportedOrNot { @@ -181,12 +185,17 @@ class GPU_EXPORT GpuControlList { static GLType GetDefaultGLType(); }; + struct GPU_EXPORT Device { + uint32_t device_id; + uint32_t revision = 0u; + }; + struct GPU_EXPORT Conditions { OsType os_type; Version os_version; uint32_t vendor_id; - size_t device_id_size; - const uint32_t* device_ids; + size_t device_size; + const Device* devices; MultiGpuCategory multi_gpu_category; MultiGpuStyle multi_gpu_style; const DriverInfo* driver_info; diff --git a/chromium/gpu/config/gpu_control_list_entry_unittest.cc b/chromium/gpu/config/gpu_control_list_entry_unittest.cc index 176081710c9..4ff35708d33 100644 --- a/chromium/gpu/config/gpu_control_list_entry_unittest.cc +++ b/chromium/gpu/config/gpu_control_list_entry_unittest.cc @@ -1156,4 +1156,38 @@ TEST_F(GpuControlListEntryTest, IntelOldDriverVersionEntry) { EXPECT_TRUE(entry.Contains(kOsWin, "", gpu_info)); } +#if defined(OS_WIN) +TEST_F(GpuControlListEntryTest, DeviceRevisionEntry) { + const Entry& entry = GetEntry(kGpuControlListEntryTest_DeviceRevisionEntry); + GPUInfo gpu_info; + gpu_info.gpu.vendor_id = 0x1002; + gpu_info.gpu.device_id = 0x15DD; + gpu_info.gpu.revision = 0x86; + gpu_info.gpu.driver_version = "26.20.12055.1000"; + EXPECT_TRUE(entry.Contains(kOsWin, "", gpu_info)); + gpu_info.gpu.driver_version = "26.20.15023.6032"; + EXPECT_FALSE(entry.Contains(kOsWin, "", gpu_info)); + gpu_info.gpu.device_id = 0x15D8; + gpu_info.gpu.revision = 0xE1; + gpu_info.gpu.driver_version = "26.20.12055.1000"; + EXPECT_FALSE(entry.Contains(kOsWin, "", gpu_info)); + gpu_info.gpu.revision = 0xE3; + EXPECT_TRUE(entry.Contains(kOsWin, "", gpu_info)); +} + +TEST_F(GpuControlListEntryTest, DeviceRevisionUnspecifiedEntry) { + const Entry& entry = + GetEntry(kGpuControlListEntryTest_DeviceRevisionUnspecifiedEntry); + GPUInfo gpu_info; + gpu_info.gpu.vendor_id = 0x1002; + gpu_info.gpu.device_id = 0x15DD; + gpu_info.gpu.revision = 0x86; + EXPECT_TRUE(entry.Contains(kOsWin, "", gpu_info)); + gpu_info.gpu.revision = 0x91; + EXPECT_TRUE(entry.Contains(kOsWin, "", gpu_info)); + gpu_info.gpu.revision = 0x0; + EXPECT_TRUE(entry.Contains(kOsWin, "", gpu_info)); +} +#endif // OS_WIN + } // namespace gpu diff --git a/chromium/gpu/config/gpu_control_list_format.txt b/chromium/gpu/config/gpu_control_list_format.txt index 6def629c495..1ff95688f54 100644 --- a/chromium/gpu/config/gpu_control_list_format.txt +++ b/chromium/gpu/config/gpu_control_list_format.txt @@ -22,69 +22,75 @@ // "os". // "version" is a VERSION structure (defined below). // 3. "vendor_id" is a string. 0 is reserved. -// 4. "device_id" is an array of strings. 0 is reserved. -// 5. "multi_gpu_style" is a string, valid values include: +// 4. "device_id" is an array of strings. 0 is reserved +// 5. "device_revision" is an array of strings. Default is 0. This is Windows +// only. There are three ways to specify a device on Windows: +// a) only specify device IDs; +// b) specify one device ID, associate with multiple revisions; +// c) specify k device IDs, associate with k device revisions. +// https://docs.microsoft.com/en-us/windows-hardware/drivers/install/identifiers-for-pci-devices +// 6. "multi_gpu_style" is a string, valid values include: // a) "optimus": NVIDIA dual GPU // b) "amd_switchable": AMD dual GPU // c) "amd_switchable_integrated": AMD dual GPU, integrated GPU is active // d) "amd_switchable_discrete": AMD dual GPU, discrete GPU is active // c) and d) are only valid on Win, as on Mac we can switch GPU on the fly. -// 6. "multi_gpu_category" is a string, valid values include "any", "primary", +// 7. "multi_gpu_category" is a string, valid values include "any", "primary", // "secondary", and "active". If unspecified, the default value is "active". // See gpu_control_list.h for more details on the meanings of the strings. -// 7. "driver_vendor" is a string pattern. (Not available on Windows) -// 8. "driver_version" is a VERSION structure (defined below). On Windows +// 8. "driver_vendor" is a string pattern. (Not available on Windows) +// 9. "driver_version" is a VERSION structure (defined below). On Windows // this value can be retrieved by searching for the "Driver File Version" in // dxdiag.txt -// 9. "gl_type" is a string, valid values include "gl", "gles", and "angle". +// 10. "gl_type" is a string, valid values include "gl", "gles", and "angle". // If "gl_version" is specified and "gl_type" is not, use the default value. // The default value on Android is "gles", on Windows is "angle", on other // platforms is "gl". -// 10. "gl_version" is a VERSION structure (defined below). -// 11. "gl_vendor" is a string pattern. -// 12. "gl_renderer" is a string pattern. -// 13. "gl_extensions" is a string pattern. -// 14. "machine_model_name" is an array of string patterns. -// 15. "machine_model_version" is a VERSION structure (defined below). -// 16. "gpu_count" is a INT structure (defined below). -// 17. "cpu_info" is a string pattern. -// 18. "exceptions" is a list of entries. -// 19. "features" is a list of gpu control list options, which can be +// 11. "gl_version" is a VERSION structure (defined below). +// 12. "gl_vendor" is a string pattern. +// 13. "gl_renderer" is a string pattern. +// 14. "gl_extensions" is a string pattern. +// 15. "machine_model_name" is an array of string patterns. +// 16. "machine_model_version" is a VERSION structure (defined below). +// 17. "gpu_count" is a INT structure (defined below). +// 18. "cpu_info" is a string pattern. +// 19. "exceptions" is a list of entries. +// 20. "features" is a list of gpu control list options, which can be // configured by a specific list. See its *_json.cc file for a list of // supported features. This field is mandatory. // An "exceptions" list to the features can be added for convenience instead // of listing all features except one. -// 20. "description" has the description of the entry. -// 21. "webkit_bugs" is an array of associated webkit bug numbers. -// 22. "cr_bugs" is an array of associated webkit bug numbers. -// 23. "disabled" is a boolean. If it is present, the entry will be skipped. +// 21. "description" has the description of the entry. +// 22. "webkit_bugs" is an array of associated webkit bug numbers. +// 23. "cr_bugs" is an array of associated webkit bug numbers. +// 24. "disabled" is a boolean. If it is present, the entry will be skipped. // This can not be used in exceptions. -// 24. "direct_rendering" is a boolean. If present, this will filter on whether +// 25. "direct_rendering" is a boolean. If present, this will filter on whether // the GL contexts are direct or indirect based on the value. -// 25. "disabled_extensions" is a list of strings which contain the GL_EXTENSION +// 26. "disabled_extensions" is a list of strings which contain the GL_EXTENSION // strings which are disabled by the workaround. -// 26. "pixel_shader_version" is a VERSION structure (defined below). -// 27. "test_group" is an non-negative integer. If not specified, it defaults +// 27. "pixel_shader_version" is a VERSION structure (defined below). +// 28. "test_group" is an non-negative integer. If not specified, it defaults // to 0, which is Chrome's blacklist. Any entries with a non-zero test_group // ID will be appended on top of the default group entries if Chrome runs // with --gpu-blacklist-test-group=ID. -// 28. "intel_gpu_series" is a list of gpu series names. Currently supported +// 29. "intel_gpu_series" is a list of gpu series names. Currently supported // series include: "broadwater", "eaglelake", "ironlake", "sandybridge", // "baytrail", "ivybridge", "haswell", "cherrytrail", "broadwell", // "apollolake", "skylake", "geminilake", "kabylake", "coffeelake", // "whiskeylake", "cometlake", "cannonlake", "icelake", "elkhartlake", // "jasperlake", "tigerlake". -// 29. "hardware_overlay" is either "supported" or "unsupported". Currently it +// 30. "hardware_overlay" is either "supported" or "unsupported". Currently it // only applies on Windows where hardware overlays may be supported on // certain Intel GPUs. By default it's "dont_care" and there is no need to // specify that. -// 30. "intel_gpu_generation" is a VERSION structure. Each Intel GPU has a +// 31. "intel_gpu_generation" is a VERSION structure. Each Intel GPU has a // specific integer (meaning generation) associated. -// 31. "subpixel_font_rendering" is either "supported" or "unsupported". +// 32. "subpixel_font_rendering" is either "supported" or "unsupported". // Currently it only applies on ChromeOS where subpixel font rendering // causes a glitch on Mali GPUs. By default it's "dont_care" and there is // no need to specify that. -// 32. "driver_update_link" provides a link where affected users with older +// 33. "driver_update_link" provides a link where affected users with older // drivers can download a newer driver to avoid triggering this entry. // Such link will be displayed in chrome://gpu for affected devices. // @@ -92,15 +98,15 @@ // be any of the following values: "=", "<", "<=", ">", ">=", "any", "between". // "style" is optional and can be "lexical" or "numerical"; if it's not // specified, it defaults to "numerical". "schema" is optional and can be -// "common" or "intel_driver"; if it's not specified, it defaults to "common"; -// it's an error to specify "intel_driver" schema for entries that are not -// specifically for Intel GPUs on Windows. "value2" is only used if "op" is -// "between". "between" is "value <= * <= value2". "value" is used for all "op" -// values except "any". "value" and "value2" are in the format of x, x.x, -// x.x.x, etc. +// "common", "intel_driver" or "nvidia_driver"; if it's not specified, it +// defaults to "common"; it's an error to specify "(intel|nvidia)_driver" schema +// for entries that are not specifically for Intel|Nvidia GPUs on Windows. +// "value2" is only used if "op" is "between". "between" is +// "value <= * <= value2". "value" is used for all "op" values except "any". +// "value" and "value2" are in the format of x, x.x, x.x.x, etc. // Only "driver_version" supports lexical style if the format is major.minor; // in that case, major is still numerical, but minor is lexical. -// Only "driver_version" supports "intel_driver" schema. +// Only "driver_version" supports "(intel|nvidia)_driver" schema. // // FLOAT includes "op" "value", and "value2". "op" can be any of the // following values: "=", "<", "<=", ">", ">=", "any", "between". "value2" is diff --git a/chromium/gpu/config/gpu_control_list_testing.json b/chromium/gpu/config/gpu_control_list_testing.json index ac413f1f2d2..f89624c144d 100644 --- a/chromium/gpu/config/gpu_control_list_testing.json +++ b/chromium/gpu/config/gpu_control_list_testing.json @@ -948,6 +948,47 @@ "features": [ "test_feature_0" ] + }, + { + "id": 78, + "description": "GpuControlListEntryTest.DeviceRevisionEntry", + "os": { + "type": "win" + }, + "vendor_id": "0x1002", + "exceptions": [ + { + "device_id": ["0x15D8", "0x15DD"], + "device_revision": ["0x93", "0x86"], + "driver_version": { + "op": ">=", + "value": "26.20.15023.6032" + } + }, + { + "device_id": ["0x15D8"], + "device_revision": ["0xE1", "0xE2"], + "driver_version": { + "op": ">=", + "value": "26.20.12055.1000" + } + } + ], + "features": [ + "test_feature_0" + ] + }, + { + "id": 79, + "description": "GpuControlListEntryTest.DeviceRevisionUnspecifiedEntry", + "os": { + "type": "win" + }, + "vendor_id": "0x1002", + "device_id": ["0x15D8", "0x15DD"], + "features": [ + "test_feature_0" + ] } ] } diff --git a/chromium/gpu/config/gpu_control_list_testing_arrays_and_structs_autogen.h b/chromium/gpu/config/gpu_control_list_testing_arrays_and_structs_autogen.h index 88b02cebb2a..acac88bd71c 100644 --- a/chromium/gpu/config/gpu_control_list_testing_arrays_and_structs_autogen.h +++ b/chromium/gpu/config/gpu_control_list_testing_arrays_and_structs_autogen.h @@ -28,8 +28,8 @@ const uint32_t kCrBugsForGpuControlTestingEntry1[2] = { 678, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry1[1] = { - 0x0640, +const GpuControlList::Device kDevicesForGpuControlTestingEntry1[1] = { + {0x0640, 0x0}, }; const GpuControlList::DriverInfo kDriverInfoForGpuControlTestingEntry1 = { @@ -192,9 +192,9 @@ const int kFeatureListForGpuControlTestingEntry6[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry6[2] = { - 0x1023, - 0x0640, +const GpuControlList::Device kDevicesForGpuControlTestingEntry6[2] = { + {0x1023, 0x0}, + {0x0640, 0x0}, }; const GpuControlList::More kMoreForEntry6_1440601243 = { @@ -718,8 +718,8 @@ const int kFeatureListForGpuControlTestingEntry25[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry25[1] = { - 0x0640, +const GpuControlList::Device kDevicesForGpuControlTestingEntry25[1] = { + {0x0640, 0x0}, }; const GpuControlList::More kMoreForEntry25_1440601243 = { @@ -935,8 +935,8 @@ const int kFeatureListForGpuControlTestingEntry30[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry30[1] = { - 0x0166, +const GpuControlList::Device kDevicesForGpuControlTestingEntry30[1] = { + {0x0166, 0x0}, }; const GpuControlList::More kMoreForEntry30_1440601243 = { @@ -962,8 +962,8 @@ const int kFeatureListForGpuControlTestingEntry31[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry31[1] = { - 0x0640, +const GpuControlList::Device kDevicesForGpuControlTestingEntry31[1] = { + {0x0640, 0x0}, }; const GpuControlList::More kMoreForEntry31_1440601243 = { @@ -989,8 +989,8 @@ const int kFeatureListForGpuControlTestingEntry32[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry32[1] = { - 0x0166, +const GpuControlList::Device kDevicesForGpuControlTestingEntry32[1] = { + {0x0166, 0x0}, }; const GpuControlList::More kMoreForEntry32_1440601243 = { @@ -1016,8 +1016,8 @@ const int kFeatureListForGpuControlTestingEntry33[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry33[1] = { - 0x0166, +const GpuControlList::Device kDevicesForGpuControlTestingEntry33[1] = { + {0x0166, 0x0}, }; const GpuControlList::More kMoreForEntry33_1440601243 = { @@ -1043,8 +1043,8 @@ const int kFeatureListForGpuControlTestingEntry34[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry34[1] = { - 0x0166, +const GpuControlList::Device kDevicesForGpuControlTestingEntry34[1] = { + {0x0166, 0x0}, }; const GpuControlList::More kMoreForEntry34_1440601243 = { @@ -1070,9 +1070,9 @@ const int kFeatureListForGpuControlTestingEntry35[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry35[2] = { - 0x0166, - 0x0168, +const GpuControlList::Device kDevicesForGpuControlTestingEntry35[2] = { + {0x0166, 0x0}, + {0x0168, 0x0}, }; const GpuControlList::More kMoreForEntry35_1440601243 = { @@ -1121,8 +1121,8 @@ const int kFeatureListForGpuControlTestingEntry37[1] = { TEST_FEATURE_0, }; -const uint32_t kDeviceIDsForGpuControlTestingEntry37[1] = { - 0x0640, +const GpuControlList::Device kDevicesForGpuControlTestingEntry37[1] = { + {0x0640, 0x0}, }; const GpuControlList::More kMoreForEntry37_1440601243 = { @@ -1305,8 +1305,9 @@ const GpuControlList::More kMoreForEntry44_1440601243 = { GpuControlList::kDontCare, // subpixel_font_rendering }; -const uint32_t kDeviceIDsForGpuControlTestingEntry44Exception0[1] = { - 0x2a06, +const GpuControlList::Device kDevicesForGpuControlTestingEntry44Exception0[1] = + { + {0x2a06, 0x0}, }; const GpuControlList::DriverInfo @@ -1336,8 +1337,9 @@ const GpuControlList::More kMoreForEntry44_1440601243Exception0 = { GpuControlList::kDontCare, // subpixel_font_rendering }; -const uint32_t kDeviceIDsForGpuControlTestingEntry44Exception1[1] = { - 0x2a02, +const GpuControlList::Device kDevicesForGpuControlTestingEntry44Exception1[1] = + { + {0x2a02, 0x0}, }; const GpuControlList::DriverInfo @@ -2334,6 +2336,123 @@ const GpuControlList::More kMoreForEntry77_1440601243 = { GpuControlList::kDontCare, // subpixel_font_rendering }; +const int kFeatureListForGpuControlTestingEntry78[1] = { + TEST_FEATURE_0, +}; + +const GpuControlList::More kMoreForEntry78_1440601243 = { + GpuControlList::kGLTypeNone, // gl_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gl_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // pixel_shader_version + false, // in_process_gpu + 0, // gl_reset_notification_strategy + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // direct_rendering_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gpu_count + GpuControlList::kDontCare, // hardware_overlay + 0, // test_group + GpuControlList::kDontCare, // subpixel_font_rendering +}; + +const GpuControlList::Device kDevicesForGpuControlTestingEntry78Exception0[2] = + { + {0x15D8, 0x93}, + {0x15DD, 0x86}, +}; + +const GpuControlList::DriverInfo + kDriverInfoForGpuControlTestingEntry78Exception0 = { + nullptr, // driver_vendor + {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, "26.20.15023.6032", + nullptr}, // driver_version +}; + +const GpuControlList::More kMoreForEntry78_1440601243Exception0 = { + GpuControlList::kGLTypeNone, // gl_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gl_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // pixel_shader_version + false, // in_process_gpu + 0, // gl_reset_notification_strategy + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // direct_rendering_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gpu_count + GpuControlList::kDontCare, // hardware_overlay + 0, // test_group + GpuControlList::kDontCare, // subpixel_font_rendering +}; + +const GpuControlList::Device kDevicesForGpuControlTestingEntry78Exception1[2] = + { + {0x15D8, 0xE1}, + {0x15D8, 0xE2}, +}; + +const GpuControlList::DriverInfo + kDriverInfoForGpuControlTestingEntry78Exception1 = { + nullptr, // driver_vendor + {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, "26.20.12055.1000", + nullptr}, // driver_version +}; + +const GpuControlList::More kMoreForEntry78_1440601243Exception1 = { + GpuControlList::kGLTypeNone, // gl_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gl_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // pixel_shader_version + false, // in_process_gpu + 0, // gl_reset_notification_strategy + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // direct_rendering_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gpu_count + GpuControlList::kDontCare, // hardware_overlay + 0, // test_group + GpuControlList::kDontCare, // subpixel_font_rendering +}; + +const int kFeatureListForGpuControlTestingEntry79[1] = { + TEST_FEATURE_0, +}; + +const GpuControlList::Device kDevicesForGpuControlTestingEntry79[2] = { + {0x15D8, 0x0}, + {0x15DD, 0x0}, +}; + +const GpuControlList::More kMoreForEntry79_1440601243 = { + GpuControlList::kGLTypeNone, // gl_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gl_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // pixel_shader_version + false, // in_process_gpu + 0, // gl_reset_notification_strategy + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // direct_rendering_version + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // gpu_count + GpuControlList::kDontCare, // hardware_overlay + 0, // test_group + GpuControlList::kDontCare, // subpixel_font_rendering +}; + } // namespace gpu #endif // GPU_CONFIG_GPU_CONTROL_LIST_TESTING_ARRAYS_AND_STRUCTS_AUTOGEN_H_ diff --git a/chromium/gpu/config/gpu_control_list_testing_autogen.cc b/chromium/gpu/config/gpu_control_list_testing_autogen.cc index 64b9129fac4..e356b79cd81 100644 --- a/chromium/gpu/config/gpu_control_list_testing_autogen.cc +++ b/chromium/gpu/config/gpu_control_list_testing_autogen.cc @@ -31,10 +31,10 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kEQ, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, "10.6.4", - nullptr}, // os_version - 0x10de, // vendor_id - base::size(kDeviceIDsForGpuControlTestingEntry1), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry1, // DeviceIDs + nullptr}, // os_version + 0x10de, // vendor_id + base::size(kDevicesForGpuControlTestingEntry1), // Devices size + kDevicesForGpuControlTestingEntry1, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry1, // driver info @@ -67,8 +67,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x10de, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -101,8 +101,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x10de, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -135,8 +135,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -169,8 +169,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -201,10 +201,10 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsAny, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x10de, // vendor_id - base::size(kDeviceIDsForGpuControlTestingEntry6), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry6, // DeviceIDs + nullptr}, // os_version + 0x10de, // vendor_id + base::size(kDevicesForGpuControlTestingEntry6), // Devices size + kDevicesForGpuControlTestingEntry6, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -237,8 +237,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -271,8 +271,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -305,8 +305,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -339,8 +339,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -373,8 +373,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -407,8 +407,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -441,8 +441,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -475,8 +475,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -509,8 +509,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -543,8 +543,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleOptimus, // multi_gpu_style nullptr, // driver info @@ -577,8 +577,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleAMDSwitchable, // multi_gpu_style nullptr, // driver info @@ -611,8 +611,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry18, // driver info @@ -645,8 +645,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x1002, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry19, // driver info @@ -679,8 +679,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry20, // driver info @@ -713,8 +713,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -747,8 +747,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -781,8 +781,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -815,8 +815,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -847,18 +847,17 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x10de, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry25), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry25, // DeviceIDs - GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category - GpuControlList::kMultiGpuStyleNone, // multi_gpu_style - nullptr, // driver info - nullptr, // GL strings - nullptr, // machine model info - 0, // intel_gpu_series size - nullptr, // intel_gpu_series + nullptr}, // os_version + 0x10de, // vendor_id + base::size(kDevicesForGpuControlTestingEntry25), // Devices size + kDevicesForGpuControlTestingEntry25, // Devices + GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // intel_gpu_generation @@ -884,8 +883,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -918,8 +917,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -952,8 +951,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -986,8 +985,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1018,18 +1017,17 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x8086, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry30), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry30, // DeviceIDs - GpuControlList::kMultiGpuCategoryAny, // multi_gpu_category - GpuControlList::kMultiGpuStyleNone, // multi_gpu_style - nullptr, // driver info - nullptr, // GL strings - nullptr, // machine model info - 0, // intel_gpu_series size - nullptr, // intel_gpu_series + nullptr}, // os_version + 0x8086, // vendor_id + base::size(kDevicesForGpuControlTestingEntry30), // Devices size + kDevicesForGpuControlTestingEntry30, // Devices + GpuControlList::kMultiGpuCategoryAny, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // intel_gpu_generation @@ -1053,18 +1051,17 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x10de, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry31), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry31, // DeviceIDs - GpuControlList::kMultiGpuCategoryAny, // multi_gpu_category - GpuControlList::kMultiGpuStyleNone, // multi_gpu_style - nullptr, // driver info - nullptr, // GL strings - nullptr, // machine model info - 0, // intel_gpu_series size - nullptr, // intel_gpu_series + nullptr}, // os_version + 0x10de, // vendor_id + base::size(kDevicesForGpuControlTestingEntry31), // Devices size + kDevicesForGpuControlTestingEntry31, // Devices + GpuControlList::kMultiGpuCategoryAny, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // intel_gpu_generation @@ -1088,11 +1085,10 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x8086, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry32), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry32, // DeviceIDs + nullptr}, // os_version + 0x8086, // vendor_id + base::size(kDevicesForGpuControlTestingEntry32), // Devices size + kDevicesForGpuControlTestingEntry32, // Devices GpuControlList::kMultiGpuCategorySecondary, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1123,18 +1119,17 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x8086, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry33), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry33, // DeviceIDs - GpuControlList::kMultiGpuCategoryPrimary, // multi_gpu_category - GpuControlList::kMultiGpuStyleNone, // multi_gpu_style - nullptr, // driver info - nullptr, // GL strings - nullptr, // machine model info - 0, // intel_gpu_series size - nullptr, // intel_gpu_series + nullptr}, // os_version + 0x8086, // vendor_id + base::size(kDevicesForGpuControlTestingEntry33), // Devices size + kDevicesForGpuControlTestingEntry33, // Devices + GpuControlList::kMultiGpuCategoryPrimary, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // intel_gpu_generation @@ -1158,18 +1153,17 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x8086, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry34), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry34, // DeviceIDs - GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category - GpuControlList::kMultiGpuStyleNone, // multi_gpu_style - nullptr, // driver info - nullptr, // GL strings - nullptr, // machine model info - 0, // intel_gpu_series size - nullptr, // intel_gpu_series + nullptr}, // os_version + 0x8086, // vendor_id + base::size(kDevicesForGpuControlTestingEntry34), // Devices size + kDevicesForGpuControlTestingEntry34, // Devices + GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // intel_gpu_generation @@ -1193,18 +1187,17 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x8086, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry35), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry35, // DeviceIDs - GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category - GpuControlList::kMultiGpuStyleNone, // multi_gpu_style - nullptr, // driver info - nullptr, // GL strings - nullptr, // machine model info - 0, // intel_gpu_series size - nullptr, // intel_gpu_series + nullptr}, // os_version + 0x8086, // vendor_id + base::size(kDevicesForGpuControlTestingEntry35), // Devices size + kDevicesForGpuControlTestingEntry35, // Devices + GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // intel_gpu_generation @@ -1230,8 +1223,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1262,18 +1255,17 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kOsMacosx, // os_type {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, - nullptr}, // os_version - 0x10de, // vendor_id - base::size( - kDeviceIDsForGpuControlTestingEntry37), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry37, // DeviceIDs - GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category - GpuControlList::kMultiGpuStyleNone, // multi_gpu_style - nullptr, // driver info - nullptr, // GL strings - nullptr, // machine model info - 0, // intel_gpu_series size - nullptr, // intel_gpu_series + nullptr}, // os_version + 0x10de, // vendor_id + base::size(kDevicesForGpuControlTestingEntry37), // Devices size + kDevicesForGpuControlTestingEntry37, // Devices + GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // intel_gpu_generation @@ -1299,8 +1291,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x10de, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1333,8 +1325,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1367,8 +1359,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, "4.2", nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1401,8 +1393,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1435,8 +1427,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1468,8 +1460,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { {GpuControlList::kGE, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, "6", nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1502,8 +1494,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1536,8 +1528,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList:: kMultiGpuStyleAMDSwitchableDiscrete, // multi_gpu_style @@ -1571,8 +1563,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList:: kMultiGpuStyleAMDSwitchableIntegrated, // multi_gpu_style @@ -1606,8 +1598,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1640,8 +1632,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1674,8 +1666,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x10de, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry49, // driver info @@ -1708,8 +1700,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x10de, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry50, // driver info @@ -1742,8 +1734,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1776,8 +1768,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1810,8 +1802,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry53, // driver info @@ -1844,8 +1836,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1878,8 +1870,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1912,8 +1904,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1946,8 +1938,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, "3.19.1", nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -1980,8 +1972,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2014,8 +2006,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2048,8 +2040,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2082,8 +2074,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2116,8 +2108,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryAny, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2150,8 +2142,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryPrimary, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2184,8 +2176,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategorySecondary, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2218,8 +2210,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2252,8 +2244,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry66, // driver info @@ -2286,8 +2278,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2320,8 +2312,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2354,8 +2346,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryActive, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2388,8 +2380,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryAny, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2422,8 +2414,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryPrimary, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2456,8 +2448,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategorySecondary, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2490,8 +2482,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2524,8 +2516,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -2558,8 +2550,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry75, // driver info @@ -2592,8 +2584,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry76, // driver info @@ -2626,8 +2618,8 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry77, // driver info @@ -2643,6 +2635,74 @@ const GpuControlList::Entry kGpuControlListTestingEntries[] = { 0, // exceptions count nullptr, // exceptions }, + { + 78, // id + "GpuControlListEntryTest.DeviceRevisionEntry", + base::size(kFeatureListForGpuControlTestingEntry78), // features size + kFeatureListForGpuControlTestingEntry78, // features + 0, // DisabledExtensions size + nullptr, // DisabledExtensions + 0, // DisabledWebGLExtensions size + nullptr, // DisabledWebGLExtensions + 0, // CrBugs size + nullptr, // CrBugs + { + GpuControlList::kOsWin, // os_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // os_version + 0x1002, // vendor_id + 0, // Devices size + nullptr, // Devices + GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // intel_gpu_generation + &kMoreForEntry78_1440601243, // more data + }, + base::size(kExceptionsForEntry78), // exceptions count + kExceptionsForEntry78, // exceptions + }, + { + 79, // id + "GpuControlListEntryTest.DeviceRevisionUnspecifiedEntry", + base::size(kFeatureListForGpuControlTestingEntry79), // features size + kFeatureListForGpuControlTestingEntry79, // features + 0, // DisabledExtensions size + nullptr, // DisabledExtensions + 0, // DisabledWebGLExtensions size + nullptr, // DisabledWebGLExtensions + 0, // CrBugs size + nullptr, // CrBugs + { + GpuControlList::kOsWin, // os_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // os_version + 0x1002, // vendor_id + base::size(kDevicesForGpuControlTestingEntry79), // Devices size + kDevicesForGpuControlTestingEntry79, // Devices + GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + nullptr, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // intel_gpu_generation + &kMoreForEntry79_1440601243, // more data + }, + 0, // exceptions count + nullptr, // exceptions + }, }; -const size_t kGpuControlListTestingEntryCount = 77; +const size_t kGpuControlListTestingEntryCount = 79; } // namespace gpu diff --git a/chromium/gpu/config/gpu_control_list_testing_entry_enums_autogen.h b/chromium/gpu/config/gpu_control_list_testing_entry_enums_autogen.h index fc12d787732..7b1a8fecf3e 100644 --- a/chromium/gpu/config/gpu_control_list_testing_entry_enums_autogen.h +++ b/chromium/gpu/config/gpu_control_list_testing_entry_enums_autogen.h @@ -90,6 +90,8 @@ enum GpuControlListTestingEntryEnum { kGpuControlListEntryTest_IntelDriverVendorEntry = 74, kGpuControlListEntryTest_IntelDriverVersionEntry = 75, kGpuControlListEntryTest_IntelOldDriverVersionEntry = 76, + kGpuControlListEntryTest_DeviceRevisionEntry = 77, + kGpuControlListEntryTest_DeviceRevisionUnspecifiedEntry = 78, }; } // namespace gpu diff --git a/chromium/gpu/config/gpu_control_list_testing_exceptions_autogen.h b/chromium/gpu/config/gpu_control_list_testing_exceptions_autogen.h index 355d7b165d0..fa66aa4aff2 100644 --- a/chromium/gpu/config/gpu_control_list_testing_exceptions_autogen.h +++ b/chromium/gpu/config/gpu_control_list_testing_exceptions_autogen.h @@ -18,8 +18,8 @@ const GpuControlList::Conditions kExceptionsForEntry4[1] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x10de, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -40,8 +40,8 @@ const GpuControlList::Conditions kExceptionsForEntry5[1] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -62,8 +62,8 @@ const GpuControlList::Conditions kExceptionsForEntry21[1] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -84,8 +84,8 @@ const GpuControlList::Conditions kExceptionsForEntry27[1] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -106,8 +106,8 @@ const GpuControlList::Conditions kExceptionsForEntry29[1] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -129,8 +129,8 @@ const GpuControlList::Conditions kExceptionsForEntry44[2] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id base::size( - kDeviceIDsForGpuControlTestingEntry44Exception0), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry44Exception0, // DeviceIDs + kDevicesForGpuControlTestingEntry44Exception0), // Devices size + kDevicesForGpuControlTestingEntry44Exception0, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry44Exception0, // driver info @@ -149,8 +149,8 @@ const GpuControlList::Conditions kExceptionsForEntry44[2] = { GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x8086, // vendor_id base::size( - kDeviceIDsForGpuControlTestingEntry44Exception1), // DeviceIDs size - kDeviceIDsForGpuControlTestingEntry44Exception1, // DeviceIDs + kDevicesForGpuControlTestingEntry44Exception1), // Devices size + kDevicesForGpuControlTestingEntry44Exception1, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style &kDriverInfoForGpuControlTestingEntry44Exception1, // driver info @@ -171,8 +171,8 @@ const GpuControlList::Conditions kExceptionsForEntry51[1] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -193,8 +193,8 @@ const GpuControlList::Conditions kExceptionsForEntry65[1] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -216,8 +216,8 @@ const GpuControlList::Conditions kExceptionsForEntry73[3] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -235,8 +235,8 @@ const GpuControlList::Conditions kExceptionsForEntry73[3] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -254,8 +254,8 @@ const GpuControlList::Conditions kExceptionsForEntry73[3] = { {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version 0x00, // vendor_id - 0, // DeviceIDs size - nullptr, // DeviceIDs + 0, // Devices size + nullptr, // Devices GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category GpuControlList::kMultiGpuStyleNone, // multi_gpu_style nullptr, // driver info @@ -270,6 +270,49 @@ const GpuControlList::Conditions kExceptionsForEntry73[3] = { }, }; +const GpuControlList::Conditions kExceptionsForEntry78[2] = { + { + GpuControlList::kOsAny, // os_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version + 0x1002, // vendor_id + base::size( + kDevicesForGpuControlTestingEntry78Exception0), // Devices size + kDevicesForGpuControlTestingEntry78Exception0, // Devices + GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + &kDriverInfoForGpuControlTestingEntry78Exception0, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // intel_gpu_generation + &kMoreForEntry78_1440601243Exception0, // more data + }, + { + GpuControlList::kOsAny, // os_type + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, nullptr}, // os_version + 0x1002, // vendor_id + base::size( + kDevicesForGpuControlTestingEntry78Exception1), // Devices size + kDevicesForGpuControlTestingEntry78Exception1, // Devices + GpuControlList::kMultiGpuCategoryNone, // multi_gpu_category + GpuControlList::kMultiGpuStyleNone, // multi_gpu_style + &kDriverInfoForGpuControlTestingEntry78Exception1, // driver info + nullptr, // GL strings + nullptr, // machine model info + 0, // intel_gpu_series size + nullptr, // intel_gpu_series + {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical, + GpuControlList::kVersionSchemaCommon, nullptr, + nullptr}, // intel_gpu_generation + &kMoreForEntry78_1440601243Exception1, // more data + }, +}; + } // namespace gpu #endif // GPU_CONFIG_GPU_CONTROL_LIST_TESTING_EXCEPTIONS_AUTOGEN_H_ diff --git a/chromium/gpu/config/gpu_control_list_version_unittest.cc b/chromium/gpu/config/gpu_control_list_version_unittest.cc index 896b081aa1d..2c7dd2468e3 100644 --- a/chromium/gpu/config/gpu_control_list_version_unittest.cc +++ b/chromium/gpu/config/gpu_control_list_version_unittest.cc @@ -16,6 +16,7 @@ constexpr auto kLexical = GpuControlList::kVersionStyleLexical; constexpr auto kCommon = GpuControlList::kVersionSchemaCommon; constexpr auto kIntelDriver = GpuControlList::kVersionSchemaIntelDriver; +constexpr auto kNvidiaDriver = GpuControlList::kVersionSchemaNvidiaDriver; constexpr auto kBetween = GpuControlList::kBetween; constexpr auto kEQ = GpuControlList::kEQ; @@ -219,4 +220,51 @@ TEST_F(VersionTest, IntelDriverSchema) { } } +TEST_F(VersionTest, NvidiaDriverSchema) { + { + // Nvidia drivers, XX.XX.XXXA.AABB, only AAA.BB is considered. The version + // is specified as "AAA.BB" or "AAA" in the workaround file. + { + // "AAA.BB" should exactly specify one version. + Version info = {kLT, kNumerical, kNvidiaDriver, "234.56", nullptr}; + EXPECT_TRUE(info.Contains("26.10.0012.3455")); + EXPECT_TRUE(info.Contains("00.00.0012.3455")); + EXPECT_TRUE(info.Contains("00.00.012.3455")); + EXPECT_TRUE(info.Contains("00.00.12.3455")); + EXPECT_FALSE(info.Contains("26.10.0012.3456")); + EXPECT_FALSE(info.Contains("26.10.012.3456")); + EXPECT_FALSE(info.Contains("26.10.12.3456")); + EXPECT_FALSE(info.Contains("26.10.0012.3457")); + EXPECT_FALSE(info.Contains("00.00.0012.3457")); + EXPECT_TRUE(info.Contains("26.10.0012.2457")); + EXPECT_TRUE(info.Contains("26.10.0011.3457")); + + // Leading zeros in the third stanza are okay. + EXPECT_TRUE(info.Contains("26.10.0002.3455")); + EXPECT_FALSE(info.Contains("26.10.0002.3456")); + EXPECT_FALSE(info.Contains("26.10.0002.3457")); + EXPECT_TRUE(info.Contains("26.10.0010.3457")); + EXPECT_TRUE(info.Contains("26.10.0000.3457")); + + // Missing zeros in the fourth stanza are replaced. + EXPECT_TRUE(info.Contains("26.10.0012.455")); + EXPECT_TRUE(info.Contains("26.10.0012.57")); + EXPECT_FALSE(info.Contains("26.10.0013.456")); + EXPECT_FALSE(info.Contains("26.10.0013.57")); + + // Too short is rejected. + EXPECT_FALSE(info.Contains("26.10..57")); + EXPECT_FALSE(info.Contains("26.10.100")); + EXPECT_FALSE(info.Contains("26.10.100.")); + } + + { + // "AAA" should allow "AAA.*" + Version info = {kEQ, kNumerical, kNvidiaDriver, "234", nullptr}; + EXPECT_FALSE(info.Contains("26.10.0012.3556")); + EXPECT_TRUE(info.Contains("26.10.0012.3456")); + } + } +} + } // namespace gpu diff --git a/chromium/gpu/config/gpu_driver_bug_list.json b/chromium/gpu/config/gpu_driver_bug_list.json index 450c929ea75..8d4d155a777 100644 --- a/chromium/gpu/config/gpu_driver_bug_list.json +++ b/chromium/gpu/config/gpu_driver_bug_list.json @@ -2273,12 +2273,13 @@ } }, "features": [ - "disable_accelerated_vpx_decode" + "disable_accelerated_vp8_decode", + "disable_accelerated_vp9_decode" ] }, { "id": 225, - "description": "VPx decoding is too slow on Intel Broadwell, Skylake, and CherryTrail", + "description": "VP9 decoding is too slow on Intel Broadwell, Skylake, and CherryTrail", "cr_bugs": [616318], "os": { "type": "win" @@ -2289,12 +2290,12 @@ "cherrytrail" ], "features": [ - "disable_accelerated_vpx_decode" + "disable_accelerated_vp9_decode" ] }, { "id": 226, - "description": "Accelerated VPx decoding is hanging on some videos.", + "description": "Accelerated VP9 decoding is hanging on some videos.", "cr_bugs": [654111], "os": { "type": "win" @@ -2305,7 +2306,7 @@ "value": "21.20.16.4542" }, "features": [ - "disable_accelerated_vpx_decode" + "disable_accelerated_vp9_decode" ] }, { @@ -3468,11 +3469,16 @@ { "id": 328, "cr_bugs": [1041166], - "description": "Disable D3D11VideoDecoder due to crashes on NVIDIA", + "description": "Disable D3D11VideoDecoder due to crashes on NVIDIA on older drivers", "os": { "type": "win" }, "vendor_id": "0x10de", + "driver_version": { + "schema": "nvidia_driver", + "op": "<", + "value": "451.48" + }, "features": [ "disable_d3d11_video_decoder" ] @@ -3534,7 +3540,7 @@ { "id": 336, "cr_bugs": [625785], - "description": "DXVA video decoder crashes on some AMD GPUs", + "description": "DXVA video decoder crashes on some AMD GPUs.", "os": { "type": "win" }, @@ -3604,7 +3610,7 @@ }, { "id": 339, - "description": "NV12 textures trigger crash on Intel driver 20.19.15.*", + "description": "Array textures trigger crash on Intel driver 20.19.15.*", "cr_bugs": [971952], "os": { "type": "win", @@ -3623,12 +3629,12 @@ "value2": "20.19.15.4380" }, "features": [ - "disable_nv12_dxgi_video" + "disable_dxgi_zero_copy_video" ] }, { "id": 340, - "description": "NV12 textures trigger crash on Intel driver 10.18.15.*", + "description": "Array textures trigger crash on Intel driver 10.18.15.*", "cr_bugs": [971952], "os": { "type": "win", @@ -3647,7 +3653,50 @@ "value2": "10.18.15.4293" }, "features": [ - "disable_nv12_dxgi_video" + "disable_dxgi_zero_copy_video" + ] + }, + { + "id": 341, + "description": "Driver crash deleting FBOs on Mac Intel Broadwell", + "cr_bugs": [1090584], + "os": { + "type": "macosx" + }, + "vendor_id": "0x8086", + "intel_gpu_series": [ + "broadwell" + ], + "features": [ + "unbind_attachments_on_bound_render_fbo_delete" + ] + }, + { + "id": 342, + "description": "Driver crash deleting FBOs on Mac nVidia 600/700 series", + "cr_bugs": [1090584], + "os": { + "type": "macosx" + }, + "vendor_id": "0x10de", + "device_id": ["0x0fe9", "0x0fd5", "0x0fd8", "0x119e", "0x0fea", "0x11a2"], + "features": [ + "unbind_attachments_on_bound_render_fbo_delete" + ] + }, + { + "id": 344, + "description": "VP8 decoding crashes before Windows 10 Fall Creators Update.", + "cr_bugs": [1094840], + "os": { + "type": "win", + "version": { + "op": "<", + "value": "10.0.16299" + } + }, + "features": [ + "disable_accelerated_vp8_decode" ] } ] diff --git a/chromium/gpu/config/gpu_finch_features.cc b/chromium/gpu/config/gpu_finch_features.cc index 6728228533a..c17e656898a 100644 --- a/chromium/gpu/config/gpu_finch_features.cc +++ b/chromium/gpu/config/gpu_finch_features.cc @@ -45,12 +45,6 @@ const base::Feature kDefaultEnableOopRasterization{ "DefaultEnableOopRasterization", base::FEATURE_DISABLED_BY_DEFAULT}; #endif -// Allow putting a video swapchain underneath the main swapchain, so overlays -// can be used even if there are controls on top of the video. It can be -// enabled only when overlay is supported. -const base::Feature kDirectCompositionUnderlays{ - "DirectCompositionUnderlays", base::FEATURE_ENABLED_BY_DEFAULT}; - #if defined(OS_WIN) // Use a high priority for GPU process on Windows. const base::Feature kGpuProcessHighPriorityWin{ diff --git a/chromium/gpu/config/gpu_finch_features.h b/chromium/gpu/config/gpu_finch_features.h index f2167ba9894..e9367d82a1d 100644 --- a/chromium/gpu/config/gpu_finch_features.h +++ b/chromium/gpu/config/gpu_finch_features.h @@ -26,8 +26,6 @@ GPU_EXPORT extern const base::Feature kDefaultEnableGpuRasterization; GPU_EXPORT extern const base::Feature kDefaultEnableOopRasterization; -GPU_EXPORT extern const base::Feature kDirectCompositionUnderlays; - #if defined(OS_WIN) GPU_EXPORT extern const base::Feature kGpuProcessHighPriorityWin; #endif diff --git a/chromium/gpu/config/gpu_info.cc b/chromium/gpu/config/gpu_info.cc index 4a60da24429..6e55eae87ef 100644 --- a/chromium/gpu/config/gpu_info.cc +++ b/chromium/gpu/config/gpu_info.cc @@ -5,6 +5,7 @@ #include <stdint.h> #include "base/logging.h" +#include "base/notreached.h" #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" #include "gpu/config/gpu_info.h" #include "gpu/config/gpu_util.h" @@ -111,18 +112,6 @@ void EnumerateImageDecodeAcceleratorSupportedProfile( } #if defined(OS_WIN) -void EnumerateDx12VulkanVersionInfo(const gpu::Dx12VulkanVersionInfo& info, - gpu::GPUInfo::Enumerator* enumerator) { - enumerator->BeginDx12VulkanVersionInfo(); - enumerator->AddBool("supportsDx12", info.supports_dx12); - enumerator->AddBool("supportsVulkan", info.supports_vulkan); - enumerator->AddString("dx12FeatureLevel", - gpu::D3DFeatureLevelToString(info.d3d12_feature_level)); - enumerator->AddString("vulkanVersion", - gpu::VulkanVersionToString(info.vulkan_version)); - enumerator->EndDx12VulkanVersionInfo(); -} - void EnumerateOverlayInfo(const gpu::OverlayInfo& info, gpu::GPUInfo::Enumerator* enumerator) { enumerator->BeginOverlayInfo(); @@ -280,7 +269,8 @@ void GPUInfo::EnumerateFields(Enumerator* enumerator) const { #endif // OS_MACOSX #if defined(OS_WIN) DxDiagNode dx_diagnostics; - Dx12VulkanVersionInfo dx12_vulkan_version_info; + uint32_t d3d12_feature_level; + uint32_t vulkan_version; OverlayInfo overlay_info; #endif @@ -346,7 +336,12 @@ void GPUInfo::EnumerateFields(Enumerator* enumerator) const { // TODO(kbr): add dx_diagnostics on Windows. #if defined(OS_WIN) EnumerateOverlayInfo(overlay_info, enumerator); - EnumerateDx12VulkanVersionInfo(dx12_vulkan_version_info, enumerator); + enumerator->AddBool("supportsDx12", d3d12_feature_level != 0); + enumerator->AddBool("supportsVulkan", vulkan_version != 0); + enumerator->AddString("dx12FeatureLevel", + gpu::D3DFeatureLevelToString(d3d12_feature_level)); + enumerator->AddString("vulkanVersion", + gpu::VulkanVersionToString(vulkan_version)); #endif enumerator->AddInt("videoDecodeAcceleratorFlags", video_decode_accelerator_capabilities.flags); diff --git a/chromium/gpu/config/gpu_info.h b/chromium/gpu/config/gpu_info.h index c8e756a6781..42bb614d83b 100644 --- a/chromium/gpu/config/gpu_info.h +++ b/chromium/gpu/config/gpu_info.h @@ -23,6 +23,10 @@ #include "gpu/vulkan/buildflags.h" #include "ui/gfx/geometry/size.h" +#if defined(OS_WIN) +#include <dxgi.h> +#endif + #if BUILDFLAG(ENABLE_VULKAN) #include "gpu/config/vulkan_info.h" #endif @@ -187,29 +191,15 @@ enum class OverlaySupport { GPU_EXPORT const char* OverlaySupportToString(OverlaySupport support); -struct GPU_EXPORT Dx12VulkanVersionInfo { - bool IsEmpty() const { return !d3d12_feature_level && !vulkan_version; } - - // True if the GPU driver supports DX12. - bool supports_dx12 = false; - - // True if the GPU driver supports Vulkan. - bool supports_vulkan = false; - - // The supported d3d feature level in the gpu driver; - uint32_t d3d12_feature_level = 0; - - // The support Vulkan API version in the gpu driver; - uint32_t vulkan_version = 0; -}; - struct GPU_EXPORT OverlayInfo { OverlayInfo& operator=(const OverlayInfo& other) = default; bool operator==(const OverlayInfo& other) const { return direct_composition == other.direct_composition && supports_overlays == other.supports_overlays && yuy2_overlay_support == other.yuy2_overlay_support && - nv12_overlay_support == other.nv12_overlay_support; + nv12_overlay_support == other.nv12_overlay_support && + bgra8_overlay_support == other.bgra8_overlay_support && + rgb10a2_overlay_support == other.rgb10a2_overlay_support; } bool operator!=(const OverlayInfo& other) const { return !(*this == other); } @@ -220,6 +210,8 @@ struct GPU_EXPORT OverlayInfo { bool supports_overlays = false; OverlaySupport yuy2_overlay_support = OverlaySupport::kNone; OverlaySupport nv12_overlay_support = OverlaySupport::kNone; + OverlaySupport bgra8_overlay_support = OverlaySupport::kNone; + OverlaySupport rgb10a2_overlay_support = OverlaySupport::kNone; }; #endif @@ -251,10 +243,19 @@ struct GPU_EXPORT GPUInfo { // The graphics card revision number. uint32_t revision = 0u; + + // The graphics card LUID. This is a unique identifier for the graphics card + // that is guaranteed to be unique until the computer is restarted. The LUID + // is used over the vendor id and device id because the device id is only + // unique relative its vendor, not to each other. If there are more than one + // of the same exact graphics card, they all have the same vendor id and + // device id but different LUIDs. + LUID luid; #endif // OS_WIN // Whether this GPU is the currently used one. - // Currently this field is only supported and meaningful on OS X. + // Currently this field is only supported and meaningful on OS X and on + // Windows using Angle with D3D11. bool active = false; // The strings that describe the GPU. @@ -378,7 +379,11 @@ struct GPU_EXPORT GPUInfo { // The information returned by the DirectX Diagnostics Tool. DxDiagNode dx_diagnostics; - Dx12VulkanVersionInfo dx12_vulkan_version_info; + // The supported d3d feature level in the gpu driver; + uint32_t d3d12_feature_level = 0; + + // The support Vulkan API version in the gpu driver; + uint32_t vulkan_version = 0; // The GPU hardware overlay info. OverlayInfo overlay_info; @@ -446,9 +451,6 @@ struct GPU_EXPORT GPUInfo { virtual void BeginAuxAttributes() = 0; virtual void EndAuxAttributes() = 0; - virtual void BeginDx12VulkanVersionInfo() = 0; - virtual void EndDx12VulkanVersionInfo() = 0; - virtual void BeginOverlayInfo() = 0; virtual void EndOverlayInfo() = 0; diff --git a/chromium/gpu/config/gpu_info_collector.cc b/chromium/gpu/config/gpu_info_collector.cc index 66e061f6020..cfdcdcaf632 100644 --- a/chromium/gpu/config/gpu_info_collector.cc +++ b/chromium/gpu/config/gpu_info_collector.cc @@ -344,7 +344,14 @@ bool CollectGraphicsInfoGL(GPUInfo* gpu_info) { gpu_info->pixel_shader_version = glsl_version; gpu_info->vertex_shader_version = glsl_version; - IdentifyActiveGPU(gpu_info); + bool active_gpu_identified = false; +#if defined(OS_WIN) + active_gpu_identified = IdentifyActiveGPUWithLuid(gpu_info); +#endif // OS_WIN + + if (!active_gpu_identified) + IdentifyActiveGPU(gpu_info); + return true; } diff --git a/chromium/gpu/config/gpu_info_collector.h b/chromium/gpu/config/gpu_info_collector.h index b2423096815..dfa92445ebb 100644 --- a/chromium/gpu/config/gpu_info_collector.h +++ b/chromium/gpu/config/gpu_info_collector.h @@ -45,8 +45,11 @@ GPU_EXPORT bool CollectContextGraphicsInfo(GPUInfo* gpu_info); #if defined(OS_WIN) // Collect the DirectX Disagnostics information about the attached displays. GPU_EXPORT bool GetDxDiagnostics(DxDiagNode* output); -GPU_EXPORT void RecordGpuSupportedRuntimeVersionHistograms( - Dx12VulkanVersionInfo* dx12_vulkan_version_info); +GPU_EXPORT uint32_t GetGpuSupportedD3D12Version(); +GPU_EXPORT void RecordGpuSupportedDx12VersionHistograms( + uint32_t d3d12_feature_level); +GPU_EXPORT uint32_t +GetGpuSupportedVulkanVersion(const gpu::GPUInfo::GPUDevice& gpu_device); // Iterate through all adapters and create a hardware D3D11 device on each // adapter. If succeeded, query the highest feature level it supports and @@ -59,6 +62,9 @@ GPU_EXPORT bool CollectD3D11FeatureInfo(D3D_FEATURE_LEVEL* d3d11_feature_level, // Collect the hardware overlay support flags. GPU_EXPORT void CollectHardwareOverlayInfo(OverlayInfo* overlay_info); + +// Identify the active GPU based on LUIDs. +bool IdentifyActiveGPUWithLuid(GPUInfo* gpu_info); #endif // OS_WIN // Create a GL context and collect GL strings and versions. diff --git a/chromium/gpu/config/gpu_info_collector_win.cc b/chromium/gpu/config/gpu_info_collector_win.cc index f70d2abe277..f43a7e9ad8a 100644 --- a/chromium/gpu/config/gpu_info_collector_win.cc +++ b/chromium/gpu/config/gpu_info_collector_win.cc @@ -35,6 +35,8 @@ #include "gpu/config/gpu_util.h" #include "third_party/vulkan_headers/include/vulkan/vulkan.h" #include "ui/gl/direct_composition_surface_win.h" +#include "ui/gl/gl_angle_util_win.h" +#include "ui/gl/gl_surface_egl.h" namespace gpu { @@ -83,6 +85,32 @@ OverlaySupport FlagsToOverlaySupport(bool overlays_supported, UINT flags) { return OverlaySupport::kNone; } +bool GetActiveAdapterLuid(LUID* luid) { + Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device = + gl::QueryD3D11DeviceObjectFromANGLE(); + if (!d3d11_device) + return false; + + Microsoft::WRL::ComPtr<IDXGIDevice> dxgi_device; + if (FAILED(d3d11_device.As(&dxgi_device))) + return false; + + Microsoft::WRL::ComPtr<IDXGIAdapter> adapter; + if (FAILED(dxgi_device->GetAdapter(&adapter))) + return false; + + DXGI_ADAPTER_DESC desc; + if (FAILED(adapter->GetDesc(&desc))) + return false; + + // Zero isn't a valid LUID. + if (desc.AdapterLuid.HighPart == 0 && desc.AdapterLuid.LowPart == 0) + return false; + + *luid = desc.AdapterLuid; + return true; +} + } // namespace #if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OFFICIAL_BUILD) @@ -118,14 +146,22 @@ void CollectHardwareOverlayInfo(OverlayInfo* overlay_info) { overlay_info->supports_overlays, gl::DirectCompositionSurfaceWin::GetOverlaySupportFlags( DXGI_FORMAT_YUY2)); + overlay_info->bgra8_overlay_support = FlagsToOverlaySupport( + overlay_info->supports_overlays, + gl::DirectCompositionSurfaceWin::GetOverlaySupportFlags( + DXGI_FORMAT_B8G8R8A8_UNORM)); + overlay_info->rgb10a2_overlay_support = FlagsToOverlaySupport( + overlay_info->supports_overlays, + gl::DirectCompositionSurfaceWin::GetOverlaySupportFlags( + DXGI_FORMAT_R10G10B10A2_UNORM)); } } bool CollectDriverInfoD3D(GPUInfo* gpu_info) { TRACE_EVENT0("gpu", "CollectDriverInfoD3D"); - Microsoft::WRL::ComPtr<IDXGIFactory> dxgi_factory; - HRESULT hr = ::CreateDXGIFactory(IID_PPV_ARGS(&dxgi_factory)); + Microsoft::WRL::ComPtr<IDXGIFactory1> dxgi_factory; + HRESULT hr = ::CreateDXGIFactory1(IID_PPV_ARGS(&dxgi_factory)); if (FAILED(hr)) return false; @@ -144,6 +180,7 @@ bool CollectDriverInfoD3D(GPUInfo* gpu_info) { device.device_id = desc.DeviceId; device.sub_sys_id = desc.SubSysId; device.revision = desc.Revision; + device.luid = desc.AdapterLuid; LARGE_INTEGER umd_version; hr = dxgi_adapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), @@ -199,15 +236,13 @@ bool CollectDriverInfoD3D(GPUInfo* gpu_info) { } // DirectX 12 are included with Windows 10 and Server 2016. -void GetGpuSupportedD3D12Version(Dx12VulkanVersionInfo* info) { +uint32_t GetGpuSupportedD3D12Version() { TRACE_EVENT0("gpu", "GetGpuSupportedD3D12Version"); - info->supports_dx12 = false; - info->d3d12_feature_level = 0; base::ScopedNativeLibrary d3d12_library( base::FilePath(FILE_PATH_LITERAL("d3d12.dll"))); if (!d3d12_library.is_valid()) - return; + return 0; // The order of feature levels to attempt to create in D3D CreateDevice const D3D_FEATURE_LEVEL feature_levels[] = { @@ -224,14 +259,19 @@ void GetGpuSupportedD3D12Version(Dx12VulkanVersionInfo* info) { for (auto level : feature_levels) { if (SUCCEEDED(D3D12CreateDevice(nullptr, level, _uuidof(ID3D12Device), nullptr))) { - info->d3d12_feature_level = level; - info->supports_dx12 = (level >= D3D_FEATURE_LEVEL_12_0) ? true : false; - break; + return level; } } } + return 0; } +// The old graphics drivers are installed to the Windows system directory +// c:\windows\system32 or SysWOW64. Those versions can be detected without +// specifying the absolute directory. For a newer version (>= ~2018), this won't +// work. The newer graphics drivers are located in +// c:\windows\system32\DriverStore\FileRepository\xxx.infxxx which contains a +// different number at each installation bool BadAMDVulkanDriverVersion() { // Both 32-bit and 64-bit dll are broken. If 64-bit doesn't exist, // 32-bit dll will be used to detect the AMD Vulkan driver. @@ -260,6 +300,31 @@ bool BadAMDVulkanDriverVersion() { return false; } +// Vulkan 1.1 was released by the Khronos Group on March 7, 2018. +// Blacklist all driver versions without Vulkan 1.1 support and those that cause +// lots of crashes. +bool BadGraphicsDriverVersions(const gpu::GPUInfo::GPUDevice& gpu_device) { + // GPU Device info is not available in gpu_integration_test.info-collection + // with --no-delay-for-dx12-vulkan-info-collection. + if (gpu_device.driver_version.empty()) + return false; + + base::Version driver_version(gpu_device.driver_version); + if (!driver_version.IsValid()) + return true; + + // AMD Vulkan drivers - amdvlk64.dll + constexpr uint32_t kAMDVendorId = 0x1002; + if (gpu_device.vendor_id == kAMDVendorId) { + // 26.20.12028.2 (2019)- number of crashes 1,188,048 as of 5/14/2020. + // Returns -1, 0, 1 for <, ==, >. + if (driver_version.CompareTo(base::Version("26.20.12028.2")) == 0) + return true; + } + + return false; +} + bool InitVulkan(base::NativeLibrary* vulkan_library, PFN_vkGetInstanceProcAddr* vkGetInstanceProcAddr, PFN_vkCreateInstance* vkCreateInstance, @@ -340,11 +405,9 @@ bool InitVulkanInstanceProc( return false; } -void GetGpuSupportedVulkanVersionAndExtensions( - Dx12VulkanVersionInfo* info, - const std::vector<const char*>& requested_vulkan_extensions, - std::vector<bool>* extension_support) { - TRACE_EVENT0("gpu", "GetGpuSupportedVulkanVersionAndExtensions"); +uint32_t GetGpuSupportedVulkanVersion( + const gpu::GPUInfo::GPUDevice& gpu_device) { + TRACE_EVENT0("gpu", "GetGpuSupportedVulkanVersion"); base::NativeLibrary vulkan_library; PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; @@ -353,20 +416,26 @@ void GetGpuSupportedVulkanVersionAndExtensions( PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; VkInstance vk_instance = VK_NULL_HANDLE; uint32_t physical_device_count = 0; - info->supports_vulkan = false; - info->vulkan_version = 0; // Skip if the system has an older AMD Vulkan driver amdvlk64.dll or // amdvlk32.dll which crashes when vkCreateInstance() is called. This bug has // been fixed in the latest AMD driver. + // Detected by the file version of amdvlk64.dll. if (BadAMDVulkanDriverVersion()) { - return; + return 0; } + // Don't collect any info if the graphics vulkan driver is blacklisted or + // doesn't support Vulkan 1.1 + // Detected by the graphic driver version returned by DXGI + if (BadGraphicsDriverVersions(gpu_device)) + return 0; + // Only supports a version >= 1.1.0. + uint32_t vulkan_version = 0; if (!InitVulkan(&vulkan_library, &vkGetInstanceProcAddr, &vkCreateInstance, - &info->vulkan_version)) { - return; + &vulkan_version)) { + return 0; } VkApplicationInfo app_info = {}; @@ -382,7 +451,7 @@ void GetGpuSupportedVulkanVersionAndExtensions( create_info.ppEnabledExtensionNames = enabled_instance_extensions.data(); // Get the Vulkan API version supported in the GPU driver - int highest_minor_version = VK_VERSION_MINOR(info->vulkan_version); + int highest_minor_version = VK_VERSION_MINOR(vulkan_version); for (int minor_version = highest_minor_version; minor_version >= 1; --minor_version) { app_info.apiVersion = VK_MAKE_VERSION(1, minor_version, 0); @@ -394,9 +463,7 @@ void GetGpuSupportedVulkanVersionAndExtensions( result = vkEnumeratePhysicalDevices(vk_instance, &physical_device_count, nullptr); if (result == VK_SUCCESS && physical_device_count > 0) { - info->supports_vulkan = true; - info->vulkan_version = app_info.apiVersion; - break; + return app_info.apiVersion; } else { // Skip destroy here. GPU process shutdown will unload all loaded DLLs. // vkDestroyInstance(vk_instance, nullptr); @@ -405,37 +472,6 @@ void GetGpuSupportedVulkanVersionAndExtensions( } } - // Check whether the requested_vulkan_extensions are supported - if (info->supports_vulkan) { - std::vector<VkPhysicalDevice> physical_devices(physical_device_count); - vkEnumeratePhysicalDevices(vk_instance, &physical_device_count, - physical_devices.data()); - - // physical_devices[0]: Only query the default device for now - uint32_t property_count; - vkEnumerateDeviceExtensionProperties(physical_devices[0], nullptr, - &property_count, nullptr); - - std::vector<VkExtensionProperties> extension_properties(property_count); - if (property_count > 0) { - vkEnumerateDeviceExtensionProperties(physical_devices[0], nullptr, - &property_count, - extension_properties.data()); - } - - for (size_t i = 0; i < requested_vulkan_extensions.size(); ++i) { - for (size_t p = 0; p < property_count; ++p) { - if (strcmp(requested_vulkan_extensions[i], - extension_properties[p].extensionName) == 0) { - (*extension_support)[i] = true; - break; - } - } - } - } else { - info->vulkan_version = VK_MAKE_VERSION(1, 0, 0); - } - // From the crash reports, calling the following two functions might cause a // crash in the Vulkan loader or in the Vulkan driver. To work around it, // don't explicitly unload the DLL. Instead, GPU process shutdown will unload @@ -444,40 +480,22 @@ void GetGpuSupportedVulkanVersionAndExtensions( // vkDestroyInstance(vk_instance, nullptr); // } // base::UnloadNativeLibrary(vulkan_library); + return 0; } -void RecordGpuSupportedRuntimeVersionHistograms(Dx12VulkanVersionInfo* info) { - // D3D - GetGpuSupportedD3D12Version(info); - UMA_HISTOGRAM_BOOLEAN("GPU.SupportsDX12", info->supports_dx12); +void RecordGpuSupportedDx12VersionHistograms(uint32_t d3d12_feature_level) { + bool supports_dx12 = + (d3d12_feature_level >= D3D_FEATURE_LEVEL_12_0) ? true : false; + UMA_HISTOGRAM_BOOLEAN("GPU.SupportsDX12", supports_dx12); UMA_HISTOGRAM_ENUMERATION( "GPU.D3D12FeatureLevel", - ConvertToHistogramFeatureLevel(info->d3d12_feature_level)); - - // Vulkan - const std::vector<const char*> vulkan_extensions = { - "VK_KHR_external_memory_win32", "VK_KHR_external_semaphore_win32", - "VK_KHR_win32_keyed_mutex"}; - std::vector<bool> extension_support(vulkan_extensions.size(), false); - GetGpuSupportedVulkanVersionAndExtensions(info, vulkan_extensions, - &extension_support); - - UMA_HISTOGRAM_BOOLEAN("GPU.SupportsVulkan", info->supports_vulkan); - UMA_HISTOGRAM_ENUMERATION( - "GPU.VulkanVersion", - ConvertToHistogramVulkanVersion(info->vulkan_version)); - - for (size_t i = 0; i < vulkan_extensions.size(); ++i) { - std::string name = "GPU.VulkanExtSupport."; - name.append(vulkan_extensions[i]); - base::UmaHistogramBoolean(name, extension_support[i]); - } + ConvertToHistogramFeatureLevel(d3d12_feature_level)); } bool CollectD3D11FeatureInfo(D3D_FEATURE_LEVEL* d3d11_feature_level, bool* has_discrete_gpu) { - Microsoft::WRL::ComPtr<IDXGIFactory> dxgi_factory; - if (FAILED(::CreateDXGIFactory(IID_PPV_ARGS(&dxgi_factory)))) + Microsoft::WRL::ComPtr<IDXGIFactory1> dxgi_factory; + if (FAILED(::CreateDXGIFactory1(IID_PPV_ARGS(&dxgi_factory)))) return false; base::ScopedNativeLibrary d3d11_library( @@ -614,4 +632,30 @@ bool CollectBasicGraphicsInfo(GPUInfo* gpu_info) { return CollectDriverInfoD3D(gpu_info); } +bool IdentifyActiveGPUWithLuid(GPUInfo* gpu_info) { + LUID luid; + if (!GetActiveAdapterLuid(&luid)) + return false; + + gpu_info->gpu.active = false; + for (size_t i = 0; i < gpu_info->secondary_gpus.size(); i++) + gpu_info->secondary_gpus[i].active = false; + + if (gpu_info->gpu.luid.HighPart == luid.HighPart && + gpu_info->gpu.luid.LowPart == luid.LowPart) { + gpu_info->gpu.active = true; + return true; + } + + for (size_t i = 0; i < gpu_info->secondary_gpus.size(); i++) { + if (gpu_info->secondary_gpus[i].luid.HighPart == luid.HighPart && + gpu_info->secondary_gpus[i].luid.LowPart == luid.LowPart) { + gpu_info->secondary_gpus[i].active = true; + return true; + } + } + + return false; +} + } // namespace gpu diff --git a/chromium/gpu/config/gpu_info_unittest.cc b/chromium/gpu/config/gpu_info_unittest.cc index 13bb5d38eff..3bd092c8fdc 100644 --- a/chromium/gpu/config/gpu_info_unittest.cc +++ b/chromium/gpu/config/gpu_info_unittest.cc @@ -16,7 +16,6 @@ class TestGPUInfoEnumerator : public gpu::GPUInfo::Enumerator { video_decode_accelerator_profile_active_(false), video_encode_accelerator_profile_active_(false), image_decode_accelerator_profile_active_(false), - dx12_vulkan_version_info_active_(false), overlay_info_active_(false), aux_attributes_active_(false) {} @@ -63,14 +62,6 @@ class TestGPUInfoEnumerator : public gpu::GPUInfo::Enumerator { image_decode_accelerator_profile_active_ = false; } - void BeginDx12VulkanVersionInfo() override { - dx12_vulkan_version_info_active_ = true; - } - - void EndDx12VulkanVersionInfo() override { - dx12_vulkan_version_info_active_ = false; - } - void BeginOverlayInfo() override { overlay_info_active_ = true; } void EndOverlayInfo() override { overlay_info_active_ = false; } @@ -94,10 +85,6 @@ class TestGPUInfoEnumerator : public gpu::GPUInfo::Enumerator { return image_decode_accelerator_profile_active_; } - bool dx12_vulkan_version_info_active() const { - return dx12_vulkan_version_info_active_; - } - bool aux_attributes_active() const { return aux_attributes_active_; } private: @@ -105,7 +92,6 @@ class TestGPUInfoEnumerator : public gpu::GPUInfo::Enumerator { bool video_decode_accelerator_profile_active_; bool video_encode_accelerator_profile_active_; bool image_decode_accelerator_profile_active_; - bool dx12_vulkan_version_info_active_; bool overlay_info_active_; bool aux_attributes_active_; }; @@ -121,7 +107,6 @@ TEST(GpuInfoTest, FieldEditStates) { EXPECT_FALSE(enumerator.video_decode_accelerator_profile_active()); EXPECT_FALSE(enumerator.video_encode_accelerator_profile_active()); EXPECT_FALSE(enumerator.image_decode_accelerator_profile_active()); - EXPECT_FALSE(enumerator.dx12_vulkan_version_info_active()); EXPECT_FALSE(enumerator.aux_attributes_active()); } diff --git a/chromium/gpu/config/gpu_lists_version.h b/chromium/gpu/config/gpu_lists_version.h index 7fa92c79085..1dd6f587fda 100644 --- a/chromium/gpu/config/gpu_lists_version.h +++ b/chromium/gpu/config/gpu_lists_version.h @@ -3,6 +3,6 @@ #ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_ #define GPU_CONFIG_GPU_LISTS_VERSION_H_ -#define GPU_LISTS_VERSION "80c974bf7990b9735a8e885046fc5c9b1da4796c" +#define GPU_LISTS_VERSION "59840fa678c084e98201a428c7db996326e0c749" #endif // GPU_CONFIG_GPU_LISTS_VERSION_H_ diff --git a/chromium/gpu/config/gpu_preferences_unittest.cc b/chromium/gpu/config/gpu_preferences_unittest.cc index f2e0078f182..3cc5ecc9b74 100644 --- a/chromium/gpu/config/gpu_preferences_unittest.cc +++ b/chromium/gpu/config/gpu_preferences_unittest.cc @@ -5,8 +5,10 @@ #include <algorithm> #include <cstring> +#include "base/command_line.h" #include "base/message_loop/message_pump_type.h" #include "build/build_config.h" +#include "gpu/config/gpu_switches.h" #include "gpu/ipc/common/gpu_preferences.mojom.h" #include "testing/gtest/include/gtest/gtest.h" @@ -166,8 +168,7 @@ TEST(GpuPreferencesTest, EncodeDecode) { GPU_PREFERENCES_FIELD(enable_oop_rasterization, true) GPU_PREFERENCES_FIELD(disable_oop_rasterization, true) GPU_PREFERENCES_FIELD(watchdog_starts_backgrounded, true) - GPU_PREFERENCES_FIELD_ENUM(gr_context_type, - GrContextType::kVulkan, + GPU_PREFERENCES_FIELD_ENUM(gr_context_type, GrContextType::kVulkan, mojom::GrContextType::kVulkan) GPU_PREFERENCES_FIELD_ENUM(use_vulkan, VulkanImplementationName::kNative, mojom::VulkanImplementationName::kNative) @@ -196,4 +197,84 @@ TEST(GpuPreferencesTest, EncodeDecode) { } } +// Helper test for decoding GPU preferences from a crash dump string. +TEST(GpuPreferencesTest, DISABLED_DecodePreferences) { + auto* command_line = base::CommandLine::ForCurrentProcess(); + if (!command_line->HasSwitch(switches::kGpuPreferences)) { + LOG(ERROR) << "Please specify the preferences to decode via " + << switches::kGpuPreferences; + return; + } + + const auto preferences = + command_line->GetSwitchValueASCII(switches::kGpuPreferences); + + gpu::GpuPreferences gpu_preferences; + if (!gpu_preferences.FromSwitchValue(preferences)) { + LOG(ERROR) << "Failed to decode preferences: " << preferences; + return; + } + + printf("GpuPreferences = {\n"); +#define PRINT_BOOL(key) \ + printf(" %s: %s\n", #key, gpu_preferences.key ? "true" : "false") +#define PRINT_INT(key) \ + printf(" %s: %d\n", #key, static_cast<uint32_t>(gpu_preferences.key)) + + PRINT_BOOL(disable_accelerated_video_decode); + PRINT_BOOL(disable_accelerated_video_encode); + PRINT_BOOL(gpu_startup_dialog); + PRINT_BOOL(disable_gpu_watchdog); + PRINT_BOOL(gpu_sandbox_start_early); + PRINT_BOOL(enable_low_latency_dxva); + PRINT_BOOL(enable_zero_copy_dxgi_video); + PRINT_BOOL(enable_nv12_dxgi_video); + PRINT_BOOL(enable_media_foundation_vea_on_windows7); + PRINT_BOOL(disable_software_rasterizer); + PRINT_BOOL(log_gpu_control_list_decisions); + PRINT_BOOL(compile_shader_always_succeeds); + PRINT_BOOL(disable_gl_error_limit); + PRINT_BOOL(disable_glsl_translator); + PRINT_BOOL(disable_shader_name_hashing); + PRINT_BOOL(enable_gpu_command_logging); + PRINT_BOOL(enable_gpu_debugging); + PRINT_BOOL(enable_gpu_service_logging_gpu); + PRINT_BOOL(enable_gpu_driver_debug_logging); + PRINT_BOOL(disable_gpu_program_cache); + PRINT_BOOL(enforce_gl_minimums); + PRINT_INT(force_gpu_mem_available_bytes); + PRINT_INT(force_gpu_mem_discardable_limit_bytes); + PRINT_INT(gpu_program_cache_size); + PRINT_BOOL(disable_gpu_shader_disk_cache); + PRINT_BOOL(enable_threaded_texture_mailboxes); + PRINT_BOOL(gl_shader_interm_output); + PRINT_BOOL(emulate_shader_precision); + PRINT_BOOL(enable_gpu_service_logging); + PRINT_BOOL(enable_gpu_service_tracing); + PRINT_BOOL(use_passthrough_cmd_decoder); + PRINT_BOOL(disable_biplanar_gpu_memory_buffers_for_video_frames); + for (size_t i = 0; i < gpu_preferences.texture_target_exception_list.size(); + ++i) { + PRINT_INT(texture_target_exception_list[i].usage); + PRINT_INT(texture_target_exception_list[i].format); + } + PRINT_BOOL(ignore_gpu_blacklist); + PRINT_BOOL(enable_oop_rasterization); + PRINT_BOOL(disable_oop_rasterization); + PRINT_BOOL(watchdog_starts_backgrounded); + PRINT_INT(gr_context_type); + PRINT_INT(use_vulkan); + PRINT_BOOL(enable_gpu_benchmarking_extension); + PRINT_BOOL(enable_webgpu); + PRINT_BOOL(enable_dawn_backend_validation); + PRINT_BOOL(enable_gpu_blocked_time_metric); + PRINT_BOOL(enable_perf_data_collection); +#if defined(USE_OZONE) + PRINT_INT(message_pump_type); +#endif + PRINT_BOOL(enable_native_gpu_memory_buffers); + PRINT_BOOL(force_disable_new_accelerated_video_decoder); + printf("}\n"); +} + } // namespace gpu diff --git a/chromium/gpu/config/gpu_switches.cc b/chromium/gpu/config/gpu_switches.cc index c44e30735c0..301e97583d0 100644 --- a/chromium/gpu/config/gpu_switches.cc +++ b/chromium/gpu/config/gpu_switches.cc @@ -14,7 +14,7 @@ const char kDisableGpuRasterization[] = "disable-gpu-rasterization"; // Skia GPU backend. Only valid with GPU accelerated compositing. const char kEnableGpuRasterization[] = "enable-gpu-rasterization"; -// Select a different set of GPU blacklist entries with the specificed +// Select a different set of GPU blacklist entries with the specified // test_group ID. const char kGpuBlacklistTestGroup[] = "gpu-blacklist-test-group"; diff --git a/chromium/gpu/config/gpu_util.cc b/chromium/gpu/config/gpu_util.cc index d5517a075ff..066cef555d2 100644 --- a/chromium/gpu/config/gpu_util.cc +++ b/chromium/gpu/config/gpu_util.cc @@ -20,6 +20,7 @@ #include "base/command_line.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" +#include "base/notreached.h" #include "base/path_service.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" @@ -170,6 +171,15 @@ GpuFeatureStatus GetGpuRasterizationFeatureStatus( if (blacklisted_features.count(GPU_FEATURE_TYPE_GPU_RASTERIZATION)) return kGpuFeatureStatusBlacklisted; + // Enable gpu rasterization for vulkan, unless it is overridden by + // commandline. + if (base::FeatureList::IsEnabled(features::kVulkan) && + !base::FeatureList::GetInstance()->IsFeatureOverriddenFromCommandLine( + features::kDefaultEnableGpuRasterization.name, + base::FeatureList::OVERRIDE_DISABLE_FEATURE)) { + return kGpuFeatureStatusEnabled; + } + // Gpu Rasterization on platforms that are not fully enabled is controlled by // a finch experiment. if (!base::FeatureList::IsEnabled(features::kDefaultEnableGpuRasterization)) @@ -207,11 +217,14 @@ GpuFeatureStatus GetOopRasterizationFeatureStatus( else if (gpu_preferences.enable_oop_rasterization) return kGpuFeatureStatusEnabled; - // TODO(enne): Eventually oop rasterization will replace gpu rasterization, - // and so we will need to address the underlying bugs or turn of GPU - // rasterization for these cases. - if (blacklisted_features.count(GPU_FEATURE_TYPE_OOP_RASTERIZATION)) - return kGpuFeatureStatusBlacklisted; + // Enable OOP rasterization for vulkan, unless it is overridden by + // commandline. + if (base::FeatureList::IsEnabled(features::kVulkan) && + !base::FeatureList::GetInstance()->IsFeatureOverriddenFromCommandLine( + features::kDefaultEnableOopRasterization.name, + base::FeatureList::OVERRIDE_DISABLE_FEATURE)) { + return kGpuFeatureStatusEnabled; + } // OOP Rasterization on platforms that are not fully enabled is controlled by // a finch experiment. @@ -1021,21 +1034,4 @@ std::string VulkanVersionToString(uint32_t vulkan_version) { } } #endif // OS_WIN - -VulkanVersion ConvertToHistogramVulkanVersion(uint32_t vulkan_version) { - if (vulkan_version < VK_MAKE_VERSION(1, 0, 0)) - return VulkanVersion::kVulkanVersionUnknown; - else if (vulkan_version < VK_MAKE_VERSION(1, 1, 0)) - return VulkanVersion::kVulkanVersion_1_0_0; - else if (vulkan_version < VK_MAKE_VERSION(1, 2, 0)) - return VulkanVersion::kVulkanVersion_1_1_0; - else if (vulkan_version < VK_MAKE_VERSION(1, 3, 0)) - return VulkanVersion::kVulkanVersion_1_2_0; - else { - // Need to add 1.3.0+ to enum VulkanVersion. - NOTREACHED(); - return VulkanVersion::kVulkanVersion_1_2_0; - } -} - } // namespace gpu diff --git a/chromium/gpu/config/gpu_util.h b/chromium/gpu/config/gpu_util.h index b4086559520..22ba88d991f 100644 --- a/chromium/gpu/config/gpu_util.h +++ b/chromium/gpu/config/gpu_util.h @@ -97,20 +97,6 @@ GPU_EXPORT std::string D3DFeatureLevelToString(uint32_t d3d_feature_level); GPU_EXPORT std::string VulkanVersionToString(uint32_t vulkan_version); #endif // OS_WIN -// These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. -// This should match enum VulkanVersion in \tools\metrics\histograms\enums.xml -enum class VulkanVersion { - kVulkanVersionUnknown = 0, - kVulkanVersion_1_0_0 = 1, - kVulkanVersion_1_1_0 = 2, - kVulkanVersion_1_2_0 = 3, - kMaxValue = kVulkanVersion_1_2_0, -}; - -GPU_EXPORT VulkanVersion -ConvertToHistogramVulkanVersion(uint32_t vulkan_version); - } // namespace gpu #endif // GPU_CONFIG_GPU_UTIL_H_ diff --git a/chromium/gpu/config/gpu_workaround_list.txt b/chromium/gpu/config/gpu_workaround_list.txt index fd5b9bb5e2a..5edf0d7b0ca 100644 --- a/chromium/gpu/config/gpu_workaround_list.txt +++ b/chromium/gpu/config/gpu_workaround_list.txt @@ -12,7 +12,9 @@ count_all_in_varyings_packing decode_encode_srgb_for_generatemipmap depth_stencil_renderbuffer_resize_emulation disable_2d_canvas_auto_flush -disable_accelerated_vpx_decode +disable_accelerated_av1_decode +disable_accelerated_vp8_decode +disable_accelerated_vp9_decode disable_async_readpixels disable_av_sample_buffer_display_layer disable_blend_equation_advanced @@ -118,6 +120,7 @@ use_es2_for_oopr use_gpu_driver_workaround_for_testing use_intermediary_for_copy_texture_image use_non_zero_size_for_client_side_stream_buffers +use_single_video_decoder_texture use_unused_standard_shared_blocks use_virtualized_gl_contexts validate_multisample_buffer_allocation diff --git a/chromium/gpu/config/process_json.py b/chromium/gpu/config/process_json.py index 1ec57b6a483..31c53351a3d 100755 --- a/chromium/gpu/config/process_json.py +++ b/chromium/gpu/config/process_json.py @@ -56,6 +56,16 @@ Legal: "24.20.100.7000", "0.0.100.7000", "0.0.0.7000", "0.0.100.0" Illegal: "24.0.0.0", "24.20.0.0", "0.0.99.0" ''' +NVIDIA_DRIVER_VERSION_SCHEMA = ''' +The version format used by Nvidia is ABC.DE, where A-E are any digit. When +queried by Chrome, it will detect XX.XX.XXXA.BCDE, where 'X' is any digit and +can be ignored. Chrome will re-format this to ABC.DE, and compare to the +version listed here. + +So, Chrome might detect 26.21.0014.4575, which would be given here as 445.75 in +the Nvidia version schema. The 26.21.001 is ignored. +''' + def check_intel_driver_version(version): ver_list = version.split('.') @@ -68,6 +78,20 @@ def check_intel_driver_version(version): return False return True +def check_nvidia_driver_version(version): + ver_list = version.split('.') + # Allow "456" to match "456.*", so allow a single-entry list. + if len(ver_list) == 0 or len(ver_list) > 2: + return False; + elif len(ver_list) == 2 and len(ver_list[1]) != 2: + return False + # Must start with three digits, whether it's "456.*" or "456.78". + if len(ver_list[0]) != 3: + return False + for ver in ver_list: + if not ver.isdigit(): + return False + return True def load_software_rendering_list_features(feature_type_filename): header_file = open(feature_type_filename, 'r') @@ -236,6 +260,7 @@ def write_version(version_info, name_tag, data_file): schema_map = { 'common': 'Common', 'intel_driver': 'IntelDriver', + 'nvidia_driver': 'NvidiaDriver', '': 'Common', } assert schema in schema_map @@ -299,9 +324,48 @@ def write_string_value(string, name_tag, data_file): def write_boolean_value(value, name_tag, data_file): data_file.write('%s, // %s\n' % (str(value).lower(), name_tag)) + def write_integer_value(value, name_tag, data_file): data_file.write('%s, // %s\n' % (str(value), name_tag)) + +def write_device_list(entry_id, device_id, device_revision, is_exception, + exception_id, unique_symbol_id, data_file, + data_helper_file): + if device_id: + # It's one of the three ways to specify devices: + # 1) only specify device IDs + # 2) specify one device ID, associated with multiple revisions + # 3) specify k device IDs associated with k device revisions. + device_size = len(device_id) + if device_size == 1 and device_revision and len(device_revision) > 1: + device_size = len(device_revision) + for ii in range(device_size - 1): + device_id.append(device_id[0]) + if device_revision is None: + device_revision = [] + for ii in range(device_size): + device_revision.append('0x0') + assert len(device_id) == len(device_revision) + var_name = 'kDevicesFor%sEntry%d' % (unique_symbol_id, entry_id) + if is_exception: + var_name += 'Exception' + str(exception_id) + # define the list + data_helper_file.write('const GpuControlList::Device %s[%d] = {\n' % + (var_name, len(device_id))) + for ii in range(device_size): + data_helper_file.write('{%s, %s},\n' % + (device_id[ii], device_revision[ii])) + data_helper_file.write('};\n\n') + # reference the list + data_file.write('base::size(%s), // Devices size\n' % var_name) + data_file.write('%s, // Devices\n' % var_name) + else: + assert not device_revision + data_file.write('0, // Devices size\n') + data_file.write('nullptr, // Devices\n') + + def write_machine_model_info(entry_id, is_exception, exception_id, machine_model_name, machine_model_version, data_file, data_helper_file): @@ -348,55 +412,56 @@ def write_os_type(os_type, data_file): def write_multi_gpu_category(multi_gpu_category, data_file): - map = { + suffix_for_category = { 'primary': 'Primary', 'secondary': 'Secondary', 'active': 'Active', 'any': 'Any', '': 'None', } - assert multi_gpu_category in map + assert multi_gpu_category in suffix_for_category data_file.write( 'GpuControlList::kMultiGpuCategory%s, // multi_gpu_category\n' % - map[multi_gpu_category]) + suffix_for_category[multi_gpu_category]) def write_multi_gpu_style(multi_gpu_style, data_file): - map = { + suffix_for_style = { 'optimus': 'Optimus', 'amd_switchable': 'AMDSwitchable', 'amd_switchable_discrete': 'AMDSwitchableDiscrete', 'amd_switchable_integrated': 'AMDSwitchableIntegrated', '': 'None', } - assert multi_gpu_style in map + assert multi_gpu_style in suffix_for_style data_file.write( 'GpuControlList::kMultiGpuStyle%s, // multi_gpu_style\n' % - map[multi_gpu_style]) + suffix_for_style[multi_gpu_style]) def write_gl_type(gl_type, data_file): - map = { + suffix_for_type = { 'gl': 'GL', 'gles': 'GLES', 'angle': 'ANGLE', '': 'None', } - assert gl_type in map - data_file.write('GpuControlList::kGLType%s, // gl_type\n' % map[gl_type]) + assert gl_type in suffix_for_type + data_file.write('GpuControlList::kGLType%s, // gl_type\n' % + suffix_for_type[gl_type]) def write_supported_or_not(feature_value, feature_name, data_file): if feature_value is None: feature_value = 'dont_care' - map = { + suffix_for_value = { 'supported': 'Supported', 'unsupported': 'Unsupported', 'dont_care': 'DontCare', } - assert feature_value in map + assert feature_value in suffix_for_value data_file.write('GpuControlList::k%s, // %s\n' % - (map[feature_value], feature_name)) + (suffix_for_value[feature_value], feature_name)) def write_conditions(entry_id, is_exception, exception_id, entry, @@ -406,6 +471,7 @@ def write_conditions(entry_id, is_exception, exception_id, entry, os_version = None vendor_id = 0 device_id = None + device_revision = None multi_gpu_category = '' multi_gpu_style = '' intel_gpu_series_list = None @@ -467,6 +533,8 @@ def write_conditions(entry_id, is_exception, exception_id, entry, vendor_id = int(entry[key], 0) elif key == 'device_id': device_id = entry[key] + elif key == 'device_revision': + device_revision = entry[key] elif key == 'multi_gpu_category': multi_gpu_category = entry[key] elif key == 'multi_gpu_style': @@ -523,15 +591,14 @@ def write_conditions(entry_id, is_exception, exception_id, entry, write_version(os_version, 'os_version', data_file) data_file.write(format(vendor_id, '#04x')) data_file.write(', // vendor_id\n') - write_number_list(entry_id, 'uint32_t', 'DeviceIDs', device_id, is_exception, + write_device_list(entry_id, device_id, device_revision, is_exception, exception_id, unique_symbol_id, data_file, data_helper_file) write_multi_gpu_category(multi_gpu_category, data_file) write_multi_gpu_style(multi_gpu_style, data_file) # group driver info if driver_vendor != '' or driver_version != None: - if (driver_version and driver_version.has_key('schema') and - driver_version['schema'] == 'intel_driver'): + if driver_version and driver_version.get('schema') == 'intel_driver': assert os_type == 'win', 'Intel driver schema is only for Windows' is_intel = (format(vendor_id, '#04x') == '0x8086' or intel_gpu_series_list or @@ -544,6 +611,16 @@ def write_conditions(entry_id, is_exception, exception_id, entry, check_intel_driver_version(driver_version['value2'])) assert valid_version, INTEL_DRIVER_VERSION_SCHEMA + if driver_version and driver_version.get('schema') == 'nvidia_driver': + assert os_type == 'win', 'Nvidia driver schema is only for Windows' + is_nvidia = (format(vendor_id, '#04x') == '0x10de') + assert is_nvidia, 'Nvidia driver schema is only for Nvidia GPUs' + valid_version = check_nvidia_driver_version(driver_version['value']) + if driver_version.has_key('value2'): + valid_version = (valid_version and + check_nvidia_driver_version(driver_version['value2'])) + assert valid_version, NVIDIA_DRIVER_VERSION_SCHEMA + write_driver_info(entry_id, is_exception, exception_id, driver_vendor, driver_version, unique_symbol_id, data_file, data_helper_file) @@ -739,13 +816,13 @@ def format_files(generated_files): call([formatter, "-i", "-style=chromium", filename]) -def write_header_file_guard(file, filename, path, begin): +def write_header_file_guard(out_file, filename, path, begin): token = (path.upper().replace('/', '_') + '_' + filename.upper().replace('.', '_') + '_') if begin: - file.write('#ifndef %s\n#define %s\n\n' % (token, token)) + out_file.write('#ifndef %s\n#define %s\n\n' % (token, token)) else: - file.write('\n#endif // %s\n' % token) + out_file.write('\n#endif // %s\n' % token) def process_json_file(json_filepath, list_tag, diff --git a/chromium/gpu/config/software_rendering_list.json b/chromium/gpu/config/software_rendering_list.json index e94ed4307c7..5b5c542dbc9 100644 --- a/chromium/gpu/config/software_rendering_list.json +++ b/chromium/gpu/config/software_rendering_list.json @@ -620,11 +620,12 @@ { "id": 90, "description": "Accelerated video decode interferes with GPU sandbox on certain NVIDIA drivers", - "cr_bugs": [298968], + "cr_bugs": [298968, 1020137], "os": { "type": "win" }, "vendor_id": "0x10de", + "multi_gpu_category": "any", "driver_version": { "comment": "INF_version: 8.17.12.5729, 8.17.12.8026; date: 05/22/2010, 08/03/2011", "op": "between", @@ -1549,21 +1550,69 @@ }, { "id": 154, - "description": "Protected video decoding with swap chain is for Windows and Intel only", - "features": [ - "protected_video_decode" - ], + "description": "Protected video decoding with swap chain is for certain Intel and AMD GPUs on Windows", + "cr_bugs": [1093625], "exceptions": [ { + "vendor_id": "0x8086", "os": { "type": "win", "version": { "op": ">=", - "value": "10.0" + "value": "10" } + } + }, + { + "vendor_id": "0x1002", + "device_id": ["0x15d8"], + "device_revision": ["0xe1", "0xe2"], + "driver_version": { + "op": ">=", + "value": "26.20.12055.1000" }, - "vendor_id": "0x8086" + "os": { + "type": "win", + "version": { + "op": ">=", + "value": "10" + } + } + }, + { + "vendor_id": "0x1002", + "device_id": ["0x15d8", "0x15dd"], + "device_revision": ["0x93", "0x86"], + "driver_version": { + "op": ">=", + "value": "26.20.15023.6032" + }, + "os": { + "type": "win", + "version": { + "op": ">=", + "value": "10" + } + } + }, + { + "vendor_id": "0x1002", + "device_id": ["0x15d8", "0x15dd"], + "driver_version": { + "op": ">=", + "value": "27.20.1002.34" + }, + "os": { + "type": "win", + "version": { + "op": ">=", + "value": "10" + } + } } + ], + "features": [ + "protected_video_decode" ] }, { |