[Mesa-dev] [PATCH v2] radeonsi: update hack for HTILE corruption in ARK: Survival Evolved
Marek Olšák
maraeo at gmail.com
Thu Oct 26 20:42:41 UTC 2017
Please "clear_db_cache_before_clear" and the option too. With that,
the patch is:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Thanks,
Marek
On Thu, Oct 26, 2017 at 6:08 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> It appears that flushing the DB metadata is actually not sufficient
> since the driver uses the new VS blit shaders. This looks quite
> strange though, but it seems like we need to flush DB for fixing
> the corruption.
>
> v2: rename the drirc option
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102955
> Fixes: 69ccb9dae7 (radeonsi: use new VS blit shaders (VS inputs in SGPRs)
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/gallium/drivers/radeonsi/driinfo_radeonsi.h | 2 +-
> src/gallium/drivers/radeonsi/si_blit.c | 10 +++++-----
> src/gallium/drivers/radeonsi/si_pipe.c | 4 ++--
> src/gallium/drivers/radeonsi/si_pipe.h | 2 +-
> src/util/drirc | 2 +-
> src/util/xmlpool/t_options.h | 6 +++---
> 6 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/driinfo_radeonsi.h b/src/gallium/drivers/radeonsi/driinfo_radeonsi.h
> index 402d3406d4..ef264b7d5e 100644
> --- a/src/gallium/drivers/radeonsi/driinfo_radeonsi.h
> +++ b/src/gallium/drivers/radeonsi/driinfo_radeonsi.h
> @@ -6,5 +6,5 @@ DRI_CONF_SECTION_PERFORMANCE
> DRI_CONF_SECTION_END
>
> DRI_CONF_SECTION_DEBUG
> - DRI_CONF_RADEONSI_CLEAR_DB_META_BEFORE_CLEAR("false")
> + DRI_CONF_RADEONSI_CLEAR_DB_BEFORE_CLEAR("false")
> DRI_CONF_SECTION_END
> diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
> index fd8559ac98..ce1b5a3e1a 100644
> --- a/src/gallium/drivers/radeonsi/si_blit.c
> +++ b/src/gallium/drivers/radeonsi/si_blit.c
> @@ -901,16 +901,16 @@ static void si_clear(struct pipe_context *ctx, unsigned buffers,
> * corruption in ARK: Survival Evolved, but that may just be
> * a coincidence and the root cause is elsewhere.
> *
> - * The corruption can be fixed by putting the DB metadata flush
> - * before or after the depth clear. (suprisingly)
> + * The corruption can be fixed by putting the DB flush before
> + * or after the depth clear. (surprisingly)
> *
> * https://bugs.freedesktop.org/show_bug.cgi?id=102955 (apitrace)
> *
> * This hack decreases back-to-back ClearDepth performance.
> */
> - if (sctx->screen->clear_db_meta_before_clear)
> - sctx->b.flags |= SI_CONTEXT_FLUSH_AND_INV_DB_META |
> - SI_CONTEXT_PS_PARTIAL_FLUSH;
> + if (sctx->screen->clear_db_before_clear) {
> + sctx->b.flags |= SI_CONTEXT_FLUSH_AND_INV_DB;
> + }
> }
>
> si_blitter_begin(ctx, SI_CLEAR);
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
> index 759d539471..21266611c7 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -1072,8 +1072,8 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
> driQueryOptionb(config->options, "radeonsi_assume_no_z_fights");
> sscreen->commutative_blend_add =
> driQueryOptionb(config->options, "radeonsi_commutative_blend_add");
> - sscreen->clear_db_meta_before_clear =
> - driQueryOptionb(config->options, "radeonsi_clear_db_meta_before_clear");
> + sscreen->clear_db_before_clear =
> + driQueryOptionb(config->options, "radeonsi_clear_db_before_clear");
> sscreen->has_msaa_sample_loc_bug = (sscreen->b.family >= CHIP_POLARIS10 &&
> sscreen->b.family <= CHIP_POLARIS12) ||
> sscreen->b.family == CHIP_VEGA10 ||
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
> index c162a0fcd6..8138d4234a 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.h
> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
> @@ -98,7 +98,7 @@ struct si_screen {
> bool has_out_of_order_rast;
> bool assume_no_z_fights;
> bool commutative_blend_add;
> - bool clear_db_meta_before_clear;
> + bool clear_db_before_clear;
> bool has_msaa_sample_loc_bug;
> bool dpbb_allowed;
> bool dfsm_allowed;
> diff --git a/src/util/drirc b/src/util/drirc
> index 39ac3c858c..2d1f53ccbc 100644
> --- a/src/util/drirc
> +++ b/src/util/drirc
> @@ -264,7 +264,7 @@ TODO: document the other workarounds.
> </device>
> <device driver="radeonsi">
> <application name="ARK: Survival Evolved (and unintentionally the UE4 demo template)" executable="ShooterGame">
> - <option name="radeonsi_clear_db_meta_before_clear" value="true" />
> + <option name="radeonsi_clear_db_before_clear" value="true" />
> </application>
> </device>
> </driconf>
> diff --git a/src/util/xmlpool/t_options.h b/src/util/xmlpool/t_options.h
> index 957ed61504..d5ea55efa5 100644
> --- a/src/util/xmlpool/t_options.h
> +++ b/src/util/xmlpool/t_options.h
> @@ -444,7 +444,7 @@ DRI_CONF_OPT_BEGIN_B(radeonsi_commutative_blend_add, def) \
> DRI_CONF_DESC(en,gettext("Commutative additive blending optimizations (may cause rendering errors)")) \
> DRI_CONF_OPT_END
>
> -#define DRI_CONF_RADEONSI_CLEAR_DB_META_BEFORE_CLEAR(def) \
> -DRI_CONF_OPT_BEGIN_B(radeonsi_clear_db_meta_before_clear, def) \
> - DRI_CONF_DESC(en,"Clear DB metadata cache before fast depth clear") \
> +#define DRI_CONF_RADEONSI_CLEAR_DB_BEFORE_CLEAR(def) \
> +DRI_CONF_OPT_BEGIN_B(radeonsi_clear_db_before_clear, def) \
> + DRI_CONF_DESC(en,"Clear DB cache before fast depth clear") \
> DRI_CONF_OPT_END
> --
> 2.14.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list