intel/blorp: Fix the early return condition in convert_to_single_slice
The convert_to_single_slice operation is *mostly* idempotent. The only
non-repeatable thing it does is that, when it sets the intratile offset
fields, it just overwrites them instead of doing a += operation. This is
supposed to be ok because we have an early return at the top that should
make it bail of the surface is already a single slice. Unfortunately, the
if condition has been broken ever since it was first added in 96fa98c18
.
This commit fixes the condition and adds an assert to ensure we don't stomp
any non-zero intratile offsets.
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
parent
ec7e0d62c5
commit
6da968b651
|
@ -1254,9 +1254,14 @@ surf_convert_to_single_slice(const struct isl_device *isl_dev,
|
|||
/* Just bail if we have nothing to do. */
|
||||
if (info->surf.dim == ISL_SURF_DIM_2D &&
|
||||
info->view.base_level == 0 && info->view.base_array_layer == 0 &&
|
||||
info->surf.levels == 0 && info->surf.logical_level0_px.array_len == 0)
|
||||
info->surf.levels == 1 && info->surf.logical_level0_px.array_len == 1)
|
||||
return;
|
||||
|
||||
/* If this gets triggered then we've gotten here twice which. This
|
||||
* shouldn't happen thanks to the above early return.
|
||||
*/
|
||||
assert(info->tile_x_sa == 0 && info->tile_y_sa == 0);
|
||||
|
||||
uint32_t x_offset_sa, y_offset_sa;
|
||||
isl_surf_get_image_offset_sa(&info->surf, info->view.base_level,
|
||||
info->view.base_array_layer, 0,
|
||||
|
|
Loading…
Reference in New Issue