diff options
Diffstat (limited to 'Ryujinx.Ava/Ui/Backend/Vulkan/Surfaces/VulkanSurfaceRenderTarget.cs')
-rw-r--r-- | Ryujinx.Ava/Ui/Backend/Vulkan/Surfaces/VulkanSurfaceRenderTarget.cs | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/Ryujinx.Ava/Ui/Backend/Vulkan/Surfaces/VulkanSurfaceRenderTarget.cs b/Ryujinx.Ava/Ui/Backend/Vulkan/Surfaces/VulkanSurfaceRenderTarget.cs deleted file mode 100644 index 510e6724..00000000 --- a/Ryujinx.Ava/Ui/Backend/Vulkan/Surfaces/VulkanSurfaceRenderTarget.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using Avalonia; -using Ryujinx.Graphics.Vulkan; -using Silk.NET.Vulkan; - -namespace Ryujinx.Ava.Ui.Vulkan.Surfaces -{ - internal class VulkanSurfaceRenderTarget : IDisposable - { - private readonly VulkanPlatformInterface _platformInterface; - private readonly Format _format; - - private VulkanCommandBufferPool.VulkanCommandBuffer _commandBuffer; - private VulkanImage Image { get; set; } - private object _lock = new object(); - - public uint MipLevels => Image.MipLevels; - public VulkanDevice Device { get; } - - public VulkanSurfaceRenderTarget(VulkanPlatformInterface platformInterface, VulkanSurface surface) - { - _platformInterface = platformInterface; - - var device = VulkanInitialization.CreateDevice(platformInterface.Api, - platformInterface.PhysicalDevice.InternalHandle, - platformInterface.PhysicalDevice.QueueFamilyIndex, - VulkanInitialization.GetSupportedExtensions(platformInterface.Api, platformInterface.PhysicalDevice.InternalHandle), - platformInterface.PhysicalDevice.QueueCount); - - Device = new VulkanDevice(device, platformInterface.PhysicalDevice, platformInterface.Api); - - Display = VulkanDisplay.CreateDisplay( - platformInterface.Instance, - Device, - platformInterface.PhysicalDevice, - surface); - Surface = surface; - - // Skia seems to only create surfaces from images with unorm format - IsRgba = Display.SurfaceFormat.Format >= Format.R8G8B8A8Unorm && - Display.SurfaceFormat.Format <= Format.R8G8B8A8Srgb; - - _format = IsRgba ? Format.R8G8B8A8Unorm : Format.B8G8R8A8Unorm; - } - - public bool IsRgba { get; } - - public uint ImageFormat => (uint)_format; - - public ulong MemorySize => Image.MemorySize; - - public VulkanDisplay Display { get; private set; } - - public VulkanSurface Surface { get; private set; } - - public uint UsageFlags => Image.UsageFlags; - - public PixelSize Size { get; private set; } - - public void Dispose() - { - lock (_lock) - { - DestroyImage(); - Display?.Dispose(); - Surface?.Dispose(); - Device?.Dispose(); - - Display = null; - Surface = null; - } - } - - public VulkanSurfaceRenderingSession BeginDraw(float scaling) - { - if (Image == null) - { - RecreateImage(); - } - - _commandBuffer?.WaitForFence(); - _commandBuffer = null; - - var session = new VulkanSurfaceRenderingSession(Display, Device, this, scaling); - - Image.TransitionLayout(ImageLayout.ColorAttachmentOptimal, AccessFlags.AccessNoneKhr); - - return session; - } - - public void RecreateImage() - { - DestroyImage(); - CreateImage(); - } - - private void CreateImage() - { - Size = Display.Size; - - Image = new VulkanImage(Device, _platformInterface.PhysicalDevice, Display.CommandBufferPool, ImageFormat, Size); - } - - private void DestroyImage() - { - _commandBuffer?.WaitForFence(); - _commandBuffer = null; - Image?.Dispose(); - Image = null; - } - - public VulkanImage GetImage() - { - return Image; - } - - public void EndDraw() - { - lock (_lock) - { - if (Display == null) - { - return; - } - - _commandBuffer = Display.StartPresentation(); - - Display.BlitImageToCurrentImage(this, _commandBuffer.InternalHandle); - - Display.EndPresentation(_commandBuffer); - } - } - } -} |