// Copyright (c) 2019 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.

// This file is auto-generated from
//    gpu/config/process_json.py
// It's formatted by clang-format using chromium coding style:
//    clang-format -i -style=chromium filename
// DO NOT EDIT!

#ifndef GPU_CONFIG_GPU_CONTROL_LIST_TESTING_EXCEPTIONS_AUTOGEN_H_
#define GPU_CONFIG_GPU_CONTROL_LIST_TESTING_EXCEPTIONS_AUTOGEN_H_

namespace gpu {
const GpuControlList::Conditions kExceptionsForEntry4[1] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // os_version
        0x10de,                                 // vendor_id
        0,                                      // DeviceIDs size
        nullptr,                                // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
        nullptr,                                // driver info
        nullptr,                                // GL strings
        nullptr,                                // machine model info
        0,                                      // gpu_series size
        nullptr,                                // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                    // intel_gpu_generation
        &kMoreForEntry4_1440601243Exception0,  // more data
    },
};

const GpuControlList::Conditions kExceptionsForEntry5[1] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // os_version
        0x8086,                                 // vendor_id
        0,                                      // DeviceIDs size
        nullptr,                                // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
        nullptr,                                // driver info
        nullptr,                                // GL strings
        nullptr,                                // machine model info
        0,                                      // gpu_series size
        nullptr,                                // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                    // intel_gpu_generation
        &kMoreForEntry5_1440601243Exception0,  // more data
    },
};

const GpuControlList::Conditions kExceptionsForEntry21[1] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                                // os_version
        0x00,                                              // vendor_id
        0,                                                 // DeviceIDs size
        nullptr,                                           // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,             // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,                // multi_gpu_style
        nullptr,                                           // driver info
        &kGLStringsForGpuControlTestingEntry21Exception0,  // GL strings
        nullptr,                                           // machine model info
        0,                                                 // gpu_series size
        nullptr,                                           // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // intel_gpu_generation
        &kMoreForEntry21_1440601243Exception0,  // more data
    },
};

const GpuControlList::Conditions kExceptionsForEntry27[1] = {
    {
        GpuControlList::kOsAndroid,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                      // os_version
        0x00,                                    // vendor_id
        0,                                       // DeviceIDs size
        nullptr,                                 // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,   // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,      // multi_gpu_style
        nullptr,                                 // driver info
        nullptr,                                 // GL strings
        &kMachineModelInfoForEntry27Exception0,  // machine model info
        0,                                       // gpu_series size
        nullptr,                                 // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // intel_gpu_generation
        &kMoreForEntry27_1440601243Exception0,  // more data
    },
};

const GpuControlList::Conditions kExceptionsForEntry29[1] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                      // os_version
        0x00,                                    // vendor_id
        0,                                       // DeviceIDs size
        nullptr,                                 // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,   // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,      // multi_gpu_style
        nullptr,                                 // driver info
        nullptr,                                 // GL strings
        &kMachineModelInfoForEntry29Exception0,  // machine model info
        0,                                       // gpu_series size
        nullptr,                                 // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // intel_gpu_generation
        &kMoreForEntry29_1440601243Exception0,  // more data
    },
};

const GpuControlList::Conditions kExceptionsForEntry44[2] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},  // os_version
        0x8086,              // vendor_id
        base::size(
            kDeviceIDsForGpuControlTestingEntry44Exception0),  // DeviceIDs size
        kDeviceIDsForGpuControlTestingEntry44Exception0,       // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
        &kDriverInfoForGpuControlTestingEntry44Exception0,  // driver info
        nullptr,                                            // GL strings
        nullptr,  // machine model info
        0,        // gpu_series size
        nullptr,  // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // intel_gpu_generation
        &kMoreForEntry44_1440601243Exception0,  // more data
    },
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},  // os_version
        0x8086,              // vendor_id
        base::size(
            kDeviceIDsForGpuControlTestingEntry44Exception1),  // DeviceIDs size
        kDeviceIDsForGpuControlTestingEntry44Exception1,       // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,  // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,     // multi_gpu_style
        &kDriverInfoForGpuControlTestingEntry44Exception1,  // driver info
        nullptr,                                            // GL strings
        nullptr,  // machine model info
        0,        // gpu_series size
        nullptr,  // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // intel_gpu_generation
        &kMoreForEntry44_1440601243Exception1,  // more data
    },
};

const GpuControlList::Conditions kExceptionsForEntry51[1] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                                // os_version
        0x00,                                              // vendor_id
        0,                                                 // DeviceIDs size
        nullptr,                                           // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,             // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,                // multi_gpu_style
        nullptr,                                           // driver info
        &kGLStringsForGpuControlTestingEntry51Exception0,  // GL strings
        nullptr,                                           // machine model info
        0,                                                 // gpu_series size
        nullptr,                                           // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // intel_gpu_generation
        &kMoreForEntry51_1440601243Exception0,  // more data
    },
};

const GpuControlList::Conditions kExceptionsForEntry65[1] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                          // os_version
        0x00,                                        // vendor_id
        0,                                           // DeviceIDs size
        nullptr,                                     // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,       // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,          // multi_gpu_style
        nullptr,                                     // driver info
        nullptr,                                     // GL strings
        nullptr,                                     // machine model info
        base::size(kGpuSeriesForEntry65Exception0),  // gpu_series size
        kGpuSeriesForEntry65Exception0,              // gpu_series
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                     // intel_gpu_generation
        &kMoreForEntry65_1440601243Exception0,  // more data
    },
};

}  // namespace gpu

#endif  // GPU_CONFIG_GPU_CONTROL_LIST_TESTING_EXCEPTIONS_AUTOGEN_H_
