mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-24 22:30:31 +01:00
intel/blorp: Fix a couple asserts around image copy rectangles
With dealing with rectangles in compressed images, you can have a width or height that isn't a multiple of the corresponding compression block dimension but only if that edge of your rectangle is on the edge of the image. When we call convert_to_single_slice, it creates an 2-D image and a set of tile offsets into that image. When detecting the right-edge and bottom-edge cases, we weren't including the tile offsets so the assert would misfire. This caused crashes in a few UE4 demos Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reported-by: "Eero Tamminen" <eero.t.tamminen@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98431 Cc: "13.0" <mesa-stable@lists.freedesktop.org> Tested-by: "Eero Tamminen" <eero.t.tamminen@intel.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
parent
caf67bb12f
commit
4964a5149b
1 changed files with 6 additions and 2 deletions
|
|
@ -1761,10 +1761,14 @@ surf_convert_to_uncompressed(const struct isl_device *isl_dev,
|
|||
surf_convert_to_single_slice(isl_dev, info);
|
||||
|
||||
if (width || height) {
|
||||
#ifndef NDEBUG
|
||||
uint32_t right_edge_px = info->tile_x_sa + *x + *width;
|
||||
uint32_t bottom_edge_px = info->tile_y_sa + *y + *height;
|
||||
assert(*width % fmtl->bw == 0 ||
|
||||
*x + *width == info->surf.logical_level0_px.width);
|
||||
right_edge_px == info->surf.logical_level0_px.width);
|
||||
assert(*height % fmtl->bh == 0 ||
|
||||
*y + *height == info->surf.logical_level0_px.height);
|
||||
bottom_edge_px == info->surf.logical_level0_px.height);
|
||||
#endif
|
||||
*width = DIV_ROUND_UP(*width, fmtl->bw);
|
||||
*height = DIV_ROUND_UP(*height, fmtl->bh);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue