Mesa (master): llvmpipe: wrap late screen init with a mutex.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Apr 20 02:22:14 UTC 2021


Module: Mesa
Branch: master
Commit: 3172289d8b1bec597dfce600dac2fe8a0f0819b9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3172289d8b1bec597dfce600dac2fe8a0f0819b9

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Apr 20 11:30:46 2021 +1000

llvmpipe: wrap late screen init with a mutex.

Next step can just move this into context init

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10338>

---

 src/gallium/drivers/llvmpipe/lp_screen.c | 18 +++++++++++++++---
 src/gallium/drivers/llvmpipe/lp_screen.h |  3 +++
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
index 3fee18fd570..3c1d3ce5690 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -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);
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.h b/src/gallium/drivers/llvmpipe/lp_screen.h
index a790c199cd9..ca29e03a958 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.h
+++ b/src/gallium/drivers/llvmpipe/lp_screen.h
@@ -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;



More information about the mesa-commit mailing list