Fix crash in SettingsViewModel when Vulkan isn't available (#4985)
* fix crash when Vulkan isn't available * add VulkanRenderer.GetPhysicalDevices() overload that provides its own Vk API object and logs on failure * adjustments per AcK77
This commit is contained in:
parent
21e88f17f6
commit
ac66643346
3 changed files with 21 additions and 2 deletions
|
@ -311,7 +311,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
{
|
{
|
||||||
_gpuIds = new List<string>();
|
_gpuIds = new List<string>();
|
||||||
List<string> names = new();
|
List<string> names = new();
|
||||||
var devices = VulkanRenderer.GetPhysicalDevices(Vk.GetApi());
|
var devices = VulkanRenderer.GetPhysicalDevices();
|
||||||
|
|
||||||
if (devices.Length == 0)
|
if (devices.Length == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -599,6 +599,25 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
return new HardwareInfo(GpuVendor, GpuRenderer);
|
return new HardwareInfo(GpuVendor, GpuRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the available Vulkan devices using the default Vulkan API
|
||||||
|
/// object returned by <see cref="Vk.GetApi()"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static DeviceInfo[] GetPhysicalDevices()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return VulkanInitialization.GetSuitablePhysicalDevices(Vk.GetApi());
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Error?.PrintMsg(LogClass.Gpu, $"Error querying Vulkan devices: {ex.Message}");
|
||||||
|
|
||||||
|
return Array.Empty<DeviceInfo>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static DeviceInfo[] GetPhysicalDevices(Vk api)
|
public static DeviceInfo[] GetPhysicalDevices(Vk api)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
|
@ -478,7 +478,7 @@ namespace Ryujinx.Ui.Windows
|
||||||
|
|
||||||
if (Enum.Parse<GraphicsBackend>(_graphicsBackend.ActiveId) == GraphicsBackend.Vulkan)
|
if (Enum.Parse<GraphicsBackend>(_graphicsBackend.ActiveId) == GraphicsBackend.Vulkan)
|
||||||
{
|
{
|
||||||
var devices = VulkanRenderer.GetPhysicalDevices(Vk.GetApi());
|
var devices = VulkanRenderer.GetPhysicalDevices();
|
||||||
string preferredGpuIdFromConfig = ConfigurationState.Instance.Graphics.PreferredGpu.Value;
|
string preferredGpuIdFromConfig = ConfigurationState.Instance.Graphics.PreferredGpu.Value;
|
||||||
string preferredGpuId = preferredGpuIdFromConfig;
|
string preferredGpuId = preferredGpuIdFromConfig;
|
||||||
bool noGpuId = string.IsNullOrEmpty(preferredGpuIdFromConfig);
|
bool noGpuId = string.IsNullOrEmpty(preferredGpuIdFromConfig);
|
||||||
|
|
Reference in a new issue