From 7124d679fd4345f2ed517e77ab40d90e6bef9650 Mon Sep 17 00:00:00 2001
From: MutantAura <44103205+MutantAura@users.noreply.github.com>
Date: Wed, 27 Mar 2024 17:55:34 +0000
Subject: [PATCH] UI: Friendly driver name reporting. (#6530)

* Implement friendly VkDriverID names for UI.

* Capitalise NVIDIA

* Prefer vendor name on macOS

* Typo fix

Co-authored-by: gdkchan <gab.dark.100@gmail.com>

---------

Co-authored-by: gdkchan <gab.dark.100@gmail.com>
---
 src/Ryujinx.Graphics.Vulkan/Vendor.cs         | 32 +++++++++++++++++++
 src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs |  7 ++--
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/Ryujinx.Graphics.Vulkan/Vendor.cs b/src/Ryujinx.Graphics.Vulkan/Vendor.cs
index ff841dec..e0f56907 100644
--- a/src/Ryujinx.Graphics.Vulkan/Vendor.cs
+++ b/src/Ryujinx.Graphics.Vulkan/Vendor.cs
@@ -1,3 +1,4 @@
+using Silk.NET.Vulkan;
 using System.Text.RegularExpressions;
 
 namespace Ryujinx.Graphics.Vulkan
@@ -61,5 +62,36 @@ namespace Ryujinx.Graphics.Vulkan
                 _ => $"0x{id:X}",
             };
         }
+
+        public static string GetFriendlyDriverName(DriverId id)
+        {
+            return id switch
+            {
+                DriverId.AmdProprietary => "AMD",
+                DriverId.AmdOpenSource => "AMD (Open)",
+                DriverId.ArmProprietary => "ARM",
+                DriverId.BroadcomProprietary => "Broadcom",
+                DriverId.CoreaviProprietary => "CoreAVI",
+                DriverId.GgpProprietary => "GGP",
+                DriverId.GoogleSwiftshader => "SwiftShader",
+                DriverId.ImaginationProprietary => "Imagination",
+                DriverId.IntelOpenSourceMesa => "Intel (Open)",
+                DriverId.IntelProprietaryWindows => "Intel",
+                DriverId.JuiceProprietary => "Juice",
+                DriverId.MesaDozen => "Dozen",
+                DriverId.MesaLlvmpipe => "LLVMpipe",
+                DriverId.MesaPanvk => "PanVK",
+                DriverId.MesaRadv => "RADV",
+                DriverId.MesaTurnip => "Turnip",
+                DriverId.MesaV3DV => "V3DV",
+                DriverId.MesaVenus => "Venus",
+                DriverId.Moltenvk => "MoltenVK",
+                DriverId.NvidiaProprietary => "NVIDIA",
+                DriverId.QualcommProprietary => "Qualcomm",
+                DriverId.SamsungProprietary => "Samsung",
+                DriverId.VerisiliconProprietary => "Verisilicon",
+                _ => id.ToString(),
+            };
+        }
     }
 }
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index ede54a6f..d1afeaea 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -313,8 +313,6 @@ namespace Ryujinx.Graphics.Vulkan
 
             var hasDriverProperties = _physicalDevice.TryGetPhysicalDeviceDriverPropertiesKHR(Api, out var driverProperties);
 
-            string vendorName = VendorUtils.GetNameFromId(properties.VendorID);
-
             Vendor = VendorUtils.FromId(properties.VendorID);
 
             IsAmdWindows = Vendor == Vendor.Amd && OperatingSystem.IsWindows();
@@ -326,8 +324,9 @@ namespace Ryujinx.Graphics.Vulkan
                 Vendor == Vendor.Broadcom ||
                 Vendor == Vendor.ImgTec;
 
-            GpuVendor = vendorName;
-            GpuDriver = hasDriverProperties ? Marshal.PtrToStringAnsi((IntPtr)driverProperties.DriverName) : vendorName; // Fall back to vendor name if driver name isn't available.
+            GpuVendor = VendorUtils.GetNameFromId(properties.VendorID);
+            GpuDriver = hasDriverProperties && !OperatingSystem.IsMacOS() ?
+                VendorUtils.GetFriendlyDriverName(driverProperties.DriverID) : GpuVendor; // Fallback to vendor name if driver is unavailable or on MacOS where vendor is preferred.
 
             fixed (byte* deviceName = properties.DeviceName)
             {