summaryrefslogtreecommitdiff
path: root/src/video_core/texture_cache
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2023-03-12 21:43:31 +0100
committerGravatar Fernando Sahmkow2023-04-29 00:18:21 +0200
commit3fbee093b2bf3b4c15dbc5bb48a3bc768ecedbc9 (patch)
tree3910e8dad8f813ec61643f4d6c30097b548e60a1 /src/video_core/texture_cache
parentMerge pull request #10051 from liamwhite/surface-capabilities (diff)
downloadyuzu-3fbee093b2bf3b4c15dbc5bb48a3bc768ecedbc9.tar.gz
yuzu-3fbee093b2bf3b4c15dbc5bb48a3bc768ecedbc9.tar.xz
yuzu-3fbee093b2bf3b4c15dbc5bb48a3bc768ecedbc9.zip
TextureCache: refactor DMA downloads to allow multiple buffers.
Diffstat (limited to 'src/video_core/texture_cache')
-rw-r--r--src/video_core/texture_cache/texture_cache.h12
-rw-r--r--src/video_core/texture_cache/texture_cache_base.h6
2 files changed, 16 insertions, 2 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index ed5c768d8..2cd5aa31e 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -1,4 +1,4 @@
1// SPDX-FileCopyrightText: 2021 yuzu Emulator Project 1// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#pragma once 4#pragma once
@@ -834,6 +834,16 @@ std::pair<typename TextureCache<P>::Image*, BufferImageCopy> TextureCache<P>::Dm
834} 834}
835 835
836template <class P> 836template <class P>
837void TextureCache<P>::DownloadImageIntoBuffer(
838 typename TextureCache<P>::Image* image, typename TextureCache<P>::BufferType buffer,
839 size_t buffer_offset, std::span<const VideoCommon::BufferImageCopy> copies) {
840 std::array buffers{
841 buffer,
842 };
843 image->DownloadMemory(buffers, buffer_offset, copies);
844}
845
846template <class P>
837void TextureCache<P>::RefreshContents(Image& image, ImageId image_id) { 847void TextureCache<P>::RefreshContents(Image& image, ImageId image_id) {
838 if (False(image.flags & ImageFlagBits::CpuModified)) { 848 if (False(image.flags & ImageFlagBits::CpuModified)) {
839 // Only upload modified images 849 // Only upload modified images
diff --git a/src/video_core/texture_cache/texture_cache_base.h b/src/video_core/texture_cache/texture_cache_base.h
index 5a5b4179c..51f44aed5 100644
--- a/src/video_core/texture_cache/texture_cache_base.h
+++ b/src/video_core/texture_cache/texture_cache_base.h
@@ -1,4 +1,4 @@
1// SPDX-FileCopyrightText: 2021 yuzu Emulator Project 1// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#pragma once 4#pragma once
@@ -119,6 +119,7 @@ class TextureCache : public VideoCommon::ChannelSetupCaches<TextureCacheChannelI
119 using Sampler = typename P::Sampler; 119 using Sampler = typename P::Sampler;
120 using Framebuffer = typename P::Framebuffer; 120 using Framebuffer = typename P::Framebuffer;
121 using AsyncBuffer = typename P::AsyncBuffer; 121 using AsyncBuffer = typename P::AsyncBuffer;
122 using BufferType = typename P::BufferType;
122 123
123 struct BlitImages { 124 struct BlitImages {
124 ImageId dst_id; 125 ImageId dst_id;
@@ -215,6 +216,9 @@ public:
215 const Tegra::DMA::ImageCopy& copy_info, const Tegra::DMA::BufferOperand& buffer_operand, 216 const Tegra::DMA::ImageCopy& copy_info, const Tegra::DMA::BufferOperand& buffer_operand,
216 const Tegra::DMA::ImageOperand& image_operand, ImageId image_id, bool modifies_image); 217 const Tegra::DMA::ImageOperand& image_operand, ImageId image_id, bool modifies_image);
217 218
219 void DownloadImageIntoBuffer(Image* image, BufferType buffer, size_t buffer_offset,
220 std::span<const VideoCommon::BufferImageCopy> copies);
221
218 /// Return true when a CPU region is modified from the GPU 222 /// Return true when a CPU region is modified from the GPU
219 [[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size); 223 [[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size);
220 224