intel/isl: Add a isl_surf_get_image_offset_B_tile_el helper
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 21 Feb 2018 10:22:41 +0000 (02:22 -0800)
committerMarge Bot <eric+marge@anholt.net>
Fri, 11 Jun 2021 20:51:21 +0000 (20:51 +0000)
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11330>

src/intel/isl/isl.c
src/intel/isl/isl.h

index 44b9aad..8e502be 100644 (file)
@@ -2593,20 +2593,13 @@ isl_surf_get_image_offset_B_tile_sa(const struct isl_surf *surf,
 {
    const struct isl_format_layout *fmtl = isl_format_get_layout(surf->format);
 
-   uint32_t total_x_offset_el, total_y_offset_el;
-   isl_surf_get_image_offset_el(surf, level, logical_array_layer,
-                                logical_z_offset_px,
-                                &total_x_offset_el,
-                                &total_y_offset_el);
-
    uint32_t x_offset_el, y_offset_el;
-   isl_tiling_get_intratile_offset_el(surf->tiling, fmtl->bpb,
-                                      surf->row_pitch_B,
-                                      total_x_offset_el,
-                                      total_y_offset_el,
-                                      offset_B,
-                                      &x_offset_el,
-                                      &y_offset_el);
+   isl_surf_get_image_offset_B_tile_el(surf, level,
+                                       logical_array_layer,
+                                       logical_z_offset_px,
+                                       offset_B,
+                                       &x_offset_el,
+                                       &y_offset_el);
 
    if (x_offset_sa) {
       *x_offset_sa = x_offset_el * fmtl->bw;
@@ -2622,6 +2615,32 @@ isl_surf_get_image_offset_B_tile_sa(const struct isl_surf *surf,
 }
 
 void
+isl_surf_get_image_offset_B_tile_el(const struct isl_surf *surf,
+                                    uint32_t level,
+                                    uint32_t logical_array_layer,
+                                    uint32_t logical_z_offset_px,
+                                    uint32_t *offset_B,
+                                    uint32_t *x_offset_el,
+                                    uint32_t *y_offset_el)
+{
+   const struct isl_format_layout *fmtl = isl_format_get_layout(surf->format);
+
+   uint32_t total_x_offset_el, total_y_offset_el;
+   isl_surf_get_image_offset_el(surf, level, logical_array_layer,
+                                logical_z_offset_px,
+                                &total_x_offset_el,
+                                &total_y_offset_el);
+
+   isl_tiling_get_intratile_offset_el(surf->tiling, fmtl->bpb,
+                                      surf->row_pitch_B,
+                                      total_x_offset_el,
+                                      total_y_offset_el,
+                                      offset_B,
+                                      x_offset_el,
+                                      y_offset_el);
+}
+
+void
 isl_surf_get_image_range_B_tile(const struct isl_surf *surf,
                                 uint32_t level,
                                 uint32_t logical_array_layer,
index d6bf23f..937ea55 100644 (file)
@@ -2289,6 +2289,26 @@ isl_surf_get_image_offset_B_tile_sa(const struct isl_surf *surf,
                                     uint32_t *y_offset_sa);
 
 /**
+ * Calculate the offset, in bytes and intratile surface elements, to a
+ * subimage in the surface.
+ *
+ * This is equivalent to calling isl_surf_get_image_offset_el, passing the
+ * result to isl_tiling_get_intratile_offset_el.
+ *
+ * @invariant level < surface levels
+ * @invariant logical_array_layer < logical array length of surface
+ * @invariant logical_z_offset_px < logical depth of surface at level
+ */
+void
+isl_surf_get_image_offset_B_tile_el(const struct isl_surf *surf,
+                                    uint32_t level,
+                                    uint32_t logical_array_layer,
+                                    uint32_t logical_z_offset_px,
+                                    uint32_t *offset_B,
+                                    uint32_t *x_offset_el,
+                                    uint32_t *y_offset_el);
+
+/**
  * Calculate the range in bytes occupied by a subimage, to the nearest tile.
  *
  * The range returned will be the smallest memory range in which the give