diff --git a/Ryujinx.Ava/Program.cs b/Ryujinx.Ava/Program.cs
index 89b0f1cd4..324bbcc76 100644
--- a/Ryujinx.Ava/Program.cs
+++ b/Ryujinx.Ava/Program.cs
@@ -97,6 +97,7 @@ namespace Ryujinx.Ava
VulkanVersion = new Version(1, 2),
MaxQueueCount = 2,
PreferDiscreteGpu = true,
+ PreferredDevice = !PreviewerDetached ? "" : ConfigurationState.Instance.Graphics.PreferredGpu.Value,
UseDebug = !PreviewerDetached ? false : ConfigurationState.Instance.Logger.GraphicsDebugLevel.Value != GraphicsDebugLevel.None,
})
.With(new SkiaOptions()
diff --git a/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanOptions.cs b/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanOptions.cs
index 66087c1d0..b4a060c99 100644
--- a/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanOptions.cs
+++ b/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanOptions.cs
@@ -38,7 +38,7 @@ namespace Ryujinx.Ava.Ui.Vulkan
///
/// Sets the device to use if available and suitable.
///
- public uint? PreferredDevice { get; set; }
+ public string PreferredDevice { get; set; }
///
/// Max number of device queues to request
diff --git a/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanPhysicalDevice.cs b/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanPhysicalDevice.cs
index 4f5cb50c9..df677e718 100644
--- a/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanPhysicalDevice.cs
+++ b/Ryujinx.Ava/Ui/Backend/Vulkan/VulkanPhysicalDevice.cs
@@ -36,7 +36,7 @@ namespace Ryujinx.Ava.Ui.Vulkan
public Version ApiVersion { get; }
internal static unsafe VulkanPhysicalDevice FindSuitablePhysicalDevice(VulkanInstance instance,
- VulkanSurface surface, bool preferDiscreteGpu, uint? preferredDevice)
+ VulkanSurface surface, bool preferDiscreteGpu, string preferredDevice)
{
uint physicalDeviceCount;
@@ -58,9 +58,9 @@ namespace Ryujinx.Ava.Ui.Vulkan
physicalDeviceProperties.Add(physicalDevice, properties);
}
- if (preferredDevice.HasValue && preferredDevice != 0)
+ if (!string.IsNullOrWhiteSpace(preferredDevice))
{
- var physicalDevice = physicalDeviceProperties.FirstOrDefault(x => x.Value.DeviceID == preferredDevice);
+ var physicalDevice = physicalDeviceProperties.FirstOrDefault(x => VulkanInitialization.StringFromIdPair(x.Value.VendorID, x.Value.DeviceID) == preferredDevice);
if (physicalDevice.Key.Handle != 0 && IsSuitableDevice(instance.Api, physicalDevice.Key,
physicalDevice.Value, surface.ApiHandle, out var queueCount,
out var queueFamilyIndex))
diff --git a/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs b/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs
index e1d818701..52f6e774f 100644
--- a/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs
+++ b/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs
@@ -280,7 +280,7 @@ namespace Ryujinx.Graphics.Vulkan
return devices;
}
- private static string StringFromIdPair(uint vendorId, uint deviceId)
+ public static string StringFromIdPair(uint vendorId, uint deviceId)
{
return $"0x{vendorId:X}_0x{deviceId:X}";
}