[Mesa-dev] [PATCH 2/2] radeonsi: remove SET_PREDICATION workaround on newer firmware

Marek Olšák maraeo at gmail.com
Tue Sep 12 23:50:08 UTC 2017


For the series:

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

Marek

On Mon, Sep 11, 2017 at 5:01 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> We need to keep the workaround for older firmware, though.
> ---
>  src/gallium/drivers/radeon/r600_query.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c
> index 03ff1018a71..76307ca0662 100644
> --- a/src/gallium/drivers/radeon/r600_query.c
> +++ b/src/gallium/drivers/radeon/r600_query.c
> @@ -1796,25 +1796,27 @@ static void r600_render_condition(struct pipe_context *ctx,
>         struct r600_common_context *rctx = (struct r600_common_context *)ctx;
>         struct r600_query_hw *rquery = (struct r600_query_hw *)query;
>         struct r600_query_buffer *qbuf;
>         struct r600_atom *atom = &rctx->render_cond_atom;
>
>         /* Compute the size of SET_PREDICATION packets. */
>         atom->num_dw = 0;
>         if (query) {
>                 bool needs_workaround = false;
>
> -               /* There is a firmware regression in VI which causes successive
> +               /* There was a firmware regression in VI which causes successive
>                  * SET_PREDICATION packets to give the wrong answer for
>                  * non-inverted stream overflow predication.
>                  */
> -               if (rctx->chip_class >= VI && !condition &&
> +               if (((rctx->chip_class == VI && rctx->screen->info.pfp_fw_feature < 49) ||
> +                    (rctx->chip_class == GFX9 && rctx->screen->info.pfp_fw_feature < 38)) &&
> +                   !condition &&
>                     (rquery->b.type == PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE ||
>                      (rquery->b.type == PIPE_QUERY_SO_OVERFLOW_PREDICATE &&
>                       (rquery->buffer.previous ||
>                        rquery->buffer.results_end > rquery->result_size)))) {
>                         needs_workaround = true;
>                 }
>
>                 if (needs_workaround && !rquery->workaround_buf) {
>                         bool old_force_off = rctx->render_cond_force_off;
>                         rctx->render_cond_force_off = true;
> --
> 2.11.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