radv: adjust the VGT workaround for prim restart on GFX9

Submitted by Samuel Pitoiset on Oct. 11, 2018, 8:42 a.m.

Details

Message ID 20181011084253.978-1-samuel.pitoiset@gmail.com
State Superseded
Headers show
Series "radv: switch on EOP when primitive restart is enabled with triangle strips" ( rev: 3 ) in Mesa

Not browsing as part of any series.

Commit Message

Samuel Pitoiset Oct. 11, 2018, 8:42 a.m.
WD_SWITCH_ON_EOP seems to be the only workaround that fixes
the GPU hangs with Yakuza and The Evil Within on Vega. I don't
like as it might decrease geometry performance as pointed out
by Marek, but I don't know how to implement a better one.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
---
 src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 426b417e172..2256b2c58e9 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -3412,14 +3412,23 @@  radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
 	}
 
 	/* Workaround for a VGT hang when strip primitive types are used with
-	 * primitive restart.
+	 * primitive restart. This fixes GPU hangs with Yakuza and The Evil
+	 * Within, at least. Not sure if we can implement a better workaround.
 	 */
 	if (pipeline->graphics.prim_restart_enable &&
 	    (prim == V_008958_DI_PT_LINESTRIP ||
 	     prim == V_008958_DI_PT_TRISTRIP ||
 	     prim == V_008958_DI_PT_LINESTRIP_ADJ ||
 	     prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
-		ia_multi_vgt_param.partial_vs_wave = true;
+		if (device->physical_device->rad_info.chip_class >= GFX9) {
+			/* XXX: This might decrease geometry performance by 2x,
+			 * but this appears to be the only workaround that
+			 * fixes the GPU hang.
+			 */
+			ia_multi_vgt_param.wd_switch_on_eop = true;
+		} else {
+			ia_multi_vgt_param.partial_vs_wave = true;
+		}
 	}
 
 	ia_multi_vgt_param.base =

Comments

On Thu, Oct 11, 2018 at 4:43 AM Samuel Pitoiset
<samuel.pitoiset@gmail.com> wrote:
>
> WD_SWITCH_ON_EOP seems to be the only workaround that fixes
> the GPU hangs with Yakuza and The Evil Within on Vega. I don't
> like as it might decrease geometry performance as pointed out
> by Marek, but I don't know how to implement a better one.
>
> Cc: mesa-stable@lists.freedesktop.org
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
> ---
>  src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
> index 426b417e172..2256b2c58e9 100644
> --- a/src/amd/vulkan/radv_pipeline.c
> +++ b/src/amd/vulkan/radv_pipeline.c
> @@ -3412,14 +3412,23 @@ radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
>         }
>
>         /* Workaround for a VGT hang when strip primitive types are used with
> -        * primitive restart.
> +        * primitive restart. This fixes GPU hangs with Yakuza and The Evil
> +        * Within, at least. Not sure if we can implement a better workaround.
>          */
>         if (pipeline->graphics.prim_restart_enable &&
>             (prim == V_008958_DI_PT_LINESTRIP ||
>              prim == V_008958_DI_PT_TRISTRIP ||
>              prim == V_008958_DI_PT_LINESTRIP_ADJ ||
>              prim == V_008958_DI_PT_TRISTRIP_ADJ)) {

Adjacency primitive types should already have wd_switch_on_eop set to true.

The workaround I'm going to use is:

        if (!wd_switch_on_eop && key->u.primitive_restart)
            partial_vs_wave = true;

Our docs say we should do this. I don't know why it still hangs with
this workaround.

Marek
HI guys,

On Tue, 16 Oct 2018 at 22:06, Marek Olšák <maraeo@gmail.com> wrote:
>
> On Thu, Oct 11, 2018 at 4:43 AM Samuel Pitoiset
> <samuel.pitoiset@gmail.com> wrote:
> >
> > WD_SWITCH_ON_EOP seems to be the only workaround that fixes
> > the GPU hangs with Yakuza and The Evil Within on Vega. I don't
> > like as it might decrease geometry performance as pointed out
> > by Marek, but I don't know how to implement a better one.
> >
> > Cc: mesa-stable@lists.freedesktop.org
> > Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
> > ---
> >  src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
> >  1 file changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
> > index 426b417e172..2256b2c58e9 100644
> > --- a/src/amd/vulkan/radv_pipeline.c
> > +++ b/src/amd/vulkan/radv_pipeline.c
> > @@ -3412,14 +3412,23 @@ radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
> >         }
> >
> >         /* Workaround for a VGT hang when strip primitive types are used with
> > -        * primitive restart.
> > +        * primitive restart. This fixes GPU hangs with Yakuza and The Evil
> > +        * Within, at least. Not sure if we can implement a better workaround.
> >          */
> >         if (pipeline->graphics.prim_restart_enable &&
> >             (prim == V_008958_DI_PT_LINESTRIP ||
> >              prim == V_008958_DI_PT_TRISTRIP ||
> >              prim == V_008958_DI_PT_LINESTRIP_ADJ ||
> >              prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
>
> Adjacency primitive types should already have wd_switch_on_eop set to true.
>
> The workaround I'm going to use is:
>
>         if (!wd_switch_on_eop && key->u.primitive_restart)
>             partial_vs_wave = true;
>
> Our docs say we should do this. I don't know why it still hangs with
> this workaround.
>
I can see that Marek committed the above suggestion to radeonsi as
commit eae8f49fc65e6e625f5e05d38c3bf1b61b84bd3d
Yet I cannot see an equivalent patch for radv.

Samuel I'm assuming that you're working on something else and didn't
get back to this one?
Alternatively, please let me know which commit addresses the GPU
hangs, and if we'd want it in stable.

Thanks
Emil
On 11/8/18 4:43 PM, Emil Velikov wrote:
> HI guys,
> 
> On Tue, 16 Oct 2018 at 22:06, Marek Olšák <maraeo@gmail.com> wrote:
>>
>> On Thu, Oct 11, 2018 at 4:43 AM Samuel Pitoiset
>> <samuel.pitoiset@gmail.com> wrote:
>>>
>>> WD_SWITCH_ON_EOP seems to be the only workaround that fixes
>>> the GPU hangs with Yakuza and The Evil Within on Vega. I don't
>>> like as it might decrease geometry performance as pointed out
>>> by Marek, but I don't know how to implement a better one.
>>>
>>> Cc: mesa-stable@lists.freedesktop.org
>>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
>>> ---
>>>   src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
>>>   1 file changed, 11 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
>>> index 426b417e172..2256b2c58e9 100644
>>> --- a/src/amd/vulkan/radv_pipeline.c
>>> +++ b/src/amd/vulkan/radv_pipeline.c
>>> @@ -3412,14 +3412,23 @@ radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
>>>          }
>>>
>>>          /* Workaround for a VGT hang when strip primitive types are used with
>>> -        * primitive restart.
>>> +        * primitive restart. This fixes GPU hangs with Yakuza and The Evil
>>> +        * Within, at least. Not sure if we can implement a better workaround.
>>>           */
>>>          if (pipeline->graphics.prim_restart_enable &&
>>>              (prim == V_008958_DI_PT_LINESTRIP ||
>>>               prim == V_008958_DI_PT_TRISTRIP ||
>>>               prim == V_008958_DI_PT_LINESTRIP_ADJ ||
>>>               prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
>>
>> Adjacency primitive types should already have wd_switch_on_eop set to true.
>>
>> The workaround I'm going to use is:
>>
>>          if (!wd_switch_on_eop && key->u.primitive_restart)
>>              partial_vs_wave = true;
>>
>> Our docs say we should do this. I don't know why it still hangs with
>> this workaround.
>>
> I can see that Marek committed the above suggestion to radeonsi as
> commit eae8f49fc65e6e625f5e05d38c3bf1b61b84bd3d
> Yet I cannot see an equivalent patch for radv.
> 
> Samuel I'm assuming that you're working on something else and didn't
> get back to this one?
> Alternatively, please let me know which commit addresses the GPU
> hangs, and if we'd want it in stable.

Hi,

"[PATCH v2] radv: add a workaround for a VGT hang with prim restart and 
strips" should already be in stable.

This one hasn't been pushed because it might decrease performance and we 
might want to find a better solution.

Thanks.
> 
> Thanks
> Emil
>
On Thu, 8 Nov 2018 at 16:01, Samuel Pitoiset <samuel.pitoiset@gmail.com> wrote:
>
> On 11/8/18 4:43 PM, Emil Velikov wrote:
> > HI guys,
> >
> > On Tue, 16 Oct 2018 at 22:06, Marek Olšák <maraeo@gmail.com> wrote:
> >>
> >> On Thu, Oct 11, 2018 at 4:43 AM Samuel Pitoiset
> >> <samuel.pitoiset@gmail.com> wrote:
> >>>
> >>> WD_SWITCH_ON_EOP seems to be the only workaround that fixes
> >>> the GPU hangs with Yakuza and The Evil Within on Vega. I don't
> >>> like as it might decrease geometry performance as pointed out
> >>> by Marek, but I don't know how to implement a better one.
> >>>
> >>> Cc: mesa-stable@lists.freedesktop.org
> >>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
> >>> ---
> >>>   src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
> >>>   1 file changed, 11 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
> >>> index 426b417e172..2256b2c58e9 100644
> >>> --- a/src/amd/vulkan/radv_pipeline.c
> >>> +++ b/src/amd/vulkan/radv_pipeline.c
> >>> @@ -3412,14 +3412,23 @@ radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
> >>>          }
> >>>
> >>>          /* Workaround for a VGT hang when strip primitive types are used with
> >>> -        * primitive restart.
> >>> +        * primitive restart. This fixes GPU hangs with Yakuza and The Evil
> >>> +        * Within, at least. Not sure if we can implement a better workaround.
> >>>           */
> >>>          if (pipeline->graphics.prim_restart_enable &&
> >>>              (prim == V_008958_DI_PT_LINESTRIP ||
> >>>               prim == V_008958_DI_PT_TRISTRIP ||
> >>>               prim == V_008958_DI_PT_LINESTRIP_ADJ ||
> >>>               prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
> >>
> >> Adjacency primitive types should already have wd_switch_on_eop set to true.
> >>
> >> The workaround I'm going to use is:
> >>
> >>          if (!wd_switch_on_eop && key->u.primitive_restart)
> >>              partial_vs_wave = true;
> >>
> >> Our docs say we should do this. I don't know why it still hangs with
> >> this workaround.
> >>
> > I can see that Marek committed the above suggestion to radeonsi as
> > commit eae8f49fc65e6e625f5e05d38c3bf1b61b84bd3d
> > Yet I cannot see an equivalent patch for radv.
> >
> > Samuel I'm assuming that you're working on something else and didn't
> > get back to this one?
> > Alternatively, please let me know which commit addresses the GPU
> > hangs, and if we'd want it in stable.
>
> Hi,
>
> "[PATCH v2] radv: add a workaround for a VGT hang with prim restart and
> strips" should already be in stable.
>
> This one hasn't been pushed because it might decrease performance and we
> might want to find a better solution.
>
The patch mentioned should address the GPU hang for radeonsi.
Although eop/eoi <> vs_wave handling is flipped in radv, relative to radeonsi.

If one toggles that, the radeonsi fix could be trivially ported.

HTH
Emil
On 11/8/18 5:49 PM, Emil Velikov wrote:
> On Thu, 8 Nov 2018 at 16:01, Samuel Pitoiset <samuel.pitoiset@gmail.com> wrote:
>>
>> On 11/8/18 4:43 PM, Emil Velikov wrote:
>>> HI guys,
>>>
>>> On Tue, 16 Oct 2018 at 22:06, Marek Olšák <maraeo@gmail.com> wrote:
>>>>
>>>> On Thu, Oct 11, 2018 at 4:43 AM Samuel Pitoiset
>>>> <samuel.pitoiset@gmail.com> wrote:
>>>>>
>>>>> WD_SWITCH_ON_EOP seems to be the only workaround that fixes
>>>>> the GPU hangs with Yakuza and The Evil Within on Vega. I don't
>>>>> like as it might decrease geometry performance as pointed out
>>>>> by Marek, but I don't know how to implement a better one.
>>>>>
>>>>> Cc: mesa-stable@lists.freedesktop.org
>>>>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
>>>>> ---
>>>>>    src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
>>>>>    1 file changed, 11 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
>>>>> index 426b417e172..2256b2c58e9 100644
>>>>> --- a/src/amd/vulkan/radv_pipeline.c
>>>>> +++ b/src/amd/vulkan/radv_pipeline.c
>>>>> @@ -3412,14 +3412,23 @@ radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
>>>>>           }
>>>>>
>>>>>           /* Workaround for a VGT hang when strip primitive types are used with
>>>>> -        * primitive restart.
>>>>> +        * primitive restart. This fixes GPU hangs with Yakuza and The Evil
>>>>> +        * Within, at least. Not sure if we can implement a better workaround.
>>>>>            */
>>>>>           if (pipeline->graphics.prim_restart_enable &&
>>>>>               (prim == V_008958_DI_PT_LINESTRIP ||
>>>>>                prim == V_008958_DI_PT_TRISTRIP ||
>>>>>                prim == V_008958_DI_PT_LINESTRIP_ADJ ||
>>>>>                prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
>>>>
>>>> Adjacency primitive types should already have wd_switch_on_eop set to true.
>>>>
>>>> The workaround I'm going to use is:
>>>>
>>>>           if (!wd_switch_on_eop && key->u.primitive_restart)
>>>>               partial_vs_wave = true;
>>>>
>>>> Our docs say we should do this. I don't know why it still hangs with
>>>> this workaround.
>>>>
>>> I can see that Marek committed the above suggestion to radeonsi as
>>> commit eae8f49fc65e6e625f5e05d38c3bf1b61b84bd3d
>>> Yet I cannot see an equivalent patch for radv.
>>>
>>> Samuel I'm assuming that you're working on something else and didn't
>>> get back to this one?
>>> Alternatively, please let me know which commit addresses the GPU
>>> hangs, and if we'd want it in stable.
>>
>> Hi,
>>
>> "[PATCH v2] radv: add a workaround for a VGT hang with prim restart and
>> strips" should already be in stable.
>>
>> This one hasn't been pushed because it might decrease performance and we
>> might want to find a better solution.
>>
> The patch mentioned should address the GPU hang for radeonsi.
> Although eop/eoi <> vs_wave handling is flipped in radv, relative to radeonsi.
> 
> If one toggles that, the radeonsi fix could be trivially ported.

There is still a difference between RADV and RadeonSI.

That game (ie. Yakuza 0) is now fixed with D3D/RadeonSI and with Marek's 
patch on Polaris/Vega.

But, it stills hangs with DXVK/RADV on Vega for some reasons. Setting 
partial_vs_wave doesn't seem to be enough, while it correctly fixes 
Polaris...

Needs more investigation.

> 
> HTH
> Emil
>
ping?

After looking into this again today, I can't find any better solutions. 
We should probably push this patch because at least two games are 
affected. My opinion is that correctness is more important than performance.

On 10/11/18 10:42 AM, Samuel Pitoiset wrote:
> WD_SWITCH_ON_EOP seems to be the only workaround that fixes
> the GPU hangs with Yakuza and The Evil Within on Vega. I don't
> like as it might decrease geometry performance as pointed out
> by Marek, but I don't know how to implement a better one.
> 
> Cc: mesa-stable@lists.freedesktop.org
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
> ---
>   src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
>   1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
> index 426b417e172..2256b2c58e9 100644
> --- a/src/amd/vulkan/radv_pipeline.c
> +++ b/src/amd/vulkan/radv_pipeline.c
> @@ -3412,14 +3412,23 @@ radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
>   	}
>   
>   	/* Workaround for a VGT hang when strip primitive types are used with
> -	 * primitive restart.
> +	 * primitive restart. This fixes GPU hangs with Yakuza and The Evil
> +	 * Within, at least. Not sure if we can implement a better workaround.
>   	 */
>   	if (pipeline->graphics.prim_restart_enable &&
>   	    (prim == V_008958_DI_PT_LINESTRIP ||
>   	     prim == V_008958_DI_PT_TRISTRIP ||
>   	     prim == V_008958_DI_PT_LINESTRIP_ADJ ||
>   	     prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
> -		ia_multi_vgt_param.partial_vs_wave = true;
> +		if (device->physical_device->rad_info.chip_class >= GFX9) {
> +			/* XXX: This might decrease geometry performance by 2x,
> +			 * but this appears to be the only workaround that
> +			 * fixes the GPU hang.
> +			 */
> +			ia_multi_vgt_param.wd_switch_on_eop = true;
> +		} else {
> +			ia_multi_vgt_param.partial_vs_wave = true;
> +		}
>   	}
>   
>   	ia_multi_vgt_param.base =
>
It's up to you as long as you're OK with downgraded performance of triangle
strips with primitive restart.

Marek

On Tue, Dec 11, 2018 at 10:08 AM Samuel Pitoiset <samuel.pitoiset@gmail.com>
wrote:

> ping?
>
> After looking into this again today, I can't find any better solutions.
> We should probably push this patch because at least two games are
> affected. My opinion is that correctness is more important than
> performance.
>
> On 10/11/18 10:42 AM, Samuel Pitoiset wrote:
> > WD_SWITCH_ON_EOP seems to be the only workaround that fixes
> > the GPU hangs with Yakuza and The Evil Within on Vega. I don't
> > like as it might decrease geometry performance as pointed out
> > by Marek, but I don't know how to implement a better one.
> >
> > Cc: mesa-stable@lists.freedesktop.org
> > Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
> > ---
> >   src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
> >   1 file changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/amd/vulkan/radv_pipeline.c
> b/src/amd/vulkan/radv_pipeline.c
> > index 426b417e172..2256b2c58e9 100644
> > --- a/src/amd/vulkan/radv_pipeline.c
> > +++ b/src/amd/vulkan/radv_pipeline.c
> > @@ -3412,14 +3412,23 @@ radv_compute_ia_multi_vgt_param_helpers(struct
> radv_pipeline *pipeline,
> >       }
> >
> >       /* Workaround for a VGT hang when strip primitive types are used
> with
> > -      * primitive restart.
> > +      * primitive restart. This fixes GPU hangs with Yakuza and The Evil
> > +      * Within, at least. Not sure if we can implement a better
> workaround.
> >        */
> >       if (pipeline->graphics.prim_restart_enable &&
> >           (prim == V_008958_DI_PT_LINESTRIP ||
> >            prim == V_008958_DI_PT_TRISTRIP ||
> >            prim == V_008958_DI_PT_LINESTRIP_ADJ ||
> >            prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
> > -             ia_multi_vgt_param.partial_vs_wave = true;
> > +             if (device->physical_device->rad_info.chip_class >= GFX9) {
> > +                     /* XXX: This might decrease geometry performance
> by 2x,
> > +                      * but this appears to be the only workaround that
> > +                      * fixes the GPU hang.
> > +                      */
> > +                     ia_multi_vgt_param.wd_switch_on_eop = true;
> > +             } else {
> > +                     ia_multi_vgt_param.partial_vs_wave = true;
> > +             }
> >       }
> >
> >       ia_multi_vgt_param.base =
> >
> _______________________________________________
> mesa-stable mailing list
> mesa-stable@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-stable
>
On 12/11/18 8:57 PM, Marek Olšák wrote:
> It's up to you as long as you're OK with downgraded performance of 
> triangle strips with primitive restart.

I'm OK with it, at least for now. From my point of view, it's definitely 
better to avoid GPU hangs.

Bas, what's your opinion?

> 
> Marek
> 
> On Tue, Dec 11, 2018 at 10:08 AM Samuel Pitoiset 
> <samuel.pitoiset@gmail.com <mailto:samuel.pitoiset@gmail.com>> wrote:
> 
>     ping?
> 
>     After looking into this again today, I can't find any better solutions.
>     We should probably push this patch because at least two games are
>     affected. My opinion is that correctness is more important than
>     performance.
> 
>     On 10/11/18 10:42 AM, Samuel Pitoiset wrote:
>      > WD_SWITCH_ON_EOP seems to be the only workaround that fixes
>      > the GPU hangs with Yakuza and The Evil Within on Vega. I don't
>      > like as it might decrease geometry performance as pointed out
>      > by Marek, but I don't know how to implement a better one.
>      >
>      > Cc: mesa-stable@lists.freedesktop.org
>     <mailto:mesa-stable@lists.freedesktop.org>
>      > Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com
>     <mailto:samuel.pitoiset@gmail.com>>
>      > ---
>      >   src/amd/vulkan/radv_pipeline.c | 13 +++++++++++--
>      >   1 file changed, 11 insertions(+), 2 deletions(-)
>      >
>      > diff --git a/src/amd/vulkan/radv_pipeline.c
>     b/src/amd/vulkan/radv_pipeline.c
>      > index 426b417e172..2256b2c58e9 100644
>      > --- a/src/amd/vulkan/radv_pipeline.c
>      > +++ b/src/amd/vulkan/radv_pipeline.c
>      > @@ -3412,14 +3412,23 @@
>     radv_compute_ia_multi_vgt_param_helpers(struct radv_pipeline *pipeline,
>      >       }
>      >
>      >       /* Workaround for a VGT hang when strip primitive types are
>     used with
>      > -      * primitive restart.
>      > +      * primitive restart. This fixes GPU hangs with Yakuza and
>     The Evil
>      > +      * Within, at least. Not sure if we can implement a better
>     workaround.
>      >        */
>      >       if (pipeline->graphics.prim_restart_enable &&
>      >           (prim == V_008958_DI_PT_LINESTRIP ||
>      >            prim == V_008958_DI_PT_TRISTRIP ||
>      >            prim == V_008958_DI_PT_LINESTRIP_ADJ ||
>      >            prim == V_008958_DI_PT_TRISTRIP_ADJ)) {
>      > -             ia_multi_vgt_param.partial_vs_wave = true;
>      > +             if (device->physical_device->rad_info.chip_class >=
>     GFX9) {
>      > +                     /* XXX: This might decrease geometry
>     performance by 2x,
>      > +                      * but this appears to be the only
>     workaround that
>      > +                      * fixes the GPU hang.
>      > +                      */
>      > +                     ia_multi_vgt_param.wd_switch_on_eop = true;
>      > +             } else {
>      > +                     ia_multi_vgt_param.partial_vs_wave = true;
>      > +             }
>      >       }
>      >
>      >       ia_multi_vgt_param.base =
>      >
>     _______________________________________________
>     mesa-stable mailing list
>     mesa-stable@lists.freedesktop.org
>     <mailto:mesa-stable@lists.freedesktop.org>
>     https://lists.freedesktop.org/mailman/listinfo/mesa-stable
>