Module: Mesa Branch: staging/23.1 Commit: 228033916a1fe0351da59d7c39976a3e386839b0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=228033916a1fe0351da59d7c39976a3e386839b0
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 b479eb7013b..8e751e404e7 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -8140,7 +8140,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" }, diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c index a0d682a91f8..adf814c95cf 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, @@ -1072,6 +1070,9 @@ nv50_screen_create(struct nouveau_device *dev) goto fail; } + // submit all initial state + PUSH_KICK(screen->base.pushbuf); + return &screen->base; fail:
