summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar Kelebek12023-08-13 00:12:08 +0100
committerGravatar Kelebek12023-08-13 02:22:39 +0100
commit5a37b8f2c1e724671e900fef31435b0ff66a9b73 (patch)
tree0a58be4ca860ec01b9f6633bc6c43018967e1abd /src/video_core/renderer_vulkan
parentMerge pull request #11219 from zeltermann/title-id-search (diff)
downloadyuzu-5a37b8f2c1e724671e900fef31435b0ff66a9b73.tar.gz
yuzu-5a37b8f2c1e724671e900fef31435b0ff66a9b73.tar.xz
yuzu-5a37b8f2c1e724671e900fef31435b0ff66a9b73.zip
Mark accelerted DMA destination buffers and images as GPU-modified
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index aa59889bd..89aa243d2 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -830,7 +830,8 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info,
830 } 830 }
831 const u32 buffer_size = static_cast<u32>(buffer_operand.pitch * buffer_operand.height); 831 const u32 buffer_size = static_cast<u32>(buffer_operand.pitch * buffer_operand.height);
832 static constexpr auto sync_info = VideoCommon::ObtainBufferSynchronize::FullSynchronize; 832 static constexpr auto sync_info = VideoCommon::ObtainBufferSynchronize::FullSynchronize;
833 const auto post_op = VideoCommon::ObtainBufferOperation::DoNothing; 833 const auto post_op = IS_IMAGE_UPLOAD ? VideoCommon::ObtainBufferOperation::DoNothing
834 : VideoCommon::ObtainBufferOperation::MarkAsWritten;
834 const auto [buffer, offset] = 835 const auto [buffer, offset] =
835 buffer_cache.ObtainBuffer(buffer_operand.address, buffer_size, sync_info, post_op); 836 buffer_cache.ObtainBuffer(buffer_operand.address, buffer_size, sync_info, post_op);
836 837
@@ -839,8 +840,12 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info,
839 const std::span copy_span{&copy, 1}; 840 const std::span copy_span{&copy, 1};
840 841
841 if constexpr (IS_IMAGE_UPLOAD) { 842 if constexpr (IS_IMAGE_UPLOAD) {
843 texture_cache.PrepareImage(image_id, true, false);
842 image->UploadMemory(buffer->Handle(), offset, copy_span); 844 image->UploadMemory(buffer->Handle(), offset, copy_span);
843 } else { 845 } else {
846 if (offset % BytesPerBlock(image->info.format)) {
847 return false;
848 }
844 texture_cache.DownloadImageIntoBuffer(image, buffer->Handle(), offset, copy_span, 849 texture_cache.DownloadImageIntoBuffer(image, buffer->Handle(), offset, copy_span,
845 buffer_operand.address, buffer_size); 850 buffer_operand.address, buffer_size);
846 } 851 }