diff options
author | riperiperi <rhy3756547@hotmail.com> | 2023-06-09 00:23:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-08 20:23:36 -0300 |
commit | 0003a7c11815d2a9dbbd5bf89845c9d90f6fff62 (patch) | |
tree | 572153a7618dd89df85ccb6a3dbc425a92ece785 | |
parent | 2cdcfe46d8959b0cbd8aea3b4439b30a55d47f00 (diff) |
Vulkan: Use aspect flags for identity views for bindings (#5267)1.1.872
-rw-r--r-- | src/Ryujinx.Graphics.Vulkan/TextureView.cs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/TextureView.cs b/src/Ryujinx.Graphics.Vulkan/TextureView.cs index c2be7497..eb094b3e 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureView.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureView.cs @@ -15,6 +15,7 @@ namespace Ryujinx.Graphics.Vulkan private readonly Device _device; private readonly Auto<DisposableImageView> _imageView; + private readonly Auto<DisposableImageView> _imageViewDraw; private readonly Auto<DisposableImageView> _imageViewIdentity; private readonly Auto<DisposableImageView> _imageView2dArray; private Dictionary<GAL.Format, TextureView> _selfManagedViews; @@ -127,7 +128,8 @@ namespace Ryujinx.Graphics.Vulkan ComponentSwizzle.B, ComponentSwizzle.A); - _imageViewIdentity = CreateImageView(identityComponentMapping, subresourceRangeDepth, type, usage); + _imageViewDraw = CreateImageView(identityComponentMapping, subresourceRangeDepth, type, usage); + _imageViewIdentity = aspectFlagsDepth == aspectFlags ? _imageViewDraw : CreateImageView(identityComponentMapping, subresourceRange, type, usage); // Framebuffer attachments also require 3D textures to be bound as 2D array. if (info.Target == Target.Texture3D) @@ -169,7 +171,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto<DisposableImageView> GetImageViewForAttachment() { - return _imageView2dArray ?? _imageViewIdentity; + return _imageView2dArray ?? _imageViewDraw; } public void CopyTo(ITexture destination, int firstLayer, int firstLevel) @@ -909,6 +911,11 @@ namespace Ryujinx.Graphics.Vulkan _imageViewIdentity.Dispose(); _imageView2dArray?.Dispose(); + if (_imageViewDraw != _imageViewIdentity) + { + _imageViewDraw.Dispose(); + } + Storage.DecrementViewsCount(); } } |