// Copyright 2017 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
        nullptr,                                // more conditions
    },
};

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
        nullptr,                                // more conditions
    },
};

const GpuControlList::Conditions kExceptionsForEntry22[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
        &kGLStringsForEntry22Exception0,        // GL strings
        nullptr,                                // machine model info
        nullptr,                                // more conditions
    },
};

const GpuControlList::Conditions kExceptionsForEntry28[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
        &kMachineModelInfoForEntry28Exception0,  // machine model info
        nullptr,                                 // more conditions
    },
};

const GpuControlList::Conditions kExceptionsForEntry30[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
        &kMachineModelInfoForEntry30Exception0,  // machine model info
        nullptr,                                 // more conditions
    },
};

const GpuControlList::Conditions kExceptionsForEntry45[2] = {
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                         // os_version
        0x8086,                                     // vendor_id
        arraysize(kDeviceIDsForEntry45Exception0),  // DeviceIDs size
        kDeviceIDsForEntry45Exception0,             // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
        &kDriverInfoForEntry45Exception0,           // driver info
        nullptr,                                    // GL strings
        nullptr,                                    // machine model info
        nullptr,                                    // more conditions
    },
    {
        GpuControlList::kOsAny,  // os_type
        {GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
         nullptr, nullptr},                         // os_version
        0x8086,                                     // vendor_id
        arraysize(kDeviceIDsForEntry45Exception1),  // DeviceIDs size
        kDeviceIDsForEntry45Exception1,             // DeviceIDs
        GpuControlList::kMultiGpuCategoryNone,      // multi_gpu_category
        GpuControlList::kMultiGpuStyleNone,         // multi_gpu_style
        &kDriverInfoForEntry45Exception1,           // driver info
        nullptr,                                    // GL strings
        nullptr,                                    // machine model info
        nullptr,                                    // more conditions
    },
};

const GpuControlList::Conditions kExceptionsForEntry52[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
        &kGLStringsForEntry52Exception0,        // GL strings
        nullptr,                                // machine model info
        nullptr,                                // more conditions
    },
};

}  // namespace gpu

#endif  // GPU_CONFIG_GPU_CONTROL_LIST_TESTING_EXCEPTIONS_AUTOGEN_H_
