summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar liamwhite2023-08-18 09:12:27 -0400
committerGravatar GitHub2023-08-18 09:12:27 -0400
commitae1421265abe1fd5633cab5a54b59dcd818866c7 (patch)
tree741dd1c97c5c2e0f4d63199ccff15c3a3769f4f3 /src/video_core/renderer_vulkan
parentMerge pull request #11288 from liamwhite/svc-tick (diff)
parentMark accelerted DMA destination buffers and images as GPU-modified (diff)
downloadyuzu-ae1421265abe1fd5633cab5a54b59dcd818866c7.tar.gz
yuzu-ae1421265abe1fd5633cab5a54b59dcd818866c7.tar.xz
yuzu-ae1421265abe1fd5633cab5a54b59dcd818866c7.zip
Merge pull request #11278 from Kelebek1/dma_sync
Mark accelerated 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 }