Просмотр исходного кода

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

Texture Cache: Read current data when flushing a 3D segment.
Rodrigo Locatti 6 лет назад
Родитель
Сommit
65cbb122ea
1 измененных файлов с 6 добавлено и 0 удалено
  1. 6 0
      src/video_core/texture_cache/surface_base.cpp

+ 6 - 0
src/video_core/texture_cache/surface_base.cpp

@@ -248,8 +248,14 @@ void SurfaceBaseImpl::FlushBuffer(Tegra::MemoryManager& memory_manager,
 
     // Use an extra temporal buffer
     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);
     host_ptr = tmp_buffer.data();
+    if (must_read_current_data) {
+        memory_manager.ReadBlockUnsafe(gpu_addr, host_ptr, guest_memory_size);
+    }
 
     if (params.is_tiled) {
         ASSERT_MSG(params.block_width == 0, "Block width is defined as {}", params.block_width);