From f2b1cfe10c46a86e561a63210790344094b5c9ce Mon Sep 17 00:00:00 2001 From: riperiperi Date: Tue, 14 Jun 2022 23:59:04 +0100 Subject: [PATCH] Fix D32S8 copy workaround (AMD) Fixes water in Pokemon Legends Arceus on AMD GPUs. Possibly fixes other things. --- Ryujinx.Graphics.Vulkan/TextureStorage.cs | 10 ++++++++-- Ryujinx.Graphics.Vulkan/TextureView.cs | 12 ++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Ryujinx.Graphics.Vulkan/TextureStorage.cs b/Ryujinx.Graphics.Vulkan/TextureStorage.cs index a91efc49a..2068324cb 100644 --- a/Ryujinx.Graphics.Vulkan/TextureStorage.cs +++ b/Ryujinx.Graphics.Vulkan/TextureStorage.cs @@ -329,7 +329,8 @@ namespace Ryujinx.Graphics.Vulkan int dstLayers, int dstLevels, bool singleSlice, - ImageAspectFlags aspectFlags) + ImageAspectFlags aspectFlags, + bool forFlush) { bool is3D = Info.Target == Target.Texture3D; int width = Info.Width; @@ -343,7 +344,12 @@ namespace Ryujinx.Graphics.Vulkan for (int level = 0; level < levels; level++) { - int mipSize = GetBufferDataLength(Info.GetMipSize(level)); + int mipSize = Info.GetMipSize(level); + + if (forFlush) + { + mipSize = GetBufferDataLength(mipSize); + } int endOffset = offset + mipSize; diff --git a/Ryujinx.Graphics.Vulkan/TextureView.cs b/Ryujinx.Graphics.Vulkan/TextureView.cs index eac4e84c2..42786a2c8 100644 --- a/Ryujinx.Graphics.Vulkan/TextureView.cs +++ b/Ryujinx.Graphics.Vulkan/TextureView.cs @@ -592,7 +592,8 @@ namespace Ryujinx.Graphics.Vulkan 1, levels, true, - aspectFlags); + aspectFlags, + false); BufferHolder.InsertBufferBarrier( gd, @@ -618,7 +619,8 @@ namespace Ryujinx.Graphics.Vulkan 1, levels, true, - aspectFlags); + aspectFlags, + false); InsertImageBarrier( gd.Api, @@ -680,7 +682,8 @@ namespace Ryujinx.Graphics.Vulkan 1, levels, true, - aspectFlags); + aspectFlags, + false); BufferHolder.InsertBufferBarrier( gd, @@ -706,7 +709,8 @@ namespace Ryujinx.Graphics.Vulkan 1, levels, true, - aspectFlags); + aspectFlags, + false); } SlowBlit(d32SrcStorage, d32DstStorage, ImageAspectFlags.ImageAspectDepthBit);