lavapipe: fix 3d compressed texture copies.
The img stride was being calculated incorrectly. Fixes crashes in: dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.3d.bc1_rgb_srgb_block.bc1_rgb_srgb_block.general_general Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7416>
This commit is contained in:
parent
42b5cfdbd2
commit
c871ac04a1
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue