intel: Add and use helpers for level0 extent
authorNanley Chery <nanley.g.chery@intel.com>
Thu, 23 May 2019 20:44:52 +0000 (13:44 -0700)
committerNanley Chery <nanleychery@gmail.com>
Thu, 27 Jun 2019 23:38:37 +0000 (23:38 +0000)
Prepare for a bug fix by adding and using helpers which convert
isl_surf::logical_level0_px and isl_surf::phys_level0_sa to units of
surface elements.

v2:
- Update iris (Ken).
- Update anv.

Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/gallium/drivers/iris/iris_state.c
src/intel/blorp/blorp_blit.c
src/intel/isl/isl.h
src/intel/vulkan/anv_image.c

index f1c4a6f7874c80ce3f5ea53c1f1affa0d1d09a92..01cd9dbcec75ca0004a901a6e786994c2271c313 100644 (file)
@@ -2012,12 +2012,8 @@ iris_create_surface(struct pipe_context *ctx,
    const struct isl_format_layout *fmtl =
       isl_format_get_layout(res->surf.format);
    isl_surf.format = fmt.fmt;
-   isl_surf.logical_level0_px.width =
-      DIV_ROUND_UP(isl_surf.logical_level0_px.width, fmtl->bw);
-   isl_surf.logical_level0_px.height =
-      DIV_ROUND_UP(isl_surf.logical_level0_px.height, fmtl->bh);
-   isl_surf.phys_level0_sa.width /= fmtl->bw;
-   isl_surf.phys_level0_sa.height /= fmtl->bh;
+   isl_surf.logical_level0_px = isl_surf_get_logical_level0_el(&isl_surf);
+   isl_surf.phys_level0_sa = isl_surf_get_phys_level0_el(&isl_surf);
    tile_x_sa /= fmtl->bw;
    tile_y_sa /= fmtl->bh;
 
index c0b2b5e6533e61a9a78110210e344299b6604580..3b8a5b49862e5e38b7099aeab363b804d052739b 100644 (file)
@@ -2538,15 +2538,8 @@ blorp_surf_convert_to_uncompressed(const struct isl_device *isl_dev,
       *y /= fmtl->bh;
    }
 
-   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);
-
-   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;
+   info->surf.logical_level0_px = isl_surf_get_logical_level0_el(&info->surf);
+   info->surf.phys_level0_sa = isl_surf_get_phys_level0_el(&info->surf);
 
    assert(info->tile_x_sa % fmtl->bw == 0);
    assert(info->tile_y_sa % fmtl->bh == 0);
index 0218f05d17591dff2e9af7368f22b1b5c7a76254..162301e4bf66123efc16e252987e945a45e69862 100644 (file)
@@ -1885,6 +1885,38 @@ isl_surf_get_image_alignment_sa(const struct isl_surf *surf)
                        fmtl->bd * surf->image_alignment_el.d);
 }
 
+/**
+ * Logical extent of level 0 in units of surface elements.
+ */
+static inline struct isl_extent4d
+isl_surf_get_logical_level0_el(const struct isl_surf *surf)
+{
+   const struct isl_format_layout *fmtl = isl_format_get_layout(surf->format);
+
+   return isl_extent4d(DIV_ROUND_UP(surf->logical_level0_px.w, fmtl->bw),
+                       DIV_ROUND_UP(surf->logical_level0_px.h, fmtl->bh),
+                       DIV_ROUND_UP(surf->logical_level0_px.d, fmtl->bd),
+                       surf->logical_level0_px.a);
+}
+
+/**
+ * Physical extent of level 0 in units of surface elements.
+ */
+static inline struct isl_extent4d
+isl_surf_get_phys_level0_el(const struct isl_surf *surf)
+{
+   const struct isl_format_layout *fmtl = isl_format_get_layout(surf->format);
+
+   assert(surf->phys_level0_sa.w % fmtl->bw == 0);
+   assert(surf->phys_level0_sa.h % fmtl->bh == 0);
+   assert(surf->phys_level0_sa.d % fmtl->bd == 0);
+
+   return isl_extent4d(surf->phys_level0_sa.w / fmtl->bw,
+                       surf->phys_level0_sa.h / fmtl->bh,
+                       surf->phys_level0_sa.d / fmtl->bd,
+                       surf->phys_level0_sa.a);
+}
+
 /**
  * Pitch between vertically adjacent surface elements, in bytes.
  */
index 9170ed313e533f0f0cfec09550673e5c2ba428b2..9af7f7b66cc57ba1908c733105dfbf2da0b07a8b 100644 (file)
@@ -1389,12 +1389,9 @@ anv_image_fill_surface_state(struct anv_device *device,
          const struct isl_format_layout *fmtl =
             isl_format_get_layout(surface->isl.format);
          tmp_surf.format = view.format;
-         tmp_surf.logical_level0_px.width =
-            DIV_ROUND_UP(tmp_surf.logical_level0_px.width, fmtl->bw);
-         tmp_surf.logical_level0_px.height =
-            DIV_ROUND_UP(tmp_surf.logical_level0_px.height, fmtl->bh);
-         tmp_surf.phys_level0_sa.width /= fmtl->bw;
-         tmp_surf.phys_level0_sa.height /= fmtl->bh;
+         tmp_surf.logical_level0_px =
+            isl_surf_get_logical_level0_el(&tmp_surf);
+         tmp_surf.phys_level0_sa = isl_surf_get_phys_level0_el(&tmp_surf);
          tile_x_sa /= fmtl->bw;
          tile_y_sa /= fmtl->bh;