// Copyright 2019 The Dawn Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COMMON_GPUINFO_H
#define COMMON_GPUINFO_H

#include <array>
#include <cstdint>

using PCIVendorID = uint32_t;
using PCIDeviceID = uint32_t;

namespace gpu_info {

    static constexpr PCIVendorID kVendorID_AMD = 0x1002;
    static constexpr PCIVendorID kVendorID_ARM = 0x13B5;
    static constexpr PCIVendorID kVendorID_ImgTec = 0x1010;
    static constexpr PCIVendorID kVendorID_Intel = 0x8086;
    static constexpr PCIVendorID kVendorID_Mesa = 0x10005;
    static constexpr PCIVendorID kVendorID_Nvidia = 0x10DE;
    static constexpr PCIVendorID kVendorID_Qualcomm = 0x5143;
    static constexpr PCIVendorID kVendorID_Google = 0x1AE0;
    static constexpr PCIVendorID kVendorID_Microsoft = 0x1414;

    static constexpr PCIDeviceID kDeviceID_Swiftshader = 0xC0DE;
    static constexpr PCIDeviceID kDeviceID_WARP = 0x8c;

    bool IsAMD(PCIVendorID vendorId);
    bool IsARM(PCIVendorID vendorId);
    bool IsImgTec(PCIVendorID vendorId);
    bool IsIntel(PCIVendorID vendorId);
    bool IsMesa(PCIVendorID vendorId);
    bool IsNvidia(PCIVendorID vendorId);
    bool IsQualcomm(PCIVendorID vendorId);
    bool IsSwiftshader(PCIVendorID vendorId, PCIDeviceID deviceId);
    bool IsWARP(PCIVendorID vendorId, PCIDeviceID deviceId);

    using D3DDriverVersion = std::array<uint16_t, 4>;

    // Do comparison between two driver versions. Currently we only support the comparison between
    // Intel D3D driver versions.
    // - Return -1 if build number of version1 is smaller
    // - Return 1 if build number of version1 is bigger
    // - Return 0 if version1 and version2 represent same driver version
    int CompareD3DDriverVersion(PCIVendorID vendorId,
                                const D3DDriverVersion& version1,
                                const D3DDriverVersion& version2);

    // Intel architectures
    bool IsSkylake(PCIDeviceID deviceId);
    bool IsKabylake(PCIDeviceID deviceId);
    bool IsCoffeelake(PCIDeviceID deviceId);

}  // namespace gpu_info
#endif  // COMMON_GPUINFO_H
