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.
This commit is contained in:
Fernando Sahmkow 2020-04-12 17:06:05 -04:00
parent 7e4a132a77
commit 6789d88a9c
1 changed files with 6 additions and 0 deletions

View File

@ -248,8 +248,14 @@ void SurfaceBaseImpl::FlushBuffer(Tegra::MemoryManager& memory_manager,
// Use an extra temporal buffer // Use an extra temporal buffer
auto& tmp_buffer = staging_cache.GetBuffer(1); auto& tmp_buffer = staging_cache.GetBuffer(1);
// Special case for 3D Texture Segments
const bool must_read_current_data =
params.block_depth > 0 && params.target == VideoCore::Surface::SurfaceTarget::Texture2D;
tmp_buffer.resize(guest_memory_size); tmp_buffer.resize(guest_memory_size);
host_ptr = tmp_buffer.data(); host_ptr = tmp_buffer.data();
if (must_read_current_data) {
memory_manager.ReadBlockUnsafe(gpu_addr, host_ptr, guest_memory_size);
}
if (params.is_tiled) { if (params.is_tiled) {
ASSERT_MSG(params.block_width == 0, "Block width is defined as {}", params.block_width); ASSERT_MSG(params.block_width == 0, "Block width is defined as {}", params.block_width);