TextureCache: refactor DMA downloads to allow multiple buffers.
This commit is contained in:
parent
9bf19b04f6
commit
3fbee093b2
8 changed files with 75 additions and 41 deletions
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2021 yuzu Emulator Project
|
||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
@ -833,6 +833,16 @@ std::pair<typename TextureCache<P>::Image*, BufferImageCopy> TextureCache<P>::Dm
|
|||
return {image, copy};
|
||||
}
|
||||
|
||||
template <class P>
|
||||
void TextureCache<P>::DownloadImageIntoBuffer(
|
||||
typename TextureCache<P>::Image* image, typename TextureCache<P>::BufferType buffer,
|
||||
size_t buffer_offset, std::span<const VideoCommon::BufferImageCopy> copies) {
|
||||
std::array buffers{
|
||||
buffer,
|
||||
};
|
||||
image->DownloadMemory(buffers, buffer_offset, copies);
|
||||
}
|
||||
|
||||
template <class P>
|
||||
void TextureCache<P>::RefreshContents(Image& image, ImageId image_id) {
|
||||
if (False(image.flags & ImageFlagBits::CpuModified)) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2021 yuzu Emulator Project
|
||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
@ -119,6 +119,7 @@ class TextureCache : public VideoCommon::ChannelSetupCaches<TextureCacheChannelI
|
|||
using Sampler = typename P::Sampler;
|
||||
using Framebuffer = typename P::Framebuffer;
|
||||
using AsyncBuffer = typename P::AsyncBuffer;
|
||||
using BufferType = typename P::BufferType;
|
||||
|
||||
struct BlitImages {
|
||||
ImageId dst_id;
|
||||
|
@ -215,6 +216,9 @@ public:
|
|||
const Tegra::DMA::ImageCopy& copy_info, const Tegra::DMA::BufferOperand& buffer_operand,
|
||||
const Tegra::DMA::ImageOperand& image_operand, ImageId image_id, bool modifies_image);
|
||||
|
||||
void DownloadImageIntoBuffer(Image* image, BufferType buffer, size_t buffer_offset,
|
||||
std::span<const VideoCommon::BufferImageCopy> copies);
|
||||
|
||||
/// Return true when a CPU region is modified from the GPU
|
||||
[[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue