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

Author: Alyssa Rosenzweig <[email protected]>
Date:   Thu May 13 10:25:24 2021 -0400

panfrost: Pool texture views

No need to stick these in separate BOs.

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

---

 src/gallium/drivers/panfrost/pan_cmdstream.c | 14 +++++++-------
 src/gallium/drivers/panfrost/pan_context.c   |  9 +++++----
 src/gallium/drivers/panfrost/pan_context.h   |  2 +-
 3 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c 
b/src/gallium/drivers/panfrost/pan_cmdstream.c
index 55bec2ba3d3..d85e87b0652 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -657,12 +657,12 @@ panfrost_emit_compute_shader_meta(struct panfrost_batch 
*batch, enum pipe_shader
         struct panfrost_shader_state *ss = 
panfrost_get_shader_state(batch->ctx, stage);
 
         panfrost_batch_add_bo(batch, ss->bin.bo,
-                              PAN_BO_ACCESS_PRIVATE |
+                              PAN_BO_ACCESS_SHARED |
                               PAN_BO_ACCESS_READ |
                               PAN_BO_ACCESS_VERTEX_TILER);
 
         panfrost_batch_add_bo(batch, ss->state.bo,
-                              PAN_BO_ACCESS_PRIVATE |
+                              PAN_BO_ACCESS_SHARED |
                               PAN_BO_ACCESS_READ |
                               PAN_BO_ACCESS_VERTEX_TILER);
 
@@ -677,7 +677,7 @@ panfrost_emit_frag_shader_meta(struct panfrost_batch *batch)
 
         /* Add the shader BO to the batch. */
         panfrost_batch_add_bo(batch, ss->bin.bo,
-                              PAN_BO_ACCESS_PRIVATE |
+                              PAN_BO_ACCESS_SHARED |
                               PAN_BO_ACCESS_READ |
                               PAN_BO_ACCESS_FRAGMENT);
 
@@ -1324,11 +1324,11 @@ panfrost_get_tex_desc(struct panfrost_batch *batch,
                               PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
                               panfrost_bo_access_for_stage(st));
 
-        panfrost_batch_add_bo(batch, view->bo,
+        panfrost_batch_add_bo(batch, view->state.bo,
                               PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_READ |
                               panfrost_bo_access_for_stage(st));
 
-        return view->bo->ptr.gpu;
+        return view->state.gpu;
 }
 
 static void
@@ -1338,7 +1338,7 @@ panfrost_update_sampler_view(struct panfrost_sampler_view 
*view,
         struct panfrost_resource *rsrc = pan_resource(view->base.texture);
         if (view->texture_bo != rsrc->image.data.bo->ptr.gpu ||
             view->modifier != rsrc->image.layout.modifier) {
-                panfrost_bo_unreference(view->bo);
+                panfrost_bo_unreference(view->state.bo);
                 panfrost_create_sampler_view_bo(view, pctx, &rsrc->base);
         }
 }
@@ -1375,7 +1375,7 @@ panfrost_emit_texture_descriptors(struct panfrost_batch 
*batch,
                                               PAN_BO_ACCESS_SHARED | 
PAN_BO_ACCESS_READ |
                                               
panfrost_bo_access_for_stage(stage));
 
-                        panfrost_batch_add_bo(batch, view->bo,
+                        panfrost_batch_add_bo(batch, view->state.bo,
                                               PAN_BO_ACCESS_SHARED | 
PAN_BO_ACCESS_READ |
                                               
panfrost_bo_access_for_stage(stage));
                 }
diff --git a/src/gallium/drivers/panfrost/pan_context.c 
b/src/gallium/drivers/panfrost/pan_context.c
index 233ae6ca918..49378b968e6 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -1190,6 +1190,7 @@ panfrost_create_sampler_view_bo(struct 
panfrost_sampler_view *so,
                                 struct pipe_resource *texture)
 {
         struct panfrost_device *device = pan_device(pctx->screen);
+        struct panfrost_context *ctx = pan_context(pctx);
         struct panfrost_resource *prsrc = (struct panfrost_resource *)texture;
         enum pipe_format format = so->base.format;
         assert(prsrc->image.data.bo);
@@ -1265,11 +1266,11 @@ panfrost_create_sampler_view_bo(struct 
panfrost_sampler_view *so,
                 (pan_is_bifrost(device) ? 0 : MALI_MIDGARD_TEXTURE_LENGTH) +
                 panfrost_estimate_texture_payload_size(device, &iview);
 
-        so->bo = panfrost_bo_create(device, size, 0, "Texture view");
+        struct panfrost_ptr payload = panfrost_pool_alloc_aligned(&ctx->descs, 
size, 64);
+        so->state = pan_take_ref(&ctx->descs, payload.gpu);
 
-        struct panfrost_ptr payload = so->bo->ptr;
         void *tex = pan_is_bifrost(device) ?
-                    &so->bifrost_descriptor : so->bo->ptr.cpu;
+                    &so->bifrost_descriptor : payload.cpu;
 
         if (!pan_is_bifrost(device)) {
                 payload.cpu += MALI_MIDGARD_TEXTURE_LENGTH;
@@ -1338,7 +1339,7 @@ panfrost_sampler_view_destroy(
         struct panfrost_sampler_view *view = (struct panfrost_sampler_view *) 
pview;
 
         pipe_resource_reference(&pview->texture, NULL);
-        panfrost_bo_unreference(view->bo);
+        panfrost_bo_unreference(view->state.bo);
         ralloc_free(view);
 }
 
diff --git a/src/gallium/drivers/panfrost/pan_context.h 
b/src/gallium/drivers/panfrost/pan_context.h
index b8bd701e8e2..70075f737b8 100644
--- a/src/gallium/drivers/panfrost/pan_context.h
+++ b/src/gallium/drivers/panfrost/pan_context.h
@@ -272,7 +272,7 @@ struct panfrost_sampler_state {
 
 struct panfrost_sampler_view {
         struct pipe_sampler_view base;
-        struct panfrost_bo *bo;
+        struct pan_pool_ref state;
         struct mali_bifrost_texture_packed bifrost_descriptor;
         mali_ptr texture_bo;
         uint64_t modifier;

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to