[Mesa-dev] [PATCH] r600: Only set context streamout strides info from the shader that has outputs

Dave Airlie airlied at gmail.com
Mon Nov 19 07:15:15 UTC 2018


On Mon, 19 Nov 2018 at 16:56, Gert Wollny <gw.fossdev at gmail.com> wrote:
>
> From: Gert Wollny <gert.wollny at collabora.com>
>
> With 5d517a streamout info is only attached to the shader for which the
> transform feedback is actually recorded, but the driver set the context info
> with each state submitted, thereby always using the info data that was
> attached to the vertex shader.
>
> Pass the streamout stride info to the context only from the shader that
> actually has outputs. (Thanks to Marek Olšák for pointing me in the right
> direction)
>
> Fixes regresion with: dEQP-GLES31.functional.tessellation.invariance.*
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108734
> Fixes: 5d517a599b1eabd1d5696bf31e26f16568d35770
>   st/mesa: Don't record garbage streamout information in the non-SSO case.
>
> Signed-off-by: Gert Wollny <gert.wollny at collabora.com>

Looks good,

Reviewed-by: Dave Airlie <airlied at redhat.com>

> ---
>  src/gallium/drivers/r600/r600_state_common.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
> index 2d36541787..f886a27170 100644
> --- a/src/gallium/drivers/r600/r600_state_common.c
> +++ b/src/gallium/drivers/r600/r600_state_common.c
> @@ -1020,7 +1020,9 @@ static void r600_bind_vs_state(struct pipe_context *ctx, void *state)
>
>         rctx->vs_shader = (struct r600_pipe_shader_selector *)state;
>         r600_update_vs_writes_viewport_index(&rctx->b, r600_get_vs_info(rctx));
> -       rctx->b.streamout.stride_in_dw = rctx->vs_shader->so.stride;
> +
> +        if (rctx->vs_shader->so.num_outputs)
> +           rctx->b.streamout.stride_in_dw = rctx->vs_shader->so.stride;
>  }
>
>  static void r600_bind_gs_state(struct pipe_context *ctx, void *state)
> @@ -1035,7 +1037,9 @@ static void r600_bind_gs_state(struct pipe_context *ctx, void *state)
>
>         if (!state)
>                 return;
> -       rctx->b.streamout.stride_in_dw = rctx->gs_shader->so.stride;
> +
> +        if (rctx->gs_shader->so.num_outputs)
> +           rctx->b.streamout.stride_in_dw = rctx->gs_shader->so.stride;
>  }
>
>  static void r600_bind_tcs_state(struct pipe_context *ctx, void *state)
> @@ -1057,7 +1061,9 @@ static void r600_bind_tes_state(struct pipe_context *ctx, void *state)
>
>         if (!state)
>                 return;
> -       rctx->b.streamout.stride_in_dw = rctx->tes_shader->so.stride;
> +
> +        if (rctx->tes_shader->so.num_outputs)
> +           rctx->b.streamout.stride_in_dw = rctx->tes_shader->so.stride;
>  }
>
>  void r600_delete_shader_selector(struct pipe_context *ctx,
> --
> 2.18.1
>
> _______________________________________________
> 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