anv,iris: Don't fast-clear 3D + Ys on gfx12.0

BSpec 46969 (r45602) tells us that we get no fast-clears for 3D:

  3D/Volumetric surfaces do not support Fast Clear operation.

For Y-tiled surfaces, we work around this in BLORP with
convert_rt_from_3d_to_2d(). However, that function doesn't support Ys-tiling.
We could modify our surface redescription code paths to support clearing
entire Ys tiles, but we choose to hold off on the added complexity until
we have a use-case.

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-13 08:14:23 -04:00 committed by Marge Bot
parent 525077f160
commit c5f01414da
2 changed files with 35 additions and 0 deletions

View file

@ -165,6 +165,24 @@ can_fast_clear_color(struct iris_context *ice,
return false;
}
/* BSpec 46969 (r45602) tells us that we get no fast-clears for 3D:
*
* 3D/Volumetric surfaces do not support Fast Clear operation.
*
* BLORP has a workaround for Y-tiled surfaces, but not Ys-tiled ones. If
* the entire surface is being cleared, we could teach BLORP to clear it.
* For now, just keep things simple and reject fast clears. HW doesn't
* support compression on 64bpp+ formats anyway and iris doesn't enable
* compression for 32bpp formats.
*/
if (devinfo->verx10 == 120 &&
res->surf.tiling == ISL_TILING_ICL_Ys &&
res->surf.dim == ISL_SURF_DIM_3D) {
assert(isl_format_get_layout(res->surf.format)->bpb <= 16);
perf_debug(&ice->dbg, "Ys + 3D on gfx12.0. Slow clearing surface.");
return false;
}
/* On gfx12.0, CCS fast clears don't seem to cover the correct portion of
* the aux buffer when the pitch is not 512B-aligned.
*/

View file

@ -3905,6 +3905,23 @@ anv_can_fast_clear_color(const struct anv_cmd_buffer *cmd_buffer,
return false;
}
/* BSpec 46969 (r45602) tells us that we get no fast-clears for 3D:
*
* 3D/Volumetric surfaces do not support Fast Clear operation.
*
* If the entire surface is being cleared, we could teach BLORP to clear
* it. For now, just keep things simple and reject fast clears. We don't
* support compression on 64bpp+ formats anyway.
*/
if (cmd_buffer->device->info->verx10 == 120 &&
anv_surf->isl.dim == ISL_SURF_DIM_3D &&
anv_surf->isl.tiling == ISL_TILING_ICL_Ys) {
assert(isl_format_get_layout(anv_surf->isl.format)->bpb <= 32);
anv_perf_warn(VK_LOG_OBJS(&image->vk.base),
"Ys + 3D on gfx12.0. Slow clearing surface");
return false;
}
/* On gfx12.0, CCS fast clears don't seem to cover the correct portion of
* the aux buffer when the pitch is not 512B-aligned.
*/