diff --git a/rpcs3/Emu/RSX/Capture/rsx_capture.cpp b/rpcs3/Emu/RSX/Capture/rsx_capture.cpp index 422d5e06b8..38707c0427 100644 --- a/rpcs3/Emu/RSX/Capture/rsx_capture.cpp +++ b/rpcs3/Emu/RSX/Capture/rsx_capture.cpp @@ -311,11 +311,12 @@ namespace rsx in_pitch = in_bpp * in_w; } - rsx->read_barrier(src_region.address, in_pitch * in_h); + const u32 src_size = in_pitch * (in_h - 1) + (in_w * in_bpp); + rsx->read_barrier(src_region.address, src_size); frame_capture_data::memory_block_data block_data; - block_data.data.resize(in_pitch * in_h); - std::memcpy(block_data.data.data(), pixels_src, in_pitch * in_h); + block_data.data.resize(src_size); + std::memcpy(block_data.data.data(), pixels_src, src_size); insert_mem_block_in_map(replay_command.memory_state, std::move(block), std::move(block_data)); capture_display_tile_state(rsx, replay_command); @@ -337,7 +338,7 @@ namespace rsx u32 src_dma = method_registers.nv0039_input_location(); u32 src_addr = get_address(src_offset, src_dma); - rsx->read_barrier(src_addr, in_pitch * line_count); + rsx->read_barrier(src_addr, in_pitch * (line_count - 1) + line_length); const u8* src = (u8*)vm::base(src_addr); @@ -345,7 +346,7 @@ namespace rsx block.offset = src_offset; block.location = src_dma; frame_capture_data::memory_block_data block_data; - block_data.data.resize(in_pitch * line_count); + block_data.data.resize(in_pitch * (line_count - 1) + line_length); for (u32 i = 0; i < line_count; ++i) { diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 75f186ca7d..0ff4d881e1 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -900,7 +900,7 @@ namespace rsx u8* pixels_dst = vm::_ptr(get_address(dst_offset + out_offset, dst_dma)); const auto read_address = get_address(src_offset, src_dma); - rsx->read_barrier(read_address, in_pitch * in_h); + rsx->read_barrier(read_address, in_pitch * (in_h - 1) + (in_w * in_bpp)); if (dst_color_format != rsx::blit_engine::transfer_destination_format::r5g6b5 && dst_color_format != rsx::blit_engine::transfer_destination_format::a8r8g8b8) @@ -1182,7 +1182,7 @@ namespace rsx u32 dst_dma = method_registers.nv0039_output_location(); const auto read_address = get_address(src_offset, src_dma); - rsx->read_barrier(read_address, in_pitch * line_count); + rsx->read_barrier(read_address, in_pitch * (line_count - 1) + line_length); u8 *dst = (u8*)vm::base(get_address(dst_offset, dst_dma)); const u8 *src = (u8*)vm::base(read_address);