radeonsi: add helper to use si_screen::aux_context
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tue, 14 Jun 2022 14:35:49 +0000 (16:35 +0200)
committerMarge Bot <emma+marge@anholt.net>
Wed, 15 Jun 2022 10:38:03 +0000 (10:38 +0000)
This context needs to be locked before usage, and flushed after.
If it's forgotten, radeonsi may crash (eg #6666).

To avoid this kind of error, introduce 2 helpers.

cc: mesa-stable

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17032>

src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_pipe.h

index 98d93af..08a4482 100644 (file)
@@ -1469,3 +1469,16 @@ struct pipe_screen *radeonsi_screen_create(int fd, const struct pipe_screen_conf
    drmFreeVersion(version);
    return rw ? rw->screen : NULL;
 }
+
+struct si_context* si_get_aux_context(struct si_screen *sscreen)
+{
+   simple_mtx_lock(&sscreen->aux_context_lock);
+   return (struct si_context*)sscreen->aux_context;
+}
+
+void si_put_aux_context_flush(struct si_screen *sscreen)
+{
+   struct pipe_context *c = &((struct si_context*)sscreen->aux_context)->b;
+   c->flush(c, NULL, 0);
+   simple_mtx_unlock(&sscreen->aux_context_lock);
+}
index 092f1f7..315a179 100644 (file)
@@ -1526,6 +1526,8 @@ void si_init_compute_functions(struct si_context *sctx);
 /* si_pipe.c */
 bool si_init_compiler(struct si_screen *sscreen, struct ac_llvm_compiler *compiler);
 void si_init_aux_async_compute_ctx(struct si_screen *sscreen);
+struct si_context* si_get_aux_context(struct si_screen *sscreen);
+void si_put_aux_context_flush(struct si_screen *sscreen);
 
 /* si_perfcounters.c */
 void si_init_perfcounters(struct si_screen *screen);