diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 30fe031c06b..3441df6c71a 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -1566,9 +1566,10 @@ static void handle_copy_image_to_buffer(struct lvp_cmd_buffer_entry *cmd, if (buffer_image_height == 0) buffer_image_height = copycmd->regions[i].imageExtent.height; + unsigned img_stride = util_format_get_2d_size(dst_format, buffer_row_len, buffer_image_height); if (src_format != dst_format) { copy_depth_box(dst_data, dst_format, - buffer_row_len, buffer_row_len * buffer_image_height, + buffer_row_len, img_stride, 0, 0, 0, copycmd->regions[i].imageExtent.width, copycmd->regions[i].imageExtent.height, @@ -1576,7 +1577,7 @@ static void handle_copy_image_to_buffer(struct lvp_cmd_buffer_entry *cmd, src_data, src_format, src_t->stride, src_t->layer_stride, 0, 0, 0); } else { util_copy_box((ubyte *)dst_data, src_format, - buffer_row_len, buffer_row_len * buffer_image_height, + buffer_row_len, img_stride, 0, 0, 0, copycmd->regions[i].imageExtent.width, copycmd->regions[i].imageExtent.height, @@ -1646,6 +1647,7 @@ static void handle_copy_buffer_to_image(struct lvp_cmd_buffer_entry *cmd, if (buffer_image_height == 0) buffer_image_height = copycmd->regions[i].imageExtent.height; + unsigned img_stride = util_format_get_2d_size(src_format, buffer_row_len, buffer_image_height); if (src_format != dst_format) { copy_depth_box(dst_data, dst_format, dst_t->stride, dst_t->layer_stride, @@ -1654,7 +1656,7 @@ static void handle_copy_buffer_to_image(struct lvp_cmd_buffer_entry *cmd, copycmd->regions[i].imageExtent.height, box.depth, src_data, src_format, - buffer_row_len, buffer_row_len * buffer_image_height, 0, 0, 0); + buffer_row_len, img_stride, 0, 0, 0); } else { util_copy_box(dst_data, dst_format, dst_t->stride, dst_t->layer_stride, @@ -1663,7 +1665,7 @@ static void handle_copy_buffer_to_image(struct lvp_cmd_buffer_entry *cmd, copycmd->regions[i].imageExtent.height, box.depth, src_data, - buffer_row_len, buffer_row_len * buffer_image_height, 0, 0, 0); + buffer_row_len, img_stride, 0, 0, 0); } state->pctx->transfer_unmap(state->pctx, src_t); state->pctx->transfer_unmap(state->pctx, dst_t);