llvmpipe: wrap late screen init with a mutex.

Next step can just move this into context init

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10338>
This commit is contained in:
Dave Airlie 2021-04-20 11:30:46 +10:00
parent c93e95156a
commit 3172289d8b
2 changed files with 18 additions and 3 deletions

View file

@ -878,19 +878,30 @@ void lp_disk_cache_insert_shader(struct llvmpipe_screen *screen,
static bool
llvmpipe_screen_late_init(struct llvmpipe_screen *screen)
{
bool ret = true;
mtx_lock(&screen->late_mutex);
if (screen->late_init_done)
goto out;
screen->rast = lp_rast_create(screen->num_threads);
if (!screen->rast) {
return false;
ret = false;
goto out;
}
screen->cs_tpool = lp_cs_tpool_create(screen->num_threads);
if (!screen->cs_tpool) {
lp_rast_destroy(screen->rast);
return false;
ret = false;
goto out;
}
lp_disk_cache_create(screen);
return true;
screen->late_init_done = true;
out:
mtx_unlock(&screen->late_mutex);
return ret;
}
/**
@ -959,6 +970,7 @@ llvmpipe_create_screen(struct sw_winsys *winsys)
(void) mtx_init(&screen->cs_mutex, mtx_plain);
(void) mtx_init(&screen->rast_mutex, mtx_plain);
(void) mtx_init(&screen->late_mutex, mtx_plain);
if (!llvmpipe_screen_late_init(screen)) {
lp_jit_screen_cleanup(screen);
FREE(screen);

View file

@ -64,6 +64,9 @@ struct llvmpipe_screen
bool use_tgsi;
bool allow_cl;
mtx_t late_mutex;
bool late_init_done;
struct disk_cache *disk_shader_cache;
unsigned num_disk_shader_cache_hits;
unsigned num_disk_shader_cache_misses;