diff options
author | Nanley Chery <[email protected]> | 2019-05-23 13:44:52 -0700 |
---|---|---|
committer | Nanley Chery <[email protected]> | 2019-06-27 23:38:37 +0000 |
commit | fb1350c76f1525e6bd320cef62d55aff19ec3f05 (patch) | |
tree | cf27fcd8a5ba2df254d30278c72c1ecab331e5aa /src | |
parent | 0ba0c0c15c633a5a3b7a4651a743f800f30bcbf6 (diff) |
intel: Add and use helpers for level0 extent
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: <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/iris/iris_state.c | 8 | ||||
-rw-r--r-- | src/intel/blorp/blorp_blit.c | 11 | ||||
-rw-r--r-- | src/intel/isl/isl.h | 32 | ||||
-rw-r--r-- | src/intel/vulkan/anv_image.c | 9 |
4 files changed, 39 insertions, 21 deletions
diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index f1c4a6f7874..01cd9dbcec7 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -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; diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c index c0b2b5e6533..3b8a5b49862 100644 --- a/src/intel/blorp/blorp_blit.c +++ b/src/intel/blorp/blorp_blit.c @@ -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); diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index 0218f05d175..162301e4bf6 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -1886,6 +1886,38 @@ isl_surf_get_image_alignment_sa(const struct isl_surf *surf) } /** + * 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. */ static inline uint32_t diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index 9170ed313e5..9af7f7b66cc 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -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; |