summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2020-10-26 12:39:12 -0700
committerKenneth Graunke <kenneth@whitecape.org>2020-11-04 10:41:43 -0800
commit382451ff9d7bfa4f807e8ca447180642c91b92e6 (patch)
tree82d6df8626fd0acd881a31bd656dece55f8a3d56
parent61ce544d070c58fe9823a06ba10319104074e1b5 (diff)
iris: fix source/destination layers for 3D blits
See commit ea326912575fad09af59486ad62d126c4ea0ede7 for the corresponding fix in anv. Fixes Piglit's fbo-generatemipmap-3d. Cc: mesa-stable Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7321>
-rw-r--r--src/gallium/drivers/iris/iris_blit.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/gallium/drivers/iris/iris_blit.c b/src/gallium/drivers/iris/iris_blit.c
index b0da817a071..c9b1b2fbce4 100644
--- a/src/gallium/drivers/iris/iris_blit.c
+++ b/src/gallium/drivers/iris/iris_blit.c
@@ -487,15 +487,28 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info)
else
main_mask = PIPE_MASK_RGBA;
+ float src_z_step = (float)info->src.box.depth / (float)info->dst.box.depth;
+
+ /* There is no interpolation to the pixel center during rendering, so
+ * add the 0.5 offset ourselves here.
+ */
+ float depth_center_offset = 0;
+ if (src_res->surf.dim == ISL_SURF_DIM_3D)
+ depth_center_offset = 0.5 / info->dst.box.depth * info->src.box.depth;
+
if (info->mask & main_mask) {
for (int slice = 0; slice < info->dst.box.depth; slice++) {
+ unsigned dst_z = info->dst.box.z + slice;
+ float src_z = info->src.box.z + slice * src_z_step +
+ depth_center_offset;
+
iris_batch_maybe_flush(batch, 1500);
iris_batch_sync_region_start(batch);
blorp_blit(&blorp_batch,
- &src_surf, info->src.level, info->src.box.z + slice,
+ &src_surf, info->src.level, src_z,
src_fmt.fmt, src_fmt.swizzle,
- &dst_surf, info->dst.level, info->dst.box.z + slice,
+ &dst_surf, info->dst.level, dst_z,
dst_fmt.fmt, dst_fmt.swizzle,
src_x0, src_y0, src_x1, src_y1,
dst_x0, dst_y0, dst_x1, dst_y1,