Vulkan: Use aspect flags for identity views for bindings (#5267)

This commit is contained in:
riperiperi 2023-06-09 00:23:36 +01:00 committed by GitHub
parent 2cdcfe46d8
commit 0003a7c118
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -15,6 +15,7 @@ namespace Ryujinx.Graphics.Vulkan
private readonly Device _device; private readonly Device _device;
private readonly Auto<DisposableImageView> _imageView; private readonly Auto<DisposableImageView> _imageView;
private readonly Auto<DisposableImageView> _imageViewDraw;
private readonly Auto<DisposableImageView> _imageViewIdentity; private readonly Auto<DisposableImageView> _imageViewIdentity;
private readonly Auto<DisposableImageView> _imageView2dArray; private readonly Auto<DisposableImageView> _imageView2dArray;
private Dictionary<GAL.Format, TextureView> _selfManagedViews; private Dictionary<GAL.Format, TextureView> _selfManagedViews;
@ -127,7 +128,8 @@ namespace Ryujinx.Graphics.Vulkan
ComponentSwizzle.B, ComponentSwizzle.B,
ComponentSwizzle.A); 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. // Framebuffer attachments also require 3D textures to be bound as 2D array.
if (info.Target == Target.Texture3D) if (info.Target == Target.Texture3D)
@ -169,7 +171,7 @@ namespace Ryujinx.Graphics.Vulkan
public Auto<DisposableImageView> GetImageViewForAttachment() public Auto<DisposableImageView> GetImageViewForAttachment()
{ {
return _imageView2dArray ?? _imageViewIdentity; return _imageView2dArray ?? _imageViewDraw;
} }
public void CopyTo(ITexture destination, int firstLayer, int firstLevel) public void CopyTo(ITexture destination, int firstLayer, int firstLevel)
@ -909,6 +911,11 @@ namespace Ryujinx.Graphics.Vulkan
_imageViewIdentity.Dispose(); _imageViewIdentity.Dispose();
_imageView2dArray?.Dispose(); _imageView2dArray?.Dispose();
if (_imageViewDraw != _imageViewIdentity)
{
_imageViewDraw.Dispose();
}
Storage.DecrementViewsCount(); Storage.DecrementViewsCount();
} }
} }