Jelajahi Sumber

fermi_2d: Fix surface copy block height.

bunnei 8 tahun lalu
induk
melakukan
f87ea8fa8b
2 mengubah file dengan 7 tambahan dan 2 penghapusan
  1. 2 2
      src/video_core/engines/fermi_2d.cpp
  2. 5 0
      src/video_core/engines/fermi_2d.h

+ 2 - 2
src/video_core/engines/fermi_2d.cpp

@@ -59,12 +59,12 @@ void Fermi2D::HandleSurfaceCopy() {
         // If the input is tiled and the output is linear, deswizzle the input and copy it over.
         Texture::CopySwizzledData(regs.src.width, regs.src.height, src_bytes_per_pixel,
                                   dst_bytes_per_pixel, src_buffer, dst_buffer, true,
-                                  regs.src.block_height);
+                                  regs.src.BlockHeight());
     } else {
         // If the input is linear and the output is tiled, swizzle the input and copy it over.
         Texture::CopySwizzledData(regs.src.width, regs.src.height, src_bytes_per_pixel,
                                   dst_bytes_per_pixel, dst_buffer, src_buffer, false,
-                                  regs.dst.block_height);
+                                  regs.dst.BlockHeight());
     }
 }
 

+ 5 - 0
src/video_core/engines/fermi_2d.h

@@ -49,6 +49,11 @@ public:
                 return static_cast<GPUVAddr>((static_cast<GPUVAddr>(address_high) << 32) |
                                              address_low);
             }
+
+            u32 BlockHeight() const {
+                // The block height is stored in log2 format.
+                return 1 << block_height;
+            }
         };
         static_assert(sizeof(Surface) == 0x28, "Surface has incorrect size");