From 0003a7c11815d2a9dbbd5bf89845c9d90f6fff62 Mon Sep 17 00:00:00 2001
From: riperiperi <rhy3756547@hotmail.com>
Date: Fri, 9 Jun 2023 00:23:36 +0100
Subject: [PATCH] Vulkan: Use aspect flags for identity views for bindings
 (#5267)

---
 src/Ryujinx.Graphics.Vulkan/TextureView.cs | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/Ryujinx.Graphics.Vulkan/TextureView.cs b/src/Ryujinx.Graphics.Vulkan/TextureView.cs
index c2be74974..eb094b3e6 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();
                 }
             }