[Mesa-dev] [PATCH v2 18/32] intel/blorp: Use isl_surf_get_uncompressed_surf
Jason Ekstrand
jason at jlekstrand.net
Fri Oct 12 18:46:48 UTC 2018
Reviewed-by: Topi Pohjolainen <topi.pohjolainen at 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
More information about the mesa-dev
mailing list