// 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 CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_TESTING_ARRAYS_AND_STRUCTS_AUTOGEN_H_
#define CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_TESTING_ARRAYS_AND_STRUCTS_AUTOGEN_H_

#include "gpu/config/gpu_feature_type.h"

namespace gpu {
const int kFeatureListForGpuManagerTestingEntry1[1] = {
    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
};

const int kFeatureListForGpuManagerTestingEntry2[1] = {
    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
};

const GpuControlList::GLStrings kGLStringsForGpuManagerTestingEntry2 = {
    nullptr,
    ".*GeForce.*",
    nullptr,
    nullptr,
};

const int kFeatureListForGpuManagerTestingEntry3[1] = {
    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
};

const int kFeatureListForGpuManagerTestingEntry4[2] = {
    GPU_FEATURE_TYPE_ACCELERATED_WEBGL2,
    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
};

const GpuControlList::GLStrings kGLStringsForGpuManagerTestingEntry4 = {
    nullptr,
    ".*GeForce.*",
    nullptr,
    nullptr,
};

const int kFeatureListForGpuManagerTestingEntry5[1] = {
    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
};

const GpuControlList::GLStrings kGLStringsForGpuManagerTestingEntry5Exception0 =
    {
        nullptr,
        ".*GeForce.*",
        nullptr,
        nullptr,
};

const int kFeatureListForGpuManagerTestingEntry6[12] = {
    GPU_FEATURE_TYPE_FLASH_STAGE3D,
    GPU_FEATURE_TYPE_GPU_COMPOSITING,
    GPU_FEATURE_TYPE_GPU_RASTERIZATION,
    GPU_FEATURE_TYPE_FLASH3D,
    GPU_FEATURE_TYPE_ACCELERATED_WEBGL2,
    GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
    GPU_FEATURE_TYPE_PROTECTED_VIDEO_DECODE,
    GPU_FEATURE_TYPE_OOP_RASTERIZATION,
    GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE,
    GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL,
    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
    GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
};

const int kFeatureListForGpuManagerTestingEntry7[1] = {
    GPU_FEATURE_TYPE_ACCELERATED_WEBGL,
};

}  // namespace gpu

#endif  // CONTENT_BROWSER_GPU_GPU_DATA_MANAGER_TESTING_ARRAYS_AND_STRUCTS_AUTOGEN_H_
