[Mesa-dev] [PATCH] swr: Update screen->context pointer with multiple contexts.
Cherniak, Bruce
bruce.cherniak at intel.com
Fri Jun 17 14:18:12 UTC 2016
> On Jun 17, 2016, at 8:56 AM, Rowley, Timothy O <timothy.o.rowley at intel.com> wrote:
>
>
>> On Jun 17, 2016, at 8:58 AM, 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.
>> ---
>> src/gallium/drivers/swr/swr_context.cpp | 6 ++++--
>> src/gallium/drivers/swr/swr_state.cpp | 4 ++++
>> 2 files changed, 8 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/gallium/drivers/swr/swr_context.cpp b/src/gallium/drivers/swr/swr_context.cpp
>> index 3a5d9e0..df9e53e 100644
>> --- a/src/gallium/drivers/swr/swr_context.cpp
>> +++ b/src/gallium/drivers/swr/swr_context.cpp
>> @@ -323,7 +323,8 @@ swr_destroy(struct pipe_context *pipe)
>> swr_destroy_scratch_buffers(ctx);
>>
>> assert(screen);
>> - screen->pipe = NULL;
>> + if (screen->pipe == pipe)
>> + screen->pipe = NULL;
>>
>> FREE(ctx);
>> }
>> @@ -366,7 +367,8 @@ swr_create_context(struct pipe_screen *p_screen, void *priv, unsigned flags)
>> if (ctx->swrContext == NULL)
>> goto fail;
>>
>> - screen->pipe = &ctx->pipe;
>> + if (!screen->pipe)
>> + 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..8162fff 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);
>>
>> + /* Switch current screen->pipe context */
>> + if (screen->pipe != screen->pipe)
>> + screen->pipe = pipe;
>> +
>
>
> Pretty sure this test isn’t what you intended.
Wow! I need a cup of coffee!
>
>> /* 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