// 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.
// 8. "driver_version" is a VERSION structure (defined below).
// 9. "driver_date" is a VERSION structure (defined below).
//    The version is interpreted as "year.month.day".
// 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 blacklist. Any entries with a non-zero test_group
//     ID will be applied if Chrome runs with --gpu-blacklist-test-group=ID.
//
// 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
