Fix D32S8 copy workaround (AMD)

Fixes water in Pokemon Legends Arceus on AMD GPUs. Possibly fixes other things.
This commit is contained in:
riperiperi 2022-06-14 23:59:04 +01:00
parent 002bfc65ae
commit f2b1cfe10c
2 changed files with 16 additions and 6 deletions

View file

@ -329,7 +329,8 @@ namespace Ryujinx.Graphics.Vulkan
int dstLayers, int dstLayers,
int dstLevels, int dstLevels,
bool singleSlice, bool singleSlice,
ImageAspectFlags aspectFlags) ImageAspectFlags aspectFlags,
bool forFlush)
{ {
bool is3D = Info.Target == Target.Texture3D; bool is3D = Info.Target == Target.Texture3D;
int width = Info.Width; int width = Info.Width;
@ -343,7 +344,12 @@ namespace Ryujinx.Graphics.Vulkan
for (int level = 0; level < levels; level++) 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; int endOffset = offset + mipSize;

View file

@ -592,7 +592,8 @@ namespace Ryujinx.Graphics.Vulkan
1, 1,
levels, levels,
true, true,
aspectFlags); aspectFlags,
false);
BufferHolder.InsertBufferBarrier( BufferHolder.InsertBufferBarrier(
gd, gd,
@ -618,7 +619,8 @@ namespace Ryujinx.Graphics.Vulkan
1, 1,
levels, levels,
true, true,
aspectFlags); aspectFlags,
false);
InsertImageBarrier( InsertImageBarrier(
gd.Api, gd.Api,
@ -680,7 +682,8 @@ namespace Ryujinx.Graphics.Vulkan
1, 1,
levels, levels,
true, true,
aspectFlags); aspectFlags,
false);
BufferHolder.InsertBufferBarrier( BufferHolder.InsertBufferBarrier(
gd, gd,
@ -706,7 +709,8 @@ namespace Ryujinx.Graphics.Vulkan
1, 1,
levels, levels,
true, true,
aspectFlags); aspectFlags,
false);
} }
SlowBlit(d32SrcStorage, d32DstStorage, ImageAspectFlags.ImageAspectDepthBit); SlowBlit(d32SrcStorage, d32DstStorage, ImageAspectFlags.ImageAspectDepthBit);