mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-15 13:10:31 +01:00
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:
parent
525077f160
commit
c5f01414da
2 changed files with 35 additions and 0 deletions
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue