intel/blorp: Add support for partial resolves of HiZ-CCS surfaces.

v2: Define additional enum BLORP_OP_HIZ_PARTIAL_RESOLVE to track
    partial resolves (Nanley).
v3: Add comment regarding fall back to full resolve on Gfx12.0 (Nanley).

Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31139>
This commit is contained in:
Francisco Jerez 2025-09-15 15:48:26 -07:00 committed by Marge Bot
parent 79ab5db71b
commit cc66f5ff1d
6 changed files with 21 additions and 2 deletions

View file

@ -687,6 +687,8 @@ iris_hiz_exec(struct iris_context *ice,
name = "depth clear";
break;
case ISL_AUX_OP_PARTIAL_RESOLVE:
name = "depth partial resolve";
break;
case ISL_AUX_OP_NONE:
UNREACHABLE("Invalid HiZ op");
}

View file

@ -40,6 +40,7 @@ blorp_op_to_intel_measure_snapshot(enum blorp_op op)
MAP(HIZ_AMBIGUATE),
MAP(HIZ_CLEAR),
MAP(HIZ_RESOLVE),
MAP(HIZ_PARTIAL_RESOLVE),
MAP(MCS_AMBIGUATE),
MAP(MCS_COLOR_CLEAR),
MAP(MCS_PARTIAL_RESOLVE),
@ -65,6 +66,7 @@ const char *blorp_op_to_name(enum blorp_op op)
MAP(HIZ_AMBIGUATE),
MAP(HIZ_CLEAR),
MAP(HIZ_RESOLVE),
MAP(HIZ_PARTIAL_RESOLVE),
MAP(MCS_AMBIGUATE),
MAP(MCS_COLOR_CLEAR),
MAP(MCS_PARTIAL_RESOLVE),
@ -267,13 +269,15 @@ blorp_hiz_op(struct blorp_batch *batch, struct blorp_surf *surf,
case ISL_AUX_OP_FULL_RESOLVE:
params.op = BLORP_OP_HIZ_RESOLVE;
break;
case ISL_AUX_OP_PARTIAL_RESOLVE:
params.op = BLORP_OP_HIZ_PARTIAL_RESOLVE;
break;
case ISL_AUX_OP_AMBIGUATE:
params.op = BLORP_OP_HIZ_AMBIGUATE;
break;
case ISL_AUX_OP_FAST_CLEAR:
params.op = BLORP_OP_HIZ_CLEAR;
break;
case ISL_AUX_OP_PARTIAL_RESOLVE:
case ISL_AUX_OP_NONE:
UNREACHABLE("Invalid HiZ op");
}

View file

@ -48,6 +48,7 @@ enum blorp_op {
BLORP_OP_HIZ_AMBIGUATE,
BLORP_OP_HIZ_CLEAR,
BLORP_OP_HIZ_RESOLVE,
BLORP_OP_HIZ_PARTIAL_RESOLVE,
BLORP_OP_MCS_AMBIGUATE,
BLORP_OP_MCS_COLOR_CLEAR,
BLORP_OP_MCS_PARTIAL_RESOLVE,

View file

@ -1553,11 +1553,21 @@ blorp_emit_gfx8_hiz_op(struct blorp_batch *batch,
assert(params->full_surface_hiz_op);
hzp.DepthBufferResolveEnable = true;
break;
case ISL_AUX_OP_PARTIAL_RESOLVE:
#if GFX_VERx10 >= 125
hzp.DepthBufferPartialResolveEnable = true;
#else
/* ISL's state machine may suggest a partial resolve
* regardless of the graphics version. Emit a full resolve on
* platforms which don't support it.
*/
hzp.DepthBufferResolveEnable = true;
#endif
break;
case ISL_AUX_OP_AMBIGUATE:
assert(params->full_surface_hiz_op);
hzp.HierarchicalDepthBufferResolveEnable = true;
break;
case ISL_AUX_OP_PARTIAL_RESOLVE:
case ISL_AUX_OP_NONE:
UNREACHABLE("Invalid HIZ op");
}

View file

@ -1579,6 +1579,7 @@
<field name="3D Command Opcode" dword="0" bits="26:24" type="uint" default="0" />
<field name="Command SubType" dword="0" bits="28:27" type="uint" default="3" />
<field name="Command Type" dword="0" bits="31:29" type="uint" default="3" />
<field name="Depth Buffer Partial Resolve Enable" dword="1" bits="9:9" type="bool" />
<field name="Number of Multisamples" dword="1" bits="15:13" type="uint" />
<field name="Stencil Clear Value" dword="1" bits="23:16" type="uint" />
<field name="Stencil Buffer Resolve Enable" dword="1" bits="24:24" type="bool" />

View file

@ -509,6 +509,7 @@ get_color_aux_op(const struct blorp_params *params)
case BLORP_OP_HIZ_AMBIGUATE:
case BLORP_OP_HIZ_CLEAR:
case BLORP_OP_HIZ_RESOLVE:
case BLORP_OP_HIZ_PARTIAL_RESOLVE:
case BLORP_OP_SLOW_DEPTH_CLEAR:
assert(params->fast_clear_op == ISL_AUX_OP_NONE);
return ISL_AUX_OP_NONE;