Merge pull request #3649 from FernandoS27/3d-fix

Texture Cache: Read current data when flushing a 3D segment.
This commit is contained in:
Rodrigo Locatti 2020-04-15 17:06:55 -03:00 committed by GitHub
commit 65cbb122ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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);