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
