From a7c28f582797a0fe01dcfd1cc43f8ec4ec0e0d75 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sat, 22 Jul 2017 18:34:33 +0300 Subject: [PATCH] rsx: Fix remainder/iteration computations in BufferUtils --- rpcs3/Emu/RSX/Common/BufferUtils.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/RSX/Common/BufferUtils.cpp b/rpcs3/Emu/RSX/Common/BufferUtils.cpp index ee318c2a05..dda7f724a8 100644 --- a/rpcs3/Emu/RSX/Common/BufferUtils.cpp +++ b/rpcs3/Emu/RSX/Common/BufferUtils.cpp @@ -125,8 +125,13 @@ namespace u32 min_block_size = std::min(src_stride, dst_stride); if (min_block_size == 0) min_block_size = dst_stride; - const u32 remainder = is_128_aligned? 0: (16 - min_block_size) / min_block_size; - const u32 iterations = is_128_aligned? vertex_count: vertex_count - remainder; + u32 iterations = 0; + u32 remainder = is_128_aligned ? 0 : 1 + ((16 - min_block_size) / min_block_size); + + if (vertex_count > remainder) + iterations = vertex_count - remainder; + else + remainder = vertex_count; for (u32 i = 0; i < iterations; ++i) { @@ -168,8 +173,13 @@ namespace u32 min_block_size = std::min(src_stride, dst_stride); if (min_block_size == 0) min_block_size = dst_stride; - const u32 remainder = is_128_aligned ? 0 : (16 - min_block_size) / min_block_size; - const u32 iterations = is_128_aligned ? vertex_count : vertex_count - remainder; + u32 iterations = 0; + u32 remainder = is_128_aligned ? 0 : 1 + ((16 - min_block_size) / min_block_size); + + if (vertex_count > remainder) + iterations = vertex_count - remainder; + else + remainder = vertex_count; for (u32 i = 0; i < iterations; ++i) {