aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/TextureView.cs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/TextureView.cs b/src/Ryujinx.Graphics.Vulkan/TextureView.cs
index eb612da7..d4f26a2d 100644
--- a/src/Ryujinx.Graphics.Vulkan/TextureView.cs
+++ b/src/Ryujinx.Graphics.Vulkan/TextureView.cs
@@ -667,8 +667,36 @@ namespace Ryujinx.Graphics.Vulkan
if (PrepareOutputBuffer(cbs, hostSize, buffer, out VkBuffer copyToBuffer, out BufferHolder tempCopyHolder))
{
+ // No barrier necessary, as this is a temporary copy buffer.
offset = 0;
}
+ else
+ {
+ BufferHolder.InsertBufferBarrier(
+ _gd,
+ cbs.CommandBuffer,
+ copyToBuffer,
+ BufferHolder.DefaultAccessFlags,
+ AccessFlags.TransferWriteBit,
+ PipelineStageFlags.AllCommandsBit,
+ PipelineStageFlags.TransferBit,
+ offset,
+ outSize);
+ }
+
+ InsertImageBarrier(
+ _gd.Api,
+ cbs.CommandBuffer,
+ image,
+ TextureStorage.DefaultAccessMask,
+ AccessFlags.TransferReadBit,
+ PipelineStageFlags.AllCommandsBit,
+ PipelineStageFlags.TransferBit,
+ Info.Format.ConvertAspectFlags(),
+ FirstLayer + layer,
+ FirstLevel + level,
+ 1,
+ 1);
CopyFromOrToBuffer(cbs.CommandBuffer, copyToBuffer, image, hostSize, true, layer, level, 1, 1, singleSlice: true, offset, stride);
@@ -677,6 +705,19 @@ namespace Ryujinx.Graphics.Vulkan
CopyDataToOutputBuffer(cbs, tempCopyHolder, autoBuffer, hostSize, range.Offset);
tempCopyHolder.Dispose();
}
+ else
+ {
+ BufferHolder.InsertBufferBarrier(
+ _gd,
+ cbs.CommandBuffer,
+ copyToBuffer,
+ AccessFlags.TransferWriteBit,
+ BufferHolder.DefaultAccessFlags,
+ PipelineStageFlags.TransferBit,
+ PipelineStageFlags.AllCommandsBit,
+ offset,
+ outSize);
+ }
}
private ReadOnlySpan<byte> GetData(CommandBufferPool cbp, PersistentFlushBuffer flushBuffer)