intel/isl: Reduce scope of Yf-disabling workaround

The missing bits for correct operation with compressed textures and
multisampled textures were added in previous commits.

The issues with lossless compression and higher miptail slots seem to
affect 128bpb formats as well. However, we're only failing tests which
use compression (even if those tests never actually use the compression
format, just blorp_copy() up and down). Limit the workaround only to
compressed formats until we get more information/testing.

Tests:

   dEQP-VK.api.copy_and_blit.core.image_to_buffer.3d_images.mip_copies_etc2_r8g8b8a8_unorm_block_16x8x24
   dEQP-VK.pipeline.monolithic.sampler.view_type.3d.format.astc_10x6_unorm_block.mipmap.linear.lod.select_bias_3_1
   dEQP-VK.api.copy_and_blit.core.image_to_buffer.2d_images.mip_copies_astc_12x12_unorm_block_64x192

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-20 07:51:52 -04:00 committed by Marge Bot
parent ec37a06d93
commit 78e24605db
2 changed files with 31 additions and 10 deletions

View file

@ -2348,6 +2348,22 @@ isl_choose_miptail_start_level(const struct isl_device *dev,
}
}
if (isl_tiling_is_std_y(tile_info->tiling) &&
info->dim == ISL_SURF_DIM_3D &&
fmtl->txc != ISL_TXC_NONE &&
(fmtl->bpb == 128 || (fmtl->bpb == 64 && ISL_GFX_VER(dev) == 9))) {
/* Although the note above is for lossless compression, this seems to
* affect 64bpb and 128bpb formats as well. At the moment, only
* block-compressed texture tests are affected, so limit the workaround
* to those for now.
*/
if (tile_info->tiling == ISL_TILING_SKL_Yf ||
tile_info->tiling == ISL_TILING_ICL_Yf) {
max_miptail_levels = MIN2(max_miptail_levels, 2);
} else {
max_miptail_levels = MIN2(max_miptail_levels, 6);
}
}
if (info->dim != ISL_SURF_DIM_3D &&
_isl_surf_info_supports_ccs(dev, info->format, info->usage)) {
@ -2367,6 +2383,21 @@ isl_choose_miptail_start_level(const struct isl_device *dev,
}
}
if (isl_tiling_is_std_y(tile_info->tiling) &&
info->dim == ISL_SURF_DIM_2D &&
fmtl->txc != ISL_TXC_NONE && fmtl->bpb == 128) {
/* Although the note above is for lossless compression, this seems to
* affect 128bpb formats as well. At the moment, only block-compressed
* texture tests are affected, so limit the workaround to those for now.
*/
if (tile_info->tiling == ISL_TILING_SKL_Yf ||
tile_info->tiling == ISL_TILING_ICL_Yf) {
max_miptail_levels = MIN2(max_miptail_levels, 7);
} else {
max_miptail_levels = MIN2(max_miptail_levels, 11);
}
}
/* Start with the minimum number of levels that will fit in the tile */
uint32_t min_miptail_start =
info->levels > max_miptail_levels ? info->levels - max_miptail_levels : 0;

View file

@ -204,16 +204,6 @@ isl_gfx6_filter_tiling(const struct isl_device *dev,
if (info->usage & ISL_SURF_USAGE_SOFTWARE_DETILING)
*flags &= (1 << dev->shader_tiling) | ISL_TILING_LINEAR_BIT;
/* TODO: Investigate Yf failures (~5000 VK CTS failures at the time of this
* writing).
*/
if (isl_format_is_compressed(info->format) ||
info->samples > 1 ||
info->dim == ISL_SURF_DIM_3D) {
*flags &= ~ISL_TILING_SKL_Yf_BIT; /* FINISHME[SKL]: Support Yf */
*flags &= ~ISL_TILING_ICL_Yf_BIT; /* FINISHME[ICL]: Support Yf */
}
if (isl_surf_usage_is_depth(info->usage)) {
/* Depth requires Y. */
*flags &= ISL_TILING_ANY_Y_MASK;