Vendor.cs
  1  using Silk.NET.Vulkan;
  2  using System.Text.RegularExpressions;
  3  
  4  namespace Ryujinx.Graphics.Vulkan
  5  {
  6      enum Vendor
  7      {
  8          Amd,
  9          ImgTec,
 10          Intel,
 11          Nvidia,
 12          ARM,
 13          Broadcom,
 14          Qualcomm,
 15          Apple,
 16          Unknown,
 17      }
 18  
 19      static partial class VendorUtils
 20      {
 21          [GeneratedRegex("Radeon (((HD|R(5|7|9|X)) )?((M?[2-6]\\d{2}(\\D|$))|([7-8]\\d{3}(\\D|$))|Fury|Nano))|(Pro Duo)")]
 22          public static partial Regex AmdGcnRegex();
 23  
 24          [GeneratedRegex("NVIDIA GeForce (R|G)?TX? (\\d{3}\\d?)M?")]
 25          public static partial Regex NvidiaConsumerClassRegex();
 26  
 27          public static Vendor FromId(uint id)
 28          {
 29              return id switch
 30              {
 31                  0x1002 => Vendor.Amd,
 32                  0x1010 => Vendor.ImgTec,
 33                  0x106B => Vendor.Apple,
 34                  0x10DE => Vendor.Nvidia,
 35                  0x13B5 => Vendor.ARM,
 36                  0x14E4 => Vendor.Broadcom,
 37                  0x8086 => Vendor.Intel,
 38                  0x5143 => Vendor.Qualcomm,
 39                  _ => Vendor.Unknown,
 40              };
 41          }
 42  
 43          public static string GetNameFromId(uint id)
 44          {
 45              return id switch
 46              {
 47                  0x1002 => "AMD",
 48                  0x1010 => "ImgTec",
 49                  0x106B => "Apple",
 50                  0x10DE => "NVIDIA",
 51                  0x13B5 => "ARM",
 52                  0x14E4 => "Broadcom",
 53                  0x1AE0 => "Google",
 54                  0x5143 => "Qualcomm",
 55                  0x8086 => "Intel",
 56                  0x10001 => "Vivante",
 57                  0x10002 => "VeriSilicon",
 58                  0x10003 => "Kazan",
 59                  0x10004 => "Codeplay Software Ltd.",
 60                  0x10005 => "Mesa",
 61                  0x10006 => "PoCL",
 62                  _ => $"0x{id:X}",
 63              };
 64          }
 65  
 66          public static string GetFriendlyDriverName(DriverId id)
 67          {
 68              return id switch
 69              {
 70                  DriverId.AmdProprietary => "AMD",
 71                  DriverId.AmdOpenSource => "AMD (Open)",
 72                  DriverId.MesaRadv => "RADV",
 73                  DriverId.NvidiaProprietary => "NVIDIA",
 74                  DriverId.IntelProprietaryWindows => "Intel",
 75                  DriverId.IntelOpenSourceMesa => "Intel (Open)",
 76                  DriverId.ImaginationProprietary => "Imagination",
 77                  DriverId.QualcommProprietary => "Qualcomm",
 78                  DriverId.ArmProprietary => "ARM",
 79                  DriverId.GoogleSwiftshader => "SwiftShader",
 80                  DriverId.GgpProprietary => "GGP",
 81                  DriverId.BroadcomProprietary => "Broadcom",
 82                  DriverId.MesaLlvmpipe => "LLVMpipe",
 83                  DriverId.Moltenvk => "MoltenVK",
 84                  DriverId.CoreaviProprietary => "CoreAVI",
 85                  DriverId.JuiceProprietary => "Juice",
 86                  DriverId.VerisiliconProprietary => "Verisilicon",
 87                  DriverId.MesaTurnip => "Turnip",
 88                  DriverId.MesaV3DV => "V3DV",
 89                  DriverId.MesaPanvk => "PanVK",
 90                  DriverId.SamsungProprietary => "Samsung",
 91                  DriverId.MesaVenus => "Venus",
 92                  DriverId.MesaDozen => "Dozen",
 93                  DriverId.MesaNvk => "NVK",
 94                  DriverId.ImaginationOpenSourceMesa => "Imagination (Open)",
 95                  DriverId.MesaAgxv => "Honeykrisp",
 96                  _ => id.ToString(),
 97              };
 98          }
 99      }
100  }