// 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. "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",
//    "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
//    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".
//    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
//     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.
//     This can not be used in exceptions.
// 24. "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
//     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
//     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. "gpu_series" is a list of gpu series names. Currently supported series
//     include: "intel_sandybridge", "intel_valleyview", "intel_ivybridge",
//     "intel_haswell", "intel_cherryview", "intel_broadwell",
//     "intel_apollolake", "intel_skylake", "intel_geminilake",
//     "intel_kabylake", "intel_coffeelake", "intel_whiskeylake",
//     "intel_cometlake", "intel_cannonlake", "intel_icelake".
// 29. "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
//     specific integer (meaning generation) associated.
// 31. "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.
//
// VERSION includes "op", "style", "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".  "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.
//
// 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
