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>
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,