iris: Allow Yf and Ys tilings more often

Allow them in all cases except for one which prevents

dEQP-GLES31.functional.image_load_store.3d.atomic.xor_r32i_return_value

from hitting the following assertion on TGL:

   convert_rt_from_3d_to_2d:
      Assertion `!isl_tiling_is_std_y(info->surf.tiling)' failed.

Reviewed-by: Rohan Garg <rohan.garg@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38063>
This commit is contained in:
Nanley Chery 2025-10-10 11:39:17 -04:00 committed by Marge Bot
parent 5ecd4520c8
commit 1e305c0f12

View file

@ -901,11 +901,18 @@ iris_resource_configure_main(const struct iris_screen *screen,
tiling_flags = ISL_TILING_X_BIT;
} else {
tiling_flags = ISL_TILING_ANY_MASK;
}
/* We don't support Yf or Ys tiling yet */
tiling_flags &= ~ISL_TILING_STD_Y_MASK;
assert(tiling_flags != 0);
if (screen->devinfo->verx10 == 120 &&
util_format_get_blocksizebits(templ->format) == 32 &&
resource_needs_storage_usage(templ) &&
templ->target == PIPE_TEXTURE_3D) {
/* iris_image_view_aux_usage() will disable compression for atomic
* operations. Unfortunately BLORP can't resolve CCS on Ys tiled
* images on this platform. So, don't use it for now.
*/
tiling_flags &= ~ISL_TILING_ICL_Ys_BIT;
}
}
isl_surf_usage_flags_t usage = 0;
@ -2616,8 +2623,11 @@ iris_transfer_map(struct pipe_context *ctx,
if (prefer_cpu_access(res, box, usage, level, map_would_stall))
usage |= PIPE_MAP_DIRECTLY;
/* TODO: Teach iris_map_tiled_memcpy about Tile64... */
if (isl_tiling_is_64(res->surf.tiling))
/* Disable support for tilings that are not supported by ISL's tiled-memcpy
* functions.
*/
if (isl_tiling_is_64(res->surf.tiling) ||
isl_tiling_is_std_y(res->surf.tiling))
usage &= ~PIPE_MAP_DIRECTLY;
if (!(usage & PIPE_MAP_DIRECTLY)) {
@ -2743,6 +2753,7 @@ iris_texture_subdata(struct pipe_context *ctx,
*/
if (surf->tiling == ISL_TILING_LINEAR ||
isl_tiling_is_64(res->surf.tiling) ||
isl_tiling_is_std_y(res->surf.tiling) ||
isl_aux_usage_has_compression(res->aux.usage) ||
resource_is_busy(ice, res) ||
iris_bo_mmap_mode(res->bo) == IRIS_MMAP_NONE) {