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}"; }