[Mesa-dev] [PATCH v2] radeonsi: update hack for HTILE corruption in ARK: Survival Evolved

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri Oct 27 08:49:34 UTC 2017


Pushed with "clear_db_cache_before_clear", Thanks Marek.

On 10/26/2017 10:42 PM, Marek Olšák wrote:
> 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