diff options
| author | 2020-04-12 17:06:05 -0400 | |
|---|---|---|
| committer | 2020-04-15 11:46:17 -0400 | |
| commit | 6789d88a9c9dd4dd7f62d0a8a6291771499590a6 (patch) | |
| tree | 27539782686570ef884fff36c50130d405e2055f | |
| parent | Merge pull request #3636 from ReinUsesLisp/drop-vk-hpp (diff) | |
| download | yuzu-6789d88a9c9dd4dd7f62d0a8a6291771499590a6.tar.gz yuzu-6789d88a9c9dd4dd7f62d0a8a6291771499590a6.tar.xz yuzu-6789d88a9c9dd4dd7f62d0a8a6291771499590a6.zip | |
Texture Cache: Read current data when flushing a 3D segment.
This PR corrects flushing of 3D segments when data of other segments is
mixed, this aims to preserve the data in place.
| -rw-r--r-- | src/video_core/texture_cache/surface_base.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/video_core/texture_cache/surface_base.cpp b/src/video_core/texture_cache/surface_base.cpp index 7af0e792c..715f39d0d 100644 --- a/src/video_core/texture_cache/surface_base.cpp +++ b/src/video_core/texture_cache/surface_base.cpp | |||
| @@ -248,8 +248,14 @@ void SurfaceBaseImpl::FlushBuffer(Tegra::MemoryManager& memory_manager, | |||
| 248 | 248 | ||
| 249 | // Use an extra temporal buffer | 249 | // Use an extra temporal buffer |
| 250 | auto& tmp_buffer = staging_cache.GetBuffer(1); | 250 | auto& tmp_buffer = staging_cache.GetBuffer(1); |
| 251 | // Special case for 3D Texture Segments | ||
| 252 | const bool must_read_current_data = | ||
| 253 | params.block_depth > 0 && params.target == VideoCore::Surface::SurfaceTarget::Texture2D; | ||
| 251 | tmp_buffer.resize(guest_memory_size); | 254 | tmp_buffer.resize(guest_memory_size); |
| 252 | host_ptr = tmp_buffer.data(); | 255 | host_ptr = tmp_buffer.data(); |
| 256 | if (must_read_current_data) { | ||
| 257 | memory_manager.ReadBlockUnsafe(gpu_addr, host_ptr, guest_memory_size); | ||
| 258 | } | ||
| 253 | 259 | ||
| 254 | if (params.is_tiled) { | 260 | if (params.is_tiled) { |
| 255 | ASSERT_MSG(params.block_width == 0, "Block width is defined as {}", params.block_width); | 261 | ASSERT_MSG(params.block_width == 0, "Block width is defined as {}", params.block_width); |