From fa08f95ff55d06c0c195eba623de38a5d40e196b Mon Sep 17 00:00:00 2001 From: Chad Versace Date: Mon, 25 Jan 2016 12:15:07 -0800 Subject: [PATCH] isl: Add func isl_surf_get_image_offset_el() This replaces function isl_surf_get_image_offset_sa() --- src/isl/isl.c | 48 ++++++++++++++++++++++---- src/isl/isl.h | 10 +++--- src/isl/tests/isl_surf_get_image_offset_test.c | 10 +++--- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/isl/isl.c b/src/isl/isl.c index ec66f97b779..65f624ce95e 100644 --- a/src/isl/isl.c +++ b/src/isl/isl.c @@ -1282,13 +1282,21 @@ get_image_offset_sa_gen9_1d(const struct isl_surf *surf, *y_offset_sa = layer * isl_surf_get_array_pitch_sa_rows(surf); } -void -isl_surf_get_image_offset_sa(const struct isl_surf *surf, - uint32_t level, - uint32_t logical_array_layer, - uint32_t logical_z_offset_px, - uint32_t *x_offset_sa, - uint32_t *y_offset_sa) +/** + * Calculate the offset, in units of surface samples, to a subimage in the + * surface. + * + * @invariant level < surface levels + * @invariant logical_array_layer < logical array length of surface + * @invariant logical_z_offset_px < logical depth of surface at level + */ +static void +get_image_offset_sa(const struct isl_surf *surf, + uint32_t level, + uint32_t logical_array_layer, + uint32_t logical_z_offset_px, + uint32_t *x_offset_sa, + uint32_t *y_offset_sa) { assert(level < surf->levels); assert(logical_array_layer < surf->logical_level0_px.array_len); @@ -1310,3 +1318,29 @@ isl_surf_get_image_offset_sa(const struct isl_surf *surf, break; } } + +void +isl_surf_get_image_offset_el(const struct isl_surf *surf, + uint32_t level, + uint32_t logical_array_layer, + uint32_t logical_z_offset_px, + uint32_t *x_offset_el, + uint32_t *y_offset_el) +{ + const struct isl_format_layout *fmtl = isl_format_get_layout(surf->format); + + assert(level < surf->levels); + assert(logical_array_layer < surf->logical_level0_px.array_len); + assert(logical_z_offset_px + < isl_minify(surf->logical_level0_px.depth, level)); + + uint32_t x_offset_sa, y_offset_sa; + get_image_offset_sa(surf, level, + logical_array_layer, + logical_z_offset_px, + &x_offset_sa, + &y_offset_sa); + + *x_offset_el = x_offset_sa / fmtl->bw; + *y_offset_el = y_offset_sa / fmtl->bh; +} diff --git a/src/isl/isl.h b/src/isl/isl.h index 3eada623fbe..392aaf7e9c5 100644 --- a/src/isl/isl.h +++ b/src/isl/isl.h @@ -975,20 +975,20 @@ isl_surf_get_array_pitch(const struct isl_surf *surf) } /** - * Get the offset to an subimage within the surface, in units of surface - * samples. + * Calculate the offset, in units of surface elements, to a subimage in the + * surface. * * @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_sa(const struct isl_surf *surf, +isl_surf_get_image_offset_el(const struct isl_surf *surf, uint32_t level, uint32_t logical_array_layer, uint32_t logical_z_offset_px, - uint32_t *x_offset_sa, - uint32_t *y_offset_sa); + uint32_t *x_offset_el, + uint32_t *y_offset_el); #ifdef __cplusplus } diff --git a/src/isl/tests/isl_surf_get_image_offset_test.c b/src/isl/tests/isl_surf_get_image_offset_test.c index 525180ea204..b0b4635359c 100644 --- a/src/isl/tests/isl_surf_get_image_offset_test.c +++ b/src/isl/tests/isl_surf_get_image_offset_test.c @@ -82,15 +82,15 @@ t_assert_offset(const struct isl_surf *surf, uint32_t level, uint32_t logical_array_layer, uint32_t logical_z_offset_px, - uint32_t expected_x_offset_sa, - uint32_t expected_y_offset_sa) + uint32_t expected_x_offset_el, + uint32_t expected_y_offset_el) { uint32_t x, y; - isl_surf_get_image_offset_sa(surf, level, logical_array_layer, + isl_surf_get_image_offset_el(surf, level, logical_array_layer, logical_z_offset_px, &x, &y); - t_assert(x == expected_x_offset_sa); - t_assert(y == expected_y_offset_sa); + t_assert(x == expected_x_offset_el); + t_assert(y == expected_y_offset_el); } static void -- 2.11.0