v3dv: fix 3D image blits

Specifically, we should select the slice to blit from on the source
image to be in the middle of the depth step.

This issue was only raised recently after the CTS improved the 3D
blitting tests.

Fixes:
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.*.3d.*

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
Iago Toral Quiroga 2020-08-25 10:17:29 +02:00 committed by Marge Bot
parent 0d046516f3
commit 07828c0456

View file

@ -4033,8 +4033,15 @@ blit_shader(struct v3dv_cmd_buffer *cmd_buffer,
if (!job)
goto fail;
if (src->type == VK_IMAGE_TYPE_3D)
tex_coords[4] = (min_src_layer + i * src_z_step) / (float)src_level_d;
/* For 3D blits we need to compute the source slice to blit from (the Z
* coordinate of the source sample operation). We want to choose this
* based on the ratio of the depth of the source and the destination
* images, picking the coordinate in the middle of each step.
*/
if (src->type == VK_IMAGE_TYPE_3D) {
tex_coords[4] =
(min_src_layer + (i + 0.5f) * src_z_step) / (float)src_level_d;
}
v3dv_CmdPushConstants(_cmd_buffer,
device->meta.blit.playout,