aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs27
-rw-r--r--src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs6
2 files changed, 32 insertions, 1 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs b/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs
index 547f3654..3bee1e9d 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs
@@ -58,6 +58,33 @@ namespace Ryujinx.Graphics.Vulkan
public bool IsDeviceExtensionPresent(string extension) => DeviceExtensions.Contains(extension);
+ public unsafe bool TryGetPhysicalDeviceDriverPropertiesKHR(Vk api, out PhysicalDeviceDriverPropertiesKHR res)
+ {
+ if (!IsDeviceExtensionPresent("VK_KHR_driver_properties"))
+ {
+ res = default;
+
+ return false;
+ }
+
+ PhysicalDeviceDriverPropertiesKHR physicalDeviceDriverProperties = new()
+ {
+ SType = StructureType.PhysicalDeviceDriverPropertiesKhr
+ };
+
+ PhysicalDeviceProperties2 physicalDeviceProperties2 = new()
+ {
+ SType = StructureType.PhysicalDeviceProperties2,
+ PNext = &physicalDeviceDriverProperties
+ };
+
+ api.GetPhysicalDeviceProperties2(PhysicalDevice, &physicalDeviceProperties2);
+
+ res = physicalDeviceDriverProperties;
+
+ return true;
+ }
+
public DeviceInfo ToDeviceInfo()
{
return new DeviceInfo(
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index 641ac844..48f05fa1 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -84,6 +84,7 @@ namespace Ryujinx.Graphics.Vulkan
internal bool IsTBDR { get; private set; }
internal bool IsSharedMemory { get; private set; }
public string GpuVendor { get; private set; }
+ public string GpuDriver { get; private set; }
public string GpuRenderer { get; private set; }
public string GpuVersion { get; private set; }
@@ -636,7 +637,7 @@ namespace Ryujinx.Graphics.Vulkan
public HardwareInfo GetHardwareInfo()
{
- return new HardwareInfo(GpuVendor, GpuRenderer);
+ return new HardwareInfo(GpuVendor, GpuRenderer, GpuDriver);
}
/// <summary>
@@ -693,6 +694,8 @@ namespace Ryujinx.Graphics.Vulkan
{
var properties = _physicalDevice.PhysicalDeviceProperties;
+ var hasDriverProperties = _physicalDevice.TryGetPhysicalDeviceDriverPropertiesKHR(Api, out var driverProperties);
+
string vendorName = VendorUtils.GetNameFromId(properties.VendorID);
Vendor = VendorUtils.FromId(properties.VendorID);
@@ -707,6 +710,7 @@ namespace Ryujinx.Graphics.Vulkan
Vendor == Vendor.ImgTec;
GpuVendor = vendorName;
+ GpuDriver = hasDriverProperties ? Marshal.PtrToStringAnsi((IntPtr)driverProperties.DriverName) : vendorName; // Fall back to vendor name if driver name isn't available.
GpuRenderer = Marshal.PtrToStringAnsi((IntPtr)properties.DeviceName);
GpuVersion = $"Vulkan v{ParseStandardVulkanVersion(properties.ApiVersion)}, Driver v{ParseDriverVersion(ref properties)}";