Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/intel/blorp/blorp_blit.c | 41 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 21 deletions(-)
diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c index dd43b8643b9..170c2e66106 100644 --- a/src/intel/blorp/blorp_blit.c +++ b/src/intel/blorp/blorp_blit.c @@ -2475,30 +2475,29 @@ blorp_surf_convert_to_uncompressed(const struct isl_device *isl_dev, *y /= fmtl->bh; } - /* This is a compressed surface. We need to convert it to a single - * slice (because compressed layouts don't perfectly match uncompressed - * ones with the same bpb) and divide x, y, width, and height by the - * block size. - */ - blorp_surf_convert_to_single_slice(isl_dev, info); - - info->surf.logical_level0_px.width = - DIV_ROUND_UP(info->surf.logical_level0_px.width, fmtl->bw); - info->surf.logical_level0_px.height = - DIV_ROUND_UP(info->surf.logical_level0_px.height, fmtl->bh); + /* We only want one level and slice */ + info->view.levels = 1; + info->view.array_len = 1; - assert(info->surf.phys_level0_sa.width % fmtl->bw == 0); - assert(info->surf.phys_level0_sa.height % fmtl->bh == 0); - info->surf.phys_level0_sa.width /= fmtl->bw; - info->surf.phys_level0_sa.height /= fmtl->bh; + if (info->surf.dim == ISL_SURF_DIM_3D) { + /* Roll the Z offset into the image view */ + info->view.base_array_layer += info->z_offset; + info->z_offset = 0; + } - assert(info->tile_x_sa % fmtl->bw == 0); - assert(info->tile_y_sa % fmtl->bh == 0); - info->tile_x_sa /= fmtl->bw; - info->tile_y_sa /= fmtl->bh; + uint32_t offset_B; + isl_surf_get_uncompressed_surf(isl_dev, &info->surf, &info->view, + &info->surf, &info->view, &offset_B, + &info->tile_x_sa, &info->tile_y_sa); + info->addr.offset += offset_B; - /* It's now an uncompressed surface so we need an uncompressed format */ - info->surf.format = get_copy_format_for_bpb(isl_dev, fmtl->bpb); + /* BLORP doesn't use the actual intratile offsets. Instead, it needs the + * surface to be a bit bigger and we offset the vertices instead. + */ + info->surf.logical_level0_px.w += info->tile_x_sa; + info->surf.logical_level0_px.h += info->tile_y_sa; + info->surf.phys_level0_sa.w += info->tile_x_sa; + info->surf.phys_level0_sa.h += info->tile_y_sa; } void -- 2.19.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev