iris: Avoid creating uncompressed view with unaligned tile offsets on BDW

Fixes: 60568d5d ("iris: Use isl_surf_get_uncompressed_surf")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7990
Signed-off-by: Sviatoslav Peleshko <sviatoslav.peleshko@globallogic.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21147>
(cherry picked from commit 4229d9324f)
This commit is contained in:
Sviatoslav Peleshko 2023-02-06 12:48:30 +02:00 committed by Eric Engestrom
parent 2d0b4d36a3
commit f79e814218
2 changed files with 16 additions and 1 deletions

View file

@ -7501,7 +7501,7 @@
"description": "iris: Avoid creating uncompressed view with unaligned tile offsets on BDW",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "60568d5dce988ffb67966d88b6feeb67516c7145"
},

View file

@ -2799,6 +2799,21 @@ iris_create_surface(struct pipe_context *ctx,
&res->surf, view,
&isl_surf, view, &offset_B,
&tile_x_el, &tile_y_el);
/* On Broadwell, HALIGN and VALIGN are specified in pixels and are
* hard-coded to align to exactly the block size of the compressed
* texture. This means that, when reinterpreted as a non-compressed
* texture, the tile offsets may be anything.
*
* We need them to be multiples of 4 to be usable in RENDER_SURFACE_STATE,
* so force the state tracker to take fallback paths if they're not.
*/
#if GFX_VER == 8
if (tile_x_el % 4 != 0 || tile_y_el % 4 != 0) {
ok = false;
}
#endif
if (!ok) {
free(surf);
return NULL;