[Mesa-dev] [PATCH 4/4] r600g: check rasterizer primitive states like in radeonsi

Marek Olšák maraeo at gmail.com
Tue Apr 4 20:16:24 UTC 2017


Pushed. Thanks!

Marek

On Tue, Apr 4, 2017 at 4:45 PM, Dieter Nützel <Dieter at nuetzel-hh.de> wrote:
> For the series:
>
> Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>
>
> On Turks XT (6670).
>
> Marek can you apply?
>
> Dieter
>
>
> Am 02.04.2017 19:33, schrieb Constantine Kharlamov:
>>
>> Specifically, non-line primitives skipped, and defaulting to reset on
>> each packet.
>>
>> The skip of non-line primitives saves ≈110 resetting of
>> PA_SC_LINE_STIPPLE register per frame in Kane&Lynch2.
>>
>> Signed-off-by: Constantine Kharlamov <Hi-Angel at yandex.ru>
>> ---
>>  src/gallium/drivers/r600/r600_state_common.c | 21 +++++++++++++--------
>>  1 file changed, 13 insertions(+), 8 deletions(-)
>>
>> diff --git a/src/gallium/drivers/r600/r600_state_common.c
>> b/src/gallium/drivers/r600/r600_state_common.c
>> index e4d1660933..4de2a7344b 100644
>> --- a/src/gallium/drivers/r600/r600_state_common.c
>> +++ b/src/gallium/drivers/r600/r600_state_common.c
>> @@ -1670,19 +1670,24 @@ void r600_emit_clip_misc_state(struct
>> r600_context *rctx, struct r600_atom *atom
>>  static inline void r600_emit_rasterizer_prim_state(struct r600_context
>> *rctx)
>>  {
>>         struct radeon_winsys_cs *cs = rctx->b.gfx.cs;
>> -       unsigned ls_mask = 0;
>>         enum pipe_prim_type rast_prim = rctx->current_rast_prim;
>> -       if (rast_prim == rctx->last_rast_prim)
>> +
>> +       /* Skip this if not rendering lines. */
>> +       if (rast_prim != PIPE_PRIM_LINES &&
>> +           rast_prim != PIPE_PRIM_LINE_LOOP &&
>> +           rast_prim != PIPE_PRIM_LINE_STRIP &&
>> +           rast_prim != PIPE_PRIM_LINES_ADJACENCY &&
>> +           rast_prim != PIPE_PRIM_LINE_STRIP_ADJACENCY)
>>                 return;
>>
>> -       if (rast_prim == PIPE_PRIM_LINES)
>> -               ls_mask = 1;
>> -       else if (rast_prim == PIPE_PRIM_LINE_STRIP ||
>> -                rast_prim == PIPE_PRIM_LINE_LOOP)
>> -               ls_mask = 2;
>> +       if (rast_prim == rctx->last_rast_prim)
>> +               return;
>>
>> +       /* For lines, reset the stipple pattern at each primitive.
>> Otherwise,
>> +        * reset the stipple pattern at each packet (line strips, line
>> loops).
>> +        */
>>         radeon_set_context_reg(cs, R_028A0C_PA_SC_LINE_STIPPLE,
>> -                              S_028A0C_AUTO_RESET_CNTL(ls_mask) |
>> +                              S_028A0C_AUTO_RESET_CNTL(rast_prim ==
>> PIPE_PRIM_LINES ? 1 : 2) |
>>                                (rctx->rasterizer ?
>> rctx->rasterizer->pa_sc_line_stipple : 0));
>>         rctx->last_rast_prim = rast_prim;
>>  }
>
> _______________________________________________
> 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