// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// A valid gpu control list json file is in the format of
// {
//   "version": "x.y",
//   "entries": [
//     { // entry 1
//     },
//     ...
//     { // entry n
//     }
//   ]
// }
//
// Each entry contains the following fields (fields are optional unless
// specifically described as mandatory below):
// 1. "id" is an integer.  0 is reserved.  This field is mandatory.
// 2. "os" contains "type" and an optional "version". "type" could be "macosx",
//    "linux", "win", "chromeos", or "any".  "any" is the same as not specifying
//    "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. "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.
// 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.
// 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
// 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".
// 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.
// 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.
// 25. "direct_rendering" is a boolean. If present, this will filter on whether
//     the GL contexts are direct or indirect based on the value.
// 26. "disabled_extensions" is a list of strings which contain the GL_EXTENSION
//     strings which are disabled by the workaround.
// 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 blocklist. Any entries with a non-zero test_group
//     ID will be appended on top of the default group entries if Chrome runs
//     with --gpu-blocklist-test-group=ID.
// 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", "alderlake".
// 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.
// 31. "intel_gpu_generation" is a VERSION structure. Each Intel GPU has a
//     specific integer (meaning generation) associated.
// 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.
// 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.
//
// VERSION includes "op", "style", "schema", "value", and "value2".  "op" can
// 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", "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|nvidia)_driver" schema.
//
// FLOAT includes "op" "value", and "value2".  "op" can be any of the
// following values: "=", "<", "<=", ">", ">=", "any", "between".  "value2" is
// only used if "op" is "between".  "value" is used for all "op" values except
// "any". "value" and "value2" are valid float numbers.
// INT is very much like FLOAT, except that the values need to be integers.
//
// String pattern syntax can be found at
// https://github.com/google/re2/blob/master/doc/syntax.txt
