Module: Mesa
Branch: main
Commit: 98bdc4a5ff57612fd9680914b215c23d0fad7db4
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=98bdc4a5ff57612fd9680914b215c23d0fad7db4

Author: Alyssa Rosenzweig <[email protected]>
Date:   Tue May  3 16:18:59 2022 -0400

panfrost: Use emit_tls

Instead of rolling our own, so it can pick up a Valhall fix.

Signed-off-by: Alyssa Rosenzweig <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16314>

---

 src/gallium/drivers/panfrost/pan_cmdstream.c | 58 +++++++++++++---------------
 1 file changed, 26 insertions(+), 32 deletions(-)

diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c 
b/src/gallium/drivers/panfrost/pan_cmdstream.c
index bb0e0c460d7..358523c2189 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -1497,7 +1497,7 @@ panfrost_emit_const_buf(struct panfrost_batch *batch,
 
 static mali_ptr
 panfrost_emit_shared_memory(struct panfrost_batch *batch,
-                            const struct pipe_grid_info *info)
+                            const struct pipe_grid_info *grid)
 {
         struct panfrost_context *ctx = batch->ctx;
         struct panfrost_device *dev = pan_device(ctx->base.screen);
@@ -1506,42 +1506,36 @@ panfrost_emit_shared_memory(struct panfrost_batch 
*batch,
         struct panfrost_ptr t =
                 pan_pool_alloc_desc(&batch->pool.base, LOCAL_STORAGE);
 
-        pan_pack(t.cpu, LOCAL_STORAGE, ls) {
-                unsigned wls_single_size =
-                        util_next_power_of_two(MAX2(ss->info.wls_size, 128));
+        struct pan_tls_info info = {
+                .tls.size = ss->info.tls_size,
+                .wls.size = ss->info.wls_size,
+                .wls.dim.x = grid->grid[0],
+                .wls.dim.y = grid->grid[1],
+                .wls.dim.z = grid->grid[2],
+        };
 
-                if (ss->info.wls_size) {
-                        ls.wls_instances =
-                                util_next_power_of_two(info->grid[0]) *
-                                util_next_power_of_two(info->grid[1]) *
-                                util_next_power_of_two(info->grid[2]);
+        if (ss->info.tls_size) {
+                struct panfrost_bo *bo =
+                        panfrost_batch_get_scratchpad(batch,
+                                                      ss->info.tls_size,
+                                                      dev->thread_tls_alloc,
+                                                      dev->core_count);
+                info.tls.ptr = bo->ptr.gpu;
+        }
 
-                        ls.wls_size_scale = util_logbase2(wls_single_size) + 1;
+        if (ss->info.wls_size) {
+                unsigned size =
+                        pan_wls_adjust_size(info.wls.size) *
+                        pan_wls_instances(&info.wls.dim) *
+                        dev->core_count;
 
-                        unsigned wls_size = wls_single_size * ls.wls_instances 
* dev->core_count;
+                struct panfrost_bo *bo =
+                        panfrost_batch_get_shared_memory(batch, size, 1);
 
-                        ls.wls_base_pointer =
-                                (panfrost_batch_get_shared_memory(batch,
-                                                                  wls_size,
-                                                                  1))->ptr.gpu;
-                } else {
-                        ls.wls_instances = MALI_LOCAL_STORAGE_NO_WORKGROUP_MEM;
-                }
-
-                if (ss->info.tls_size) {
-                        unsigned shift =
-                                panfrost_get_stack_shift(ss->info.tls_size);
-                        struct panfrost_bo *bo =
-                                panfrost_batch_get_scratchpad(batch,
-                                                              
ss->info.tls_size,
-                                                              
dev->thread_tls_alloc,
-                                                              dev->core_count);
-
-                        ls.tls_size = shift;
-                        ls.tls_base_pointer = bo->ptr.gpu;
-                }
-        };
+                info.wls.ptr = bo->ptr.gpu;
+        }
 
+        GENX(pan_emit_tls)(&info, t.cpu);
         return t.gpu;
 }
 

Reply via email to