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

Marek Olšák maraeo at gmail.com
Mon Apr 3 10:18:08 UTC 2017


For the series:

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Sun, Apr 2, 2017 at 7:33 PM, Constantine Kharlamov
<Hi-Angel at yandex.ru> wrote:
> 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;
>  }
> --
> 2.12.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