isl: Add func isl_surf_get_image_offset_el()

This replaces function isl_surf_get_image_offset_sa()
This commit is contained in:
Chad Versace 2016-01-25 12:15:07 -08:00 committed by Jason Ekstrand
parent ea44d31528
commit fa08f95ff5
3 changed files with 51 additions and 17 deletions

View File

@ -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;
}

View File

@ -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
}

View File

@ -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