aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2023-06-09 00:23:36 +0100
committerGitHub <noreply@github.com>2023-06-08 20:23:36 -0300
commit0003a7c11815d2a9dbbd5bf89845c9d90f6fff62 (patch)
tree572153a7618dd89df85ccb6a3dbc425a92ece785
parent2cdcfe46d8959b0cbd8aea3b4439b30a55d47f00 (diff)
Vulkan: Use aspect flags for identity views for bindings (#5267)1.1.872
-rw-r--r--src/Ryujinx.Graphics.Vulkan/TextureView.cs11
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();
}
}