[Mesa-dev] [PATCH v2] swr: Update screen->context pointer with multiple contexts.

Rowley, Timothy O timothy.o.rowley at intel.com
Fri Jun 17 18:30:34 UTC 2016


Reviewed-by: Tim Rowley <timothy.o.rowley at intel.com>

> On Jun 17, 2016, at 12:14 PM, Bruce Cherniak <bruce.cherniak at intel.com> wrote:
> 
> A pipe pointer in the screen allows for access to current device context
> in flush_frontbuffer and resource_destroy.  This wasn't tracking current
> context in multi-context situations.
> 
> v2: More caffeine.  Corrected compare, removed unnecessary set of
> screen-pipe in create_context, and added a few comments.
> ---
> src/gallium/drivers/swr/swr_context.cpp |    6 +++---
> src/gallium/drivers/swr/swr_state.cpp   |    4 ++++
> 2 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/src/gallium/drivers/swr/swr_context.cpp b/src/gallium/drivers/swr/swr_context.cpp
> index 3a5d9e0..1f3a14c 100644
> --- a/src/gallium/drivers/swr/swr_context.cpp
> +++ b/src/gallium/drivers/swr/swr_context.cpp
> @@ -322,8 +322,10 @@ swr_destroy(struct pipe_context *pipe)
> 
>    swr_destroy_scratch_buffers(ctx);
> 
> +   /* Only update screen->pipe if current context is being destroyed */
>    assert(screen);
> -   screen->pipe = NULL;
> +   if (screen->pipe == pipe)
> +      screen->pipe = NULL;
> 
>    FREE(ctx);
> }
> @@ -346,7 +348,6 @@ struct pipe_context *
> swr_create_context(struct pipe_screen *p_screen, void *priv, unsigned flags)
> {
>    struct swr_context *ctx = CALLOC_STRUCT(swr_context);
> -   struct swr_screen *screen = swr_screen(p_screen);
>    ctx->blendJIT =
>       new std::unordered_map<BLEND_COMPILE_STATE, PFN_BLEND_JIT_FUNC>;
> 
> @@ -366,7 +367,6 @@ swr_create_context(struct pipe_screen *p_screen, void *priv, unsigned flags)
>    if (ctx->swrContext == NULL)
>       goto fail;
> 
> -   screen->pipe = &ctx->pipe;
>    ctx->pipe.screen = p_screen;
>    ctx->pipe.destroy = swr_destroy;
>    ctx->pipe.priv = priv;
> diff --git a/src/gallium/drivers/swr/swr_state.cpp b/src/gallium/drivers/swr/swr_state.cpp
> index 3eeb98d..1f34365 100644
> --- a/src/gallium/drivers/swr/swr_state.cpp
> +++ b/src/gallium/drivers/swr/swr_state.cpp
> @@ -776,6 +776,10 @@ swr_update_derived(struct pipe_context *pipe,
>    struct swr_context *ctx = swr_context(pipe);
>    struct swr_screen *screen = swr_screen(ctx->pipe.screen);
> 
> +   /* Update screen->pipe to current pipe context. */
> +   if (screen->pipe != pipe)
> +      screen->pipe = pipe;
> +
>    /* Any state that requires dirty flags to be re-triggered sets this mask */
>    /* For example, user_buffer vertex and index buffers. */
>    unsigned post_update_dirty_flags = 0;
> -- 
> 1.7.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