Skip to content

Commit 0052108

Browse files
committed
rsx/rtt: Fix transfer region calculation when source and destination scaling does not match
1 parent 64c2495 commit 0052108

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

rpcs3/Emu/RSX/Common/surface_utils.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -559,18 +559,20 @@ namespace rsx
559559
{
560560
const auto& src_res_scale = region.source->resolution_scaling_config;
561561
const auto& dst_res_scale = resolution_scaling_config;
562+
const auto src_surface = ensure(dynamic_cast<const render_target_descriptor*>(slice.source));
563+
const auto dst_surface = ensure(dynamic_cast<const render_target_descriptor*>(slice.target));
562564

563-
auto [src_width, src_height] = rsx::apply_resolution_scale<true>(src_res_scale, slice.width, slice.height, slice.source->width(), slice.source->height());
564-
auto [dst_width, dst_height] = rsx::apply_resolution_scale<true>(dst_res_scale, slice.width, slice.height, slice.target->width(), slice.target->height());
565+
auto [src_width, src_height] = rsx::apply_resolution_scale<true>(src_res_scale, slice.width, slice.height, src_surface->get_surface_width(), src_surface->get_surface_height());
566+
auto [dst_width, dst_height] = rsx::apply_resolution_scale<true>(dst_res_scale, slice.width, slice.height, dst_surface->get_surface_width(), dst_surface->get_surface_height());
565567

566568
slice.transfer_scale_x *= f32(dst_width) / src_width;
567569
slice.transfer_scale_y *= f32(dst_height) / src_height;
568570

569571
slice.width = src_width;
570572
slice.height = src_height;
571573

572-
std::tie(slice.src_x, slice.src_y) = rsx::apply_resolution_scale<false>(src_res_scale, slice.src_x, slice.src_y, slice.source->width(), slice.source->height());
573-
std::tie(slice.dst_x, slice.dst_y) = rsx::apply_resolution_scale<false>(dst_res_scale, slice.dst_x, slice.dst_y, slice.target->width(), slice.target->height());
574+
std::tie(slice.src_x, slice.src_y) = rsx::apply_resolution_scale<false>(src_res_scale, slice.src_x, slice.src_y, src_surface->get_surface_width(), src_surface->get_surface_height());
575+
std::tie(slice.dst_x, slice.dst_y) = rsx::apply_resolution_scale<false>(dst_res_scale, slice.dst_x, slice.dst_y, dst_surface->get_surface_width(), dst_surface->get_surface_height());
574576
}
575577
}
576578

0 commit comments

Comments
 (0)