radeonsi: add helper to use si_screen::aux_context

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>
(cherry picked from commit bda1c081bd)
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2022-06-14 16:35:49 +02:00 committed by Dylan Baker
parent 9f199d0e02
commit ebda38196a
3 changed files with 16 additions and 1 deletions

View file

@ -526,7 +526,7 @@
"description": "radeonsi: add helper to use si_screen::aux_context",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View file

@ -1433,3 +1433,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);
}

View file

@ -1504,6 +1504,8 @@ void si_init_compute_functions(struct si_context *sctx);
/* si_pipe.c */
void 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);