diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c index 18c600cf80e..0df187ef3b6 100644 --- a/src/mesa/main/glthread.c +++ b/src/mesa/main/glthread.c @@ -246,9 +246,6 @@ _mesa_glthread_init(struct gl_context *ctx) _mesa_glthread_init_call_fence(&glthread->LastProgramChangeBatch); _mesa_glthread_init_call_fence(&glthread->LastDListChangeBatchIndex); - /* glthread takes over all L3 pinning */ - ctx->st->pin_thread_counter = ST_THREAD_SCHEDULER_DISABLED; - _mesa_glthread_enable(ctx); /* Execute the thread initialization function in the thread. */ @@ -299,6 +296,9 @@ void _mesa_glthread_enable(struct gl_context *ctx) ctx->GLThread.enabled = true; ctx->GLApi = ctx->MarshalExec; + /* glthread takes over all thread scheduling. */ + ctx->st->pin_thread_counter = ST_THREAD_SCHEDULER_DISABLED; + /* Update the dispatch only if the dispatch is current. */ if (_glapi_get_dispatch() == ctx->Dispatch.Current) { _glapi_set_dispatch(ctx->GLApi); @@ -315,6 +315,10 @@ void _mesa_glthread_disable(struct gl_context *ctx) ctx->GLThread.enabled = false; ctx->GLApi = ctx->Dispatch.Current; + /* Re-enable thread scheduling in st/mesa when glthread is disabled. */ + if (ctx->pipe->set_context_param && util_thread_scheduler_enabled()) + ctx->st->pin_thread_counter = 0; + /* Update the dispatch only if the dispatch is current. */ if (_glapi_get_dispatch() == ctx->MarshalExec) { _glapi_set_dispatch(ctx->GLApi);