From 0eb3d0a8df0775914ad617be4a9e9daceca25e8c Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 21 Feb 2018 02:22:41 -0800 Subject: [PATCH] intel/isl: Add a isl_surf_get_image_offset_B_tile_el helper Reviewed-by: Topi Pohjolainen Reviewed-by: Nanley Chery Part-of: --- src/intel/isl/isl.c | 45 ++++++++++++++++++++++++++++++++------------- src/intel/isl/isl.h | 20 ++++++++++++++++++++ 2 files changed, 52 insertions(+), 13 deletions(-) diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c index 44b9aad..8e502be 100644 --- a/src/intel/isl/isl.c +++ b/src/intel/isl/isl.c @@ -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, diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index d6bf23f..937ea55 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -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 -- 2.7.4