From fb1350c76f1525e6bd320cef62d55aff19ec3f05 Mon Sep 17 00:00:00 2001 From: Nanley Chery Date: Thu, 23 May 2019 13:44:52 -0700 Subject: [PATCH] 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: Reviewed-by: Kenneth Graunke --- src/gallium/drivers/iris/iris_state.c | 8 ++------ src/intel/blorp/blorp_blit.c | 11 ++--------- src/intel/isl/isl.h | 32 ++++++++++++++++++++++++++++++++ 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 f1c4a6f..01cd9db 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 c0b2b5e..3b8a5b4 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 0218f05..162301e 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 9170ed3..9af7f7b 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; -- 2.7.4