iris: Make the D16 reg mode single-sampled
Wa_14010455700 is dependent on the format and sample count, but our code to track whether or not it had been applied was only dependent on the format. As a result, we failed to enable the workaround when an app used a D16 2xMSAA buffer, then a D16 1xMSAA buffer right afterwards. Make the workaround tracking code sample-dependent to fix this. Cc: mesa-stable Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17859>
This commit is contained in:
@@ -1219,7 +1219,7 @@ struct iris_depth_buffer_state {
|
|||||||
#if GFX_VERx10 == 120
|
#if GFX_VERx10 == 120
|
||||||
enum iris_depth_reg_mode {
|
enum iris_depth_reg_mode {
|
||||||
IRIS_DEPTH_REG_MODE_HW_DEFAULT = 0,
|
IRIS_DEPTH_REG_MODE_HW_DEFAULT = 0,
|
||||||
IRIS_DEPTH_REG_MODE_D16,
|
IRIS_DEPTH_REG_MODE_D16_1X_MSAA,
|
||||||
IRIS_DEPTH_REG_MODE_UNKNOWN,
|
IRIS_DEPTH_REG_MODE_UNKNOWN,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@@ -5722,15 +5722,16 @@ genX(emit_depth_state_workarounds)(struct iris_context *ice,
|
|||||||
const struct isl_surf *surf)
|
const struct isl_surf *surf)
|
||||||
{
|
{
|
||||||
#if GFX_VERx10 == 120
|
#if GFX_VERx10 == 120
|
||||||
const bool fmt_is_d16 = surf->format == ISL_FORMAT_R16_UNORM;
|
const bool is_d16_1x_msaa = surf->format == ISL_FORMAT_R16_UNORM &&
|
||||||
|
surf->samples == 1;
|
||||||
|
|
||||||
switch (ice->state.genx->depth_reg_mode) {
|
switch (ice->state.genx->depth_reg_mode) {
|
||||||
case IRIS_DEPTH_REG_MODE_HW_DEFAULT:
|
case IRIS_DEPTH_REG_MODE_HW_DEFAULT:
|
||||||
if (!fmt_is_d16)
|
if (!is_d16_1x_msaa)
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case IRIS_DEPTH_REG_MODE_D16:
|
case IRIS_DEPTH_REG_MODE_D16_1X_MSAA:
|
||||||
if (fmt_is_d16)
|
if (is_d16_1x_msaa)
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case IRIS_DEPTH_REG_MODE_UNKNOWN:
|
case IRIS_DEPTH_REG_MODE_UNKNOWN:
|
||||||
@@ -5752,12 +5753,13 @@ genX(emit_depth_state_workarounds)(struct iris_context *ice,
|
|||||||
* Surface Format is D16_UNORM , surface type is not NULL & 1X_MSAA”.
|
* Surface Format is D16_UNORM , surface type is not NULL & 1X_MSAA”.
|
||||||
*/
|
*/
|
||||||
iris_emit_reg(batch, GENX(COMMON_SLICE_CHICKEN1), reg) {
|
iris_emit_reg(batch, GENX(COMMON_SLICE_CHICKEN1), reg) {
|
||||||
reg.HIZPlaneOptimizationdisablebit = fmt_is_d16 && surf->samples == 1;
|
reg.HIZPlaneOptimizationdisablebit = is_d16_1x_msaa;
|
||||||
reg.HIZPlaneOptimizationdisablebitMask = true;
|
reg.HIZPlaneOptimizationdisablebitMask = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ice->state.genx->depth_reg_mode =
|
ice->state.genx->depth_reg_mode =
|
||||||
fmt_is_d16 ? IRIS_DEPTH_REG_MODE_D16 : IRIS_DEPTH_REG_MODE_HW_DEFAULT;
|
is_d16_1x_msaa ? IRIS_DEPTH_REG_MODE_D16_1X_MSAA :
|
||||||
|
IRIS_DEPTH_REG_MODE_HW_DEFAULT;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user