summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastian Valle <subv2112@gmail.com>2018-04-29 09:49:33 -0500
committerGitHub <noreply@github.com>2018-04-29 09:49:33 -0500
commitfaa431b27466822728d56ebae84d2201197fd856 (patch)
treef087a390c3c99076216bb42065690dc19d01ac41 /src
parent3d9126ba8775398b761ad6246ff4db5f2363149c (diff)
parentf87ea8fa8b5c28f0af2fe1e7ccffa52c43d5a099 (diff)
Merge pull request #418 from bunnei/copy-block-height
fermi_2d: Fix surface copy block height.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/engines/fermi_2d.cpp4
-rw-r--r--src/video_core/engines/fermi_2d.h5
2 files changed, 7 insertions, 2 deletions
diff --git a/src/video_core/engines/fermi_2d.cpp b/src/video_core/engines/fermi_2d.cpp
index 9019f2504..6b9382f06 100644
--- a/src/video_core/engines/fermi_2d.cpp
+++ b/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());
}
}
diff --git a/src/video_core/engines/fermi_2d.h b/src/video_core/engines/fermi_2d.h
index 0c5b413cc..70667cb94 100644
--- a/src/video_core/engines/fermi_2d.h
+++ b/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");