[Mesa-dev] [PATCH] radv: disable the auto-waitcnt-before-barrier LLVM option

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Aug 15 13:36:41 UTC 2018



On 8/15/18 3:33 PM, Bas Nieuwenhuizen wrote:
> Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> 
> On Wed, Aug 15, 2018 at 3:09 PM, Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>> This option allows us to remove additional s_waitcnt instructions
>> because s_barrier internally does s_waitcnt 0.
>>
>> Though, apparently there is a problem with LDS accesses that
>> causes rendering issues with FFXV and DXVK. Disable this
>> optimization for now (RadeonSI still uses it).
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107460
>> CC: 18.2 <mesa-stable at lists.freedesktop.org>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>   src/amd/common/ac_llvm_util.c          | 3 ++-
>>   src/amd/common/ac_llvm_util.h          | 1 +
>>   src/gallium/drivers/radeonsi/si_pipe.c | 1 +
>>   3 files changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
>> index 10e1ca99d4..008a2cfa4e 100644
>> --- a/src/amd/common/ac_llvm_util.c
>> +++ b/src/amd/common/ac_llvm_util.c
>> @@ -149,7 +149,8 @@ static LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family,
>>          char features[256];
>>          const char *triple = (tm_options & AC_TM_SUPPORTS_SPILL) ? "amdgcn-mesa-mesa3d" : "amdgcn--";
>>          LLVMTargetRef target = ac_get_llvm_target(triple);
>> -       bool barrier_does_waitcnt = family != CHIP_VEGA20;
>> +       bool barrier_does_waitcnt = tm_options & AC_TM_AUTO_WAITCNT_BEFORE_BARRIER &&
> 
> Can you please do parentheses around the and? I know they're not
> strictly necessary but I'd like not to have to
> think about precedence too much.

Will do before pushing.

> 
>> +                                   family != CHIP_VEGA20;
>>
>>          snprintf(features, sizeof(features),
>>                   "+DumpCode,+vgpr-spilling,-fp32-denormals,+fp64-denormals%s%s%s%s%s",
>> diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
>> index eaf5f21876..e252bed3bb 100644
>> --- a/src/amd/common/ac_llvm_util.h
>> +++ b/src/amd/common/ac_llvm_util.h
>> @@ -65,6 +65,7 @@ enum ac_target_machine_options {
>>          AC_TM_CHECK_IR = (1 << 5),
>>          AC_TM_ENABLE_GLOBAL_ISEL = (1 << 6),
>>          AC_TM_CREATE_LOW_OPT = (1 << 7),
>> +       AC_TM_AUTO_WAITCNT_BEFORE_BARRIER = (1 << 8),
>>   };
>>
>>   enum ac_float_mode {
>> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
>> index 13fcf1f3ae..4327a3f749 100644
>> --- a/src/gallium/drivers/radeonsi/si_pipe.c
>> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
>> @@ -115,6 +115,7 @@ static void si_init_compiler(struct si_screen *sscreen,
>>                                         sscreen->info.chip_class <= VI;
>>
>>          enum ac_target_machine_options tm_options =
>> +               AC_TM_AUTO_WAITCNT_BEFORE_BARRIER |
>>                  (sscreen->debug_flags & DBG(SI_SCHED) ? AC_TM_SISCHED : 0) |
>>                  (sscreen->debug_flags & DBG(GISEL) ? AC_TM_ENABLE_GLOBAL_ISEL : 0) |
>>                  (sscreen->info.chip_class >= GFX9 ? AC_TM_FORCE_ENABLE_XNACK : 0) |
>> --
>> 2.18.0
>>
>> _______________________________________________
>> 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