Avalonia - Couple fixes and improvements to vulkan (#3483)
* drop split devices, rebase * add fallback to opengl if vulkan is not available * addressed review * ensure present image references are incremented and decremented when necessary * allow changing vsync for vulkan * fix screenshot on avalonia vulkan * save favorite when toggled * improve sync between popups * use separate devices for each new window * fix crash when closing window * addressed review * don't create the main window with immediate mode * change skia vk delegate to method * update vulkan throwonerror * addressed review
This commit is contained in:
parent
0ec933a615
commit
c8f9292bab
28 changed files with 585 additions and 312 deletions
|
@ -18,13 +18,11 @@ namespace Ryujinx.Ava.Ui.Vulkan
|
|||
|
||||
public VulkanPhysicalDevice PhysicalDevice { get; private set; }
|
||||
public VulkanInstance Instance { get; }
|
||||
public VulkanDevice Device { get; set; }
|
||||
public Vk Api { get; private set; }
|
||||
public VulkanSurfaceRenderTarget MainSurface { get; set; }
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Device?.Dispose();
|
||||
Instance?.Dispose();
|
||||
Api?.Dispose();
|
||||
}
|
||||
|
@ -54,16 +52,9 @@ namespace Ryujinx.Ava.Ui.Vulkan
|
|||
{
|
||||
var surface = VulkanSurface.CreateSurface(Instance, platformSurface);
|
||||
|
||||
if (Device == null)
|
||||
if (PhysicalDevice == null)
|
||||
{
|
||||
PhysicalDevice = VulkanPhysicalDevice.FindSuitablePhysicalDevice(Instance, surface, _options.PreferDiscreteGpu, _options.PreferredDevice);
|
||||
var device = VulkanInitialization.CreateDevice(Instance.Api,
|
||||
PhysicalDevice.InternalHandle,
|
||||
PhysicalDevice.QueueFamilyIndex,
|
||||
VulkanInitialization.GetSupportedExtensions(Instance.Api, PhysicalDevice.InternalHandle),
|
||||
PhysicalDevice.QueueCount);
|
||||
|
||||
Device = new VulkanDevice(device, PhysicalDevice, Instance.Api);
|
||||
}
|
||||
|
||||
var renderTarget = new VulkanSurfaceRenderTarget(this, surface);
|
||||
|
@ -71,7 +62,6 @@ namespace Ryujinx.Ava.Ui.Vulkan
|
|||
if (MainSurface == null && surface != null)
|
||||
{
|
||||
MainSurface = renderTarget;
|
||||
MainSurface.Display.ChangeVSyncMode(false);
|
||||
}
|
||||
|
||||
return renderTarget;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue