Module: Mesa Branch: staging/23.2 Commit: 8c67f078426ed87868c0f146038f2a728a471c60 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c67f078426ed87868c0f146038f2a728a471c60
Author: Karol Herbst <[email protected]> Date: Fri Aug 4 16:56:23 2023 +0200 n50/compute: submit initial compute state in nv50_screen_create This fixes some CACHE_ERROR caused by proper multi-threading support. The bug is a bit older though, just never triggered because there was only one push buffer to begin with. Without this change the compute initialization stayed unpushed in the screen push buffer causing random issues. Fixes: ff72440b402 ("nv50: implement a basic compute support") Signed-off-by: Karol Herbst <[email protected]> Reviewed-by: M Henning <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24496> (cherry picked from commit a9a30a7e09c4107c1f81a2515c0eb6a4c0daec97) --- .pick_status.json | 2 +- src/gallium/drivers/nouveau/nv50/nv50_screen.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index b765f296d91..8e6193afee0 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -19464,7 +19464,7 @@ "description": "n50/compute: submit initial compute state in nv50_screen_create", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "ff72440b40211326eda118232fabd53965410afd", "notes": null diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c index 5cdac587320..5b38bdab9a9 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c @@ -787,8 +787,6 @@ nv50_screen_init_hwctx(struct nv50_screen *screen) PUSH_DATA (push, 1); BEGIN_NV04(push, NV50_3D(UNK19C0), 1); PUSH_DATA (push, 1); - - PUSH_KICK (push); } static int nv50_tls_alloc(struct nv50_screen *screen, unsigned tls_space, @@ -1071,6 +1069,9 @@ nv50_screen_create(struct nouveau_device *dev) goto fail; } + // submit all initial state + PUSH_KICK(screen->base.pushbuf); + return &screen->base; fail:
