Rename the isl_aux_usage enum to clarify that it is optional on gfx125.
The new name comes from the Alchemist docs, where the feature is
referred to as "Fast Clear Optimization (FCV)".
The rename was done with this command:
git grep -l "GFX12_CCS_E" | xargs sed -ie "s/GFX12_CCS_E/FCV_CCS_E/g"
Reviewed-by: Rohan Garg <rohan.garg@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23220>
}
FALLTHROUGH;
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E: {
+ case ISL_AUX_USAGE_FCV_CCS_E: {
/* If our source doesn't have any unresolved color, report an aux
* usage of ISL_AUX_USAGE_NONE. This way, texturing won't even look
* at the aux surface and we can save some bandwidth.
/* We only need to worry about color compression and fast clears. */
if (tex_res->aux.usage != ISL_AUX_USAGE_CCS_D &&
tex_res->aux.usage != ISL_AUX_USAGE_CCS_E &&
- tex_res->aux.usage != ISL_AUX_USAGE_GFX12_CCS_E)
+ tex_res->aux.usage != ISL_AUX_USAGE_FCV_CCS_E)
return false;
for (unsigned i = 0; i < cso_fb->nr_cbufs; i++) {
return res->aux.usage;
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E:
+ case ISL_AUX_USAGE_FCV_CCS_E:
/* If we don't have any unresolved color, report an aux usage of
* ISL_AUX_USAGE_NONE. This way, texturing won't even look at the
* aux surface and we can save some bandwidth.
!iris_has_invalid_primary(res, level, 1, 0, INTEL_REMAINING_LAYERS))
return ISL_AUX_USAGE_NONE;
- if (res->aux.usage == ISL_AUX_USAGE_GFX12_CCS_E)
+ if (res->aux.usage == ISL_AUX_USAGE_FCV_CCS_E)
return res->aux.usage;
return ISL_AUX_USAGE_NONE;
case ISL_AUX_USAGE_CCS_D:
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E:
+ case ISL_AUX_USAGE_FCV_CCS_E:
/* Disable CCS for some cases of texture-view rendering. On gfx12, HW
* may convert some subregions of shader output to fast-cleared blocks
* if CCS is enabled and the shader output matches the clear color.
res->aux.usage = ISL_AUX_USAGE_STC_CCS;
} else if (want_ccs_e_for_format(devinfo, res->surf.format)) {
res->aux.usage = devinfo->ver < 12 ?
- ISL_AUX_USAGE_CCS_E : ISL_AUX_USAGE_GFX12_CCS_E;
+ ISL_AUX_USAGE_CCS_E : ISL_AUX_USAGE_FCV_CCS_E;
} else {
assert(isl_format_supports_ccs_d(devinfo, res->surf.format));
res->aux.usage = ISL_AUX_USAGE_CCS_D;
break;
case ISL_AUX_USAGE_CCS_D:
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E:
+ case ISL_AUX_USAGE_FCV_CCS_E:
case ISL_AUX_USAGE_STC_CCS:
case ISL_AUX_USAGE_MC:
if (imported) {
if ((isv->res->aux.usage == ISL_AUX_USAGE_CCS_D ||
isv->res->aux.usage == ISL_AUX_USAGE_CCS_E ||
- isv->res->aux.usage == ISL_AUX_USAGE_GFX12_CCS_E) &&
+ isv->res->aux.usage == ISL_AUX_USAGE_FCV_CCS_E) &&
!isl_format_supports_ccs_e(devinfo, isv->view.format)) {
aux_usages = 1 << ISL_AUX_USAGE_NONE;
} else if (isl_aux_usage_has_hiz(isv->res->aux.usage) &&
unsigned aux_usages = 0;
if ((res->aux.usage == ISL_AUX_USAGE_CCS_E ||
- res->aux.usage == ISL_AUX_USAGE_GFX12_CCS_E) &&
+ res->aux.usage == ISL_AUX_USAGE_FCV_CCS_E) &&
!isl_format_supports_ccs_e(devinfo, view->format)) {
aux_usages = 1 << ISL_AUX_USAGE_NONE;
} else {
return false;
if (blorp->isl_dev->info->ver >= 12) {
- return dst_aux_usage == ISL_AUX_USAGE_GFX12_CCS_E ||
+ return dst_aux_usage == ISL_AUX_USAGE_FCV_CCS_E ||
dst_aux_usage == ISL_AUX_USAGE_CCS_E ||
dst_aux_usage == ISL_AUX_USAGE_NONE;
} else if (blorp->isl_dev->info->ver >= 7) {
case ISL_AUX_USAGE_NONE:
return true;
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E:
+ case ISL_AUX_USAGE_FCV_CCS_E:
return devinfo->verx10 >= 125;
default:
return false;
params.src.aux_usage == ISL_AUX_USAGE_MCS ||
params.src.aux_usage == ISL_AUX_USAGE_MCS_CCS ||
params.src.aux_usage == ISL_AUX_USAGE_CCS_E ||
- params.src.aux_usage == ISL_AUX_USAGE_GFX12_CCS_E ||
+ params.src.aux_usage == ISL_AUX_USAGE_FCV_CCS_E ||
params.src.aux_usage == ISL_AUX_USAGE_STC_CCS);
blorp_copy_get_formats(isl_dev, ¶ms.src.surf, ¶ms.dst.surf,
if (color_write_disable != 0 || blend_enabled)
return false;
if (blorp->isl_dev->info->ver >= 12) {
- return aux_usage == ISL_AUX_USAGE_GFX12_CCS_E ||
+ return aux_usage == ISL_AUX_USAGE_FCV_CCS_E ||
aux_usage == ISL_AUX_USAGE_CCS_E ||
aux_usage == ISL_AUX_USAGE_NONE;
} else {
{
switch (info->aux_usage) {
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E:
+ case ISL_AUX_USAGE_FCV_CCS_E:
return XY_CCS_E;
case ISL_AUX_USAGE_NONE:
return XY_NONE;
*/
ISL_AUX_USAGE_CCS_E,
- /** Single-sample lossless color compression on Tigerlake
+ /** Single-sample lossless color compression with fast clear optimization
*
- * This is identical to ISL_AUX_USAGE_CCS_E except it also encodes the
- * Tigerlake quirk about regular render writes possibly fast-clearing
- * blocks in the surface.
+ * Introduced on Tigerlake, this is identical to ISL_AUX_USAGE_CCS_E except
+ * it also encodes a feature about regular render writes possibly
+ * fast-clearing blocks in the surface. In the Alchemist docs, the name of
+ * the feature is easier to find. In the 3DSTATE_3D_MODE packet, it is
+ * referred to as "Fast Clear Optimization (FCV)".
*
* @invariant The surface is a color surface
* @invariant isl_surf::samples == 1
*/
- ISL_AUX_USAGE_GFX12_CCS_E,
+ ISL_AUX_USAGE_FCV_CCS_E,
/** Media color compression
*
{
return usage == ISL_AUX_USAGE_CCS_D ||
usage == ISL_AUX_USAGE_CCS_E ||
- usage == ISL_AUX_USAGE_GFX12_CCS_E ||
+ usage == ISL_AUX_USAGE_FCV_CCS_E ||
usage == ISL_AUX_USAGE_MC ||
usage == ISL_AUX_USAGE_HIZ_CCS_WT ||
usage == ISL_AUX_USAGE_HIZ_CCS ||
isl_aux_usage_has_ccs_e(enum isl_aux_usage usage)
{
return usage == ISL_AUX_USAGE_CCS_E ||
- usage == ISL_AUX_USAGE_GFX12_CCS_E;
+ usage == ISL_AUX_USAGE_FCV_CCS_E;
}
static inline bool
return ISL_AUX_STATE_AUX_INVALID;
assert(mod_info->aux_usage == ISL_AUX_USAGE_CCS_E ||
- mod_info->aux_usage == ISL_AUX_USAGE_GFX12_CCS_E ||
+ mod_info->aux_usage == ISL_AUX_USAGE_FCV_CCS_E ||
mod_info->aux_usage == ISL_AUX_USAGE_MC);
return mod_info->supports_clear_color ? ISL_AUX_STATE_COMPRESSED_CLEAR :
ISL_AUX_STATE_COMPRESSED_NO_CLEAR;
AUX( COMPRESS, Y, Y, Y, x, MCS)
AUX( COMPRESS, Y, Y, Y, x, MCS_CCS)
AUX( COMPRESS, Y, Y, Y, Y, CCS_E)
- AUX( COMPRESS_CLEAR, Y, Y, Y, Y, GFX12_CCS_E)
+ AUX( COMPRESS_CLEAR, Y, Y, Y, Y, FCV_CCS_E)
AUX(RESOLVE_AMBIGUATE, x, Y, x, Y, CCS_D)
AUX(RESOLVE_AMBIGUATE, Y, x, x, Y, MC)
AUX( COMPRESS, Y, x, x, Y, STC_CCS)
.modifier = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS,
.name = "I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS",
.tiling = ISL_TILING_Y0,
- .aux_usage = ISL_AUX_USAGE_GFX12_CCS_E,
+ .aux_usage = ISL_AUX_USAGE_FCV_CCS_E,
.supports_clear_color = false,
},
{
.modifier = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC,
.name = "I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC",
.tiling = ISL_TILING_Y0,
- .aux_usage = ISL_AUX_USAGE_GFX12_CCS_E,
+ .aux_usage = ISL_AUX_USAGE_FCV_CCS_E,
.supports_clear_color = true,
},
{
.modifier = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS,
.name = "I915_FORMAT_MOD_4_TILED_DG2_RC_CCS",
.tiling = ISL_TILING_4,
- .aux_usage = ISL_AUX_USAGE_GFX12_CCS_E,
+ .aux_usage = ISL_AUX_USAGE_FCV_CCS_E,
.supports_clear_color = false,
},
{
.modifier = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC,
.name = "I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC",
.tiling = ISL_TILING_4,
- .aux_usage = ISL_AUX_USAGE_GFX12_CCS_E,
+ .aux_usage = ISL_AUX_USAGE_FCV_CCS_E,
.supports_clear_color = true,
},
{
[ISL_AUX_USAGE_NONE] = AUX_NONE,
[ISL_AUX_USAGE_MC] = AUX_NONE,
[ISL_AUX_USAGE_MCS] = AUX_CCS_E,
- [ISL_AUX_USAGE_GFX12_CCS_E] = AUX_CCS_E,
+ [ISL_AUX_USAGE_FCV_CCS_E] = AUX_CCS_E,
[ISL_AUX_USAGE_CCS_E] = AUX_CCS_E,
[ISL_AUX_USAGE_HIZ_CCS_WT] = AUX_CCS_E,
[ISL_AUX_USAGE_MCS_CCS] = AUX_MCS_LCE,
if (GFX_VER >= 12) {
assert(info->aux_usage == ISL_AUX_USAGE_MCS ||
info->aux_usage == ISL_AUX_USAGE_CCS_E ||
- info->aux_usage == ISL_AUX_USAGE_GFX12_CCS_E ||
+ info->aux_usage == ISL_AUX_USAGE_FCV_CCS_E ||
info->aux_usage == ISL_AUX_USAGE_MC ||
info->aux_usage == ISL_AUX_USAGE_HIZ_CCS_WT ||
info->aux_usage == ISL_AUX_USAGE_MCS_CCS ||
}
TEST(StateTransitionWrite, WritesCompressClear) {
- E(CLEAR, GFX12_CCS_E, false, COMPRESSED_CLEAR);
- E(CLEAR, GFX12_CCS_E, true, COMPRESSED_CLEAR);
- E(PARTIAL_CLEAR, GFX12_CCS_E, false, COMPRESSED_CLEAR);
- E(PARTIAL_CLEAR, GFX12_CCS_E, true, COMPRESSED_CLEAR);
- E(COMPRESSED_CLEAR, GFX12_CCS_E, false, COMPRESSED_CLEAR);
- E(COMPRESSED_CLEAR, GFX12_CCS_E, true, COMPRESSED_CLEAR);
- E(COMPRESSED_NO_CLEAR, GFX12_CCS_E, false, COMPRESSED_CLEAR);
- E(COMPRESSED_NO_CLEAR, GFX12_CCS_E, true, COMPRESSED_CLEAR);
- E(RESOLVED, GFX12_CCS_E, false, COMPRESSED_CLEAR);
- E(RESOLVED, GFX12_CCS_E, true, COMPRESSED_CLEAR);
- E(PASS_THROUGH, GFX12_CCS_E, false, COMPRESSED_CLEAR);
- E(PASS_THROUGH, GFX12_CCS_E, true, COMPRESSED_CLEAR);
- E(AUX_INVALID, GFX12_CCS_E, false, ASSERT);
- E(AUX_INVALID, GFX12_CCS_E, true, ASSERT);
+ E(CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
+ E(CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
+ E(PARTIAL_CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
+ E(PARTIAL_CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
+ E(COMPRESSED_CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
+ E(COMPRESSED_CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
+ E(COMPRESSED_NO_CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
+ E(COMPRESSED_NO_CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
+ E(RESOLVED, FCV_CCS_E, false, COMPRESSED_CLEAR);
+ E(RESOLVED, FCV_CCS_E, true, COMPRESSED_CLEAR);
+ E(PASS_THROUGH, FCV_CCS_E, false, COMPRESSED_CLEAR);
+ E(PASS_THROUGH, FCV_CCS_E, true, COMPRESSED_CLEAR);
+ E(AUX_INVALID, FCV_CCS_E, false, ASSERT);
+ E(AUX_INVALID, FCV_CCS_E, true, ASSERT);
}
TEST(StateTransitionWrite, WritesResolveAmbiguate) {
* - Texture view rendering (including blorp_copy calls)
* - Images with multiple levels or array layers
*/
- if (image->planes[plane].aux_usage == ISL_AUX_USAGE_GFX12_CCS_E)
+ if (image->planes[plane].aux_usage == ISL_AUX_USAGE_FCV_CCS_E)
return false;
/* Non mutable image, we can fast clear with any color supported by HW.
image->vk.usage, fmt_list)) {
image->planes[plane].aux_usage =
intel_needs_workaround(device->info, 1607794140) ?
- ISL_AUX_USAGE_GFX12_CCS_E :
+ ISL_AUX_USAGE_FCV_CCS_E :
ISL_AUX_USAGE_CCS_E;
} else if (device->info->ver >= 12) {
anv_perf_warn(VK_LOG_OBJS(&image->vk.base),
image->planes[p].aux_usage = ISL_AUX_USAGE_HIZ;
} else {
assert(image->planes[p].aux_usage == ISL_AUX_USAGE_CCS_E ||
- image->planes[p].aux_usage == ISL_AUX_USAGE_GFX12_CCS_E ||
+ image->planes[p].aux_usage == ISL_AUX_USAGE_FCV_CCS_E ||
image->planes[p].aux_usage == ISL_AUX_USAGE_STC_CCS);
image->planes[p].aux_usage = ISL_AUX_USAGE_NONE;
}
break;
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E:
+ case ISL_AUX_USAGE_FCV_CCS_E:
case ISL_AUX_USAGE_STC_CCS:
break;
}
case ISL_AUX_USAGE_CCS_E:
- case ISL_AUX_USAGE_GFX12_CCS_E:
+ case ISL_AUX_USAGE_FCV_CCS_E:
if (aux_supported) {
assert(clear_supported);
return ISL_AUX_STATE_COMPRESSED_CLEAR;
return ANV_FAST_CLEAR_DEFAULT_VALUE;
} else if (image->planes[plane].aux_usage == ISL_AUX_USAGE_MCS ||
image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E ||
- image->planes[plane].aux_usage == ISL_AUX_USAGE_GFX12_CCS_E) {
+ image->planes[plane].aux_usage == ISL_AUX_USAGE_FCV_CCS_E) {
if (devinfo->ver >= 11) {
/* The image might not support non zero fast clears when mutable. */
if (!image->planes[plane].can_non_zero_fast_clear)