From a382fb08a4bbbc7c6e7838e3aa93100120af5a27 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Tue, 9 Jul 2024 15:12:42 +0200 Subject: [PATCH] rusticl/memory: optimize sw_copy when the row_pitch matches the height Part-of: --- src/gallium/frontends/rusticl/core/memory.rs | 29 +++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/gallium/frontends/rusticl/core/memory.rs b/src/gallium/frontends/rusticl/core/memory.rs index c62623028b8..aa2dd7d9a79 100644 --- a/src/gallium/frontends/rusticl/core/memory.rs +++ b/src/gallium/frontends/rusticl/core/memory.rs @@ -347,21 +347,36 @@ fn sw_copy( dst_slice_pitch: usize, pixel_size: u8, ) { + let pixel_size = pixel_size as usize; for z in 0..region[2] { - for y in 0..region[1] { + if src_row_pitch == dst_row_pitch && region[1] * pixel_size == src_row_pitch { unsafe { ptr::copy( src.add( - (*src_origin + [0, y, z]) - * [pixel_size as usize, src_row_pitch, src_slice_pitch], + (*src_origin + [0, 0, z]) * [pixel_size, src_row_pitch, src_slice_pitch], ), dst.add( - (*dst_origin + [0, y, z]) - * [pixel_size as usize, dst_row_pitch, dst_slice_pitch], + (*dst_origin + [0, 0, z]) * [pixel_size, dst_row_pitch, dst_slice_pitch], ), - region[0] * pixel_size as usize, + region[0] * region[1] * pixel_size, ) - }; + } + } else { + for y in 0..region[1] { + unsafe { + ptr::copy( + src.add( + (*src_origin + [0, y, z]) + * [pixel_size, src_row_pitch, src_slice_pitch], + ), + dst.add( + (*dst_origin + [0, y, z]) + * [pixel_size, dst_row_pitch, dst_slice_pitch], + ), + region[0] * pixel_size, + ) + }; + } } } }