mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 13:10:10 +01:00
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: <mesa-stable@lists.freedesktop.org> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
0ba0c0c15c
commit
fb1350c76f
4 changed files with 39 additions and 21 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -1885,6 +1885,38 @@ isl_surf_get_image_alignment_sa(const struct isl_surf *surf)
|
|||
fmtl->bd * surf->image_alignment_el.d);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue