Commit 0eb3d0a8 authored by Jason Ekstrand's avatar Jason Ekstrand Committed by Marge Bot
Browse files

intel/isl: Add a isl_surf_get_image_offset_B_tile_el helper


Reviewed-by: Topi Pohjolainen's avatarTopi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Nanley Chery's avatarNanley Chery <nanley.g.chery@intel.com>
Part-of: <mesa/mesa!11330>
parent 6cfd1298
......@@ -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;
......@@ -2621,6 +2614,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,
......
......@@ -2288,6 +2288,26 @@ isl_surf_get_image_offset_B_tile_sa(const struct isl_surf *surf,
uint32_t *x_offset_sa,
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.
*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment