aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs94
1 files changed, 51 insertions, 43 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index 7d7c1095..ede54a6f 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -87,6 +87,7 @@ namespace Ryujinx.Graphics.Vulkan
internal bool IsIntelWindows { get; private set; }
internal bool IsAmdGcn { get; private set; }
internal bool IsNvidiaPreTuring { get; private set; }
+ internal bool IsIntelArc { get; private set; }
internal bool IsMoltenVk { get; private set; }
internal bool IsTBDR { get; private set; }
internal bool IsSharedMemory { get; private set; }
@@ -310,6 +311,51 @@ namespace Ryujinx.Graphics.Vulkan
ref var properties = ref properties2.Properties;
+ 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();
+ IsIntelWindows = Vendor == Vendor.Intel && OperatingSystem.IsWindows();
+ IsTBDR =
+ Vendor == Vendor.Apple ||
+ Vendor == Vendor.Qualcomm ||
+ Vendor == Vendor.ARM ||
+ 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.
+
+ fixed (byte* deviceName = properties.DeviceName)
+ {
+ GpuRenderer = Marshal.PtrToStringAnsi((IntPtr)deviceName);
+ }
+
+ GpuVersion = $"Vulkan v{ParseStandardVulkanVersion(properties.ApiVersion)}, Driver v{ParseDriverVersion(ref properties)}";
+
+ IsAmdGcn = !IsMoltenVk && Vendor == Vendor.Amd && VendorUtils.AmdGcnRegex().IsMatch(GpuRenderer);
+
+ if (Vendor == Vendor.Nvidia)
+ {
+ var match = VendorUtils.NvidiaConsumerClassRegex().Match(GpuRenderer);
+
+ if (match != null && int.TryParse(match.Groups[2].Value, out int gpuNumber))
+ {
+ IsNvidiaPreTuring = gpuNumber < 2000;
+ }
+ else if (GpuDriver.Contains("TITAN") && !GpuDriver.Contains("RTX"))
+ {
+ IsNvidiaPreTuring = true;
+ }
+ }
+ else if (Vendor == Vendor.Intel)
+ {
+ IsIntelArc = GpuRenderer.StartsWith("Intel(R) Arc(TM)");
+ }
+
ulong minResourceAlignment = Math.Max(
Math.Max(
properties.Limits.MinStorageBufferOffsetAlignment,
@@ -732,49 +778,6 @@ namespace Ryujinx.Graphics.Vulkan
return ParseStandardVulkanVersion(driverVersionRaw);
}
- private unsafe void PrintGpuInformation()
- {
- var properties = _physicalDevice.PhysicalDeviceProperties;
-
- 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();
- IsIntelWindows = Vendor == Vendor.Intel && OperatingSystem.IsWindows();
- IsTBDR =
- Vendor == Vendor.Apple ||
- Vendor == Vendor.Qualcomm ||
- Vendor == Vendor.ARM ||
- 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.
- GpuRenderer = Marshal.PtrToStringAnsi((IntPtr)properties.DeviceName);
- GpuVersion = $"Vulkan v{ParseStandardVulkanVersion(properties.ApiVersion)}, Driver v{ParseDriverVersion(ref properties)}";
-
- IsAmdGcn = !IsMoltenVk && Vendor == Vendor.Amd && VendorUtils.AmdGcnRegex().IsMatch(GpuRenderer);
-
- if (Vendor == Vendor.Nvidia)
- {
- var match = VendorUtils.NvidiaConsumerClassRegex().Match(GpuRenderer);
-
- if (match != null && int.TryParse(match.Groups[2].Value, out int gpuNumber))
- {
- IsNvidiaPreTuring = gpuNumber < 2000;
- }
- else if (GpuDriver.Contains("TITAN") && !GpuDriver.Contains("RTX"))
- {
- IsNvidiaPreTuring = true;
- }
- }
-
- Logger.Notice.Print(LogClass.Gpu, $"{GpuVendor} {GpuRenderer} ({GpuVersion})");
- }
-
internal PrimitiveTopology TopologyRemap(PrimitiveTopology topology)
{
return topology switch
@@ -798,6 +801,11 @@ namespace Ryujinx.Graphics.Vulkan
};
}
+ private void PrintGpuInformation()
+ {
+ Logger.Notice.Print(LogClass.Gpu, $"{GpuVendor} {GpuRenderer} ({GpuVersion})");
+ }
+
public void Initialize(GraphicsDebugLevel logLevel)
{
SetupContext(logLevel);