glthread: leave dlist dispatch in place for Begin/End

If Begin/End are called from a display list make sure to leave
the dlist.c's dispatch table in place just like the non-glthread
code does.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7335
Fixes: 7f1cac7ba682 ("mesa/glthread: enable immediate mode")

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19088>
(cherry picked from commit 7dcdd519385aaa4fddfa1368fbbbc89c408befe3)
This commit is contained in:
Timothy Arceri 2022-10-15 21:33:14 +11:00 committed by Dylan Baker
parent 1a52e9be02
commit 18a57663d3
2 changed files with 7 additions and 3 deletions

View File

@ -94,7 +94,7 @@
"description": "glthread: leave dlist dispatch in place for Begin/End",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "7f1cac7ba682410214289084dcc272167ca44e6b"
},

View File

@ -855,7 +855,8 @@ _mesa_Begin(GLenum mode)
* leave dlist.c's dispatch table in place.
*/
if (ctx->GLThread.enabled) {
ctx->CurrentServerDispatch = ctx->Exec;
if (ctx->CurrentServerDispatch == ctx->OutsideBeginEnd)
ctx->CurrentServerDispatch = ctx->Exec;
} else if (ctx->CurrentClientDispatch == ctx->OutsideBeginEnd) {
ctx->CurrentClientDispatch = ctx->CurrentServerDispatch = ctx->Exec;
_glapi_set_dispatch(ctx->CurrentClientDispatch);
@ -914,7 +915,10 @@ _mesa_End(void)
ctx->Exec = ctx->OutsideBeginEnd;
if (ctx->GLThread.enabled) {
ctx->CurrentServerDispatch = ctx->Exec;
if (ctx->CurrentServerDispatch == ctx->BeginEnd ||
ctx->CurrentServerDispatch == ctx->HWSelectModeBeginEnd) {
ctx->CurrentServerDispatch = ctx->Exec;
}
} else if (ctx->CurrentClientDispatch == ctx->BeginEnd ||
ctx->CurrentClientDispatch == ctx->HWSelectModeBeginEnd) {
ctx->CurrentClientDispatch = ctx->CurrentServerDispatch = ctx->Exec;