n50/compute: submit initial compute state in nv50_screen_create
authorKarol Herbst <git@karolherbst.de>
Fri, 4 Aug 2023 14:56:23 +0000 (16:56 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 15:31:24 +0000 (15:31 +0000)
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 <git@karolherbst.de>
Reviewed-by: M Henning <drawoc@darkrefraction.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24496>

src/gallium/drivers/nouveau/nv50/nv50_screen.c

index 5cdac58..5b38bda 100644 (file)
@@ -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: