[Mesa-dev] [PATCH] cso: add context cleanup code from st/mesa

Ilia Mirkin imirkin at alum.mit.edu
Mon May 18 06:57:48 PDT 2015


Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

On Mon, May 18, 2015 at 5:29 AM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> This fixes a crash in nouveau which can't handle
> set_constant_buffer(PIPE_SHADER_TESS_*).
> ---
>  src/gallium/auxiliary/cso_cache/cso_context.c | 7 +++++++
>  src/mesa/state_tracker/st_context.c           | 6 ------
>  2 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c
> index 59bad2c..744b00c 100644
> --- a/src/gallium/auxiliary/cso_cache/cso_context.c
> +++ b/src/gallium/auxiliary/cso_cache/cso_context.c
> @@ -300,6 +300,8 @@ void cso_destroy_context( struct cso_context *ctx )
>     unsigned i, shader;
>
>     if (ctx->pipe) {
> +      ctx->pipe->set_index_buffer(ctx->pipe, NULL);
> +
>        ctx->pipe->bind_blend_state( ctx->pipe, NULL );
>        ctx->pipe->bind_rasterizer_state( ctx->pipe, NULL );
>
> @@ -326,13 +328,18 @@ void cso_destroy_context( struct cso_context *ctx )
>
>        ctx->pipe->bind_depth_stencil_alpha_state( ctx->pipe, NULL );
>        ctx->pipe->bind_fs_state( ctx->pipe, NULL );
> +      ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_FRAGMENT, 0, NULL);
>        ctx->pipe->bind_vs_state( ctx->pipe, NULL );
> +      ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_VERTEX, 0, NULL);
>        if (ctx->has_geometry_shader) {
>           ctx->pipe->bind_gs_state(ctx->pipe, NULL);
> +         ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_GEOMETRY, 0, NULL);
>        }
>        if (ctx->has_tessellation) {
>           ctx->pipe->bind_tcs_state(ctx->pipe, NULL);
> +         ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_CTRL, 0, NULL);
>           ctx->pipe->bind_tes_state(ctx->pipe, NULL);
> +         ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_EVAL, 0, NULL);
>        }
>        ctx->pipe->bind_vertex_elements_state( ctx->pipe, NULL );
>
> diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
> index fa87dd7..ef4ad1b 100644
> --- a/src/mesa/state_tracker/st_context.c
> +++ b/src/mesa/state_tracker/st_context.c
> @@ -378,12 +378,6 @@ void st_destroy_context( struct st_context *st )
>     }
>     pipe_surface_reference(&st->state.framebuffer.zsbuf, NULL);
>
> -   pipe->set_index_buffer(pipe, NULL);
> -
> -   for (i = 0; i < PIPE_SHADER_TYPES; i++) {
> -      pipe->set_constant_buffer(pipe, i, 0, NULL);
> -   }
> -
>     _mesa_delete_program_cache(st->ctx, st->pixel_xfer.cache);
>
>     _vbo_DestroyContext(st->ctx);
> --
> 2.1.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list