mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-07 12:40:01 +00:00
rsx image_in: Fix src size calculation when in_pitch != line_lengh
This commit is contained in:
parent
0a1da14a15
commit
d1d3ac984e
@ -311,11 +311,12 @@ namespace rsx
|
|||||||
in_pitch = in_bpp * in_w;
|
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;
|
frame_capture_data::memory_block_data block_data;
|
||||||
block_data.data.resize(in_pitch * in_h);
|
block_data.data.resize(src_size);
|
||||||
std::memcpy(block_data.data.data(), pixels_src, in_pitch * in_h);
|
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));
|
insert_mem_block_in_map(replay_command.memory_state, std::move(block), std::move(block_data));
|
||||||
|
|
||||||
capture_display_tile_state(rsx, replay_command);
|
capture_display_tile_state(rsx, replay_command);
|
||||||
@ -337,7 +338,7 @@ namespace rsx
|
|||||||
u32 src_dma = method_registers.nv0039_input_location();
|
u32 src_dma = method_registers.nv0039_input_location();
|
||||||
u32 src_addr = get_address(src_offset, src_dma);
|
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);
|
const u8* src = (u8*)vm::base(src_addr);
|
||||||
|
|
||||||
@ -345,7 +346,7 @@ namespace rsx
|
|||||||
block.offset = src_offset;
|
block.offset = src_offset;
|
||||||
block.location = src_dma;
|
block.location = src_dma;
|
||||||
frame_capture_data::memory_block_data block_data;
|
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)
|
for (u32 i = 0; i < line_count; ++i)
|
||||||
{
|
{
|
||||||
|
@ -900,7 +900,7 @@ namespace rsx
|
|||||||
u8* pixels_dst = vm::_ptr<u8>(get_address(dst_offset + out_offset, dst_dma));
|
u8* pixels_dst = vm::_ptr<u8>(get_address(dst_offset + out_offset, dst_dma));
|
||||||
|
|
||||||
const auto read_address = get_address(src_offset, src_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 &&
|
if (dst_color_format != rsx::blit_engine::transfer_destination_format::r5g6b5 &&
|
||||||
dst_color_format != rsx::blit_engine::transfer_destination_format::a8r8g8b8)
|
dst_color_format != rsx::blit_engine::transfer_destination_format::a8r8g8b8)
|
||||||
@ -1182,7 +1182,7 @@ namespace rsx
|
|||||||
u32 dst_dma = method_registers.nv0039_output_location();
|
u32 dst_dma = method_registers.nv0039_output_location();
|
||||||
|
|
||||||
const auto read_address = get_address(src_offset, src_dma);
|
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));
|
u8 *dst = (u8*)vm::base(get_address(dst_offset, dst_dma));
|
||||||
const u8 *src = (u8*)vm::base(read_address);
|
const u8 *src = (u8*)vm::base(read_address);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user