//
// Copyright (c) 2013-2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// SystemInfo.h: gathers information available without starting a GPU driver.

#ifndef GPU_INFO_UTIL_SYSTEM_INFO_H_
#define GPU_INFO_UTIL_SYSTEM_INFO_H_

#include <cstdint>
#include <string>
#include <vector>

namespace angle
{

using VendorID = uint32_t;
using DeviceID = uint32_t;

constexpr VendorID kVendorID_AMD      = 0x1002;
constexpr VendorID kVendorID_Intel    = 0x8086;
constexpr VendorID kVendorID_Nvidia   = 0x10DE;
constexpr VendorID kVendorID_Qualcomm = 0x5143;

struct GPUDeviceInfo
{
    VendorID vendorId = 0;
    DeviceID deviceId = 0;

    std::string driverVendor;
    std::string driverVersion;
    std::string driverDate;
};

struct SystemInfo
{
    std::vector<GPUDeviceInfo> gpus;
    int primaryGPUIndex = -1;
    int activeGPUIndex  = -1;

    bool isOptimus       = false;
    bool isAMDSwitchable = false;

    std::string machineModelName;
    std::string machineModelVersion;
};

bool GetSystemInfo(SystemInfo *info);

bool IsAMD(VendorID vendorId);
bool IsIntel(VendorID vendorId);
bool IsNvidia(VendorID vendorId);
bool IsQualcomm(VendorID vendorId);

}  // namespace angle

#endif  // GPU_INFO_UTIL_SYSTEM_INFO_H_
