From 48ff9fc8181533fe1a6f5acb436db17a8e7bbb97 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 12 Dec 2023 12:56:43 +0100 Subject: [PATCH] panvk: Instantiate our own blitter/blend_shader caches If we want to get rid of panfrost_device in panvk, we need to instantiate our own blend shader and blitter caches. Signed-off-by: Boris Brezillon Reviewed-by: Constantine Shablya Reviewed-by: Erik Faye-Lund Part-of: --- src/panfrost/vulkan/panvk_private.h | 4 ++++ src/panfrost/vulkan/panvk_vX_cmd_buffer.c | 6 +++--- src/panfrost/vulkan/panvk_vX_meta_blit.c | 14 +++++++------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/panfrost/vulkan/panvk_private.h b/src/panfrost/vulkan/panvk_private.h index bb696188c45..d7fe045ec8e 100644 --- a/src/panfrost/vulkan/panvk_private.h +++ b/src/panfrost/vulkan/panvk_private.h @@ -67,6 +67,7 @@ #include "drm-uapi/panfrost_drm.h" #include "pan_blend.h" +#include "pan_blitter.h" #include "pan_desc.h" #include "pan_device.h" #include "pan_jc.h" @@ -142,8 +143,11 @@ struct panvk_meta { struct { struct panvk_pool bin_pool; struct panvk_pool desc_pool; + struct pan_blitter_cache cache; } blitter; + struct pan_blend_shader_cache blend_shader_cache; + struct { struct { mali_ptr shader; diff --git a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c index d3772ac583a..996142691e9 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c @@ -103,15 +103,15 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf) } struct panvk_device *dev = cmdbuf->device; - struct panfrost_device *pdev = &cmdbuf->device->pdev; list_addtail(&batch->node, &cmdbuf->batches); if (batch->jc.first_tiler) { struct panfrost_ptr preload_jobs[2]; unsigned num_preload_jobs = GENX(pan_preload_fb)( - &pdev->blitter, &cmdbuf->desc_pool.base, &batch->jc, &cmdbuf->state.fb.info, - batch->tls.gpu, batch->tiler.descs.gpu, preload_jobs); + &dev->meta.blitter.cache, &cmdbuf->desc_pool.base, &batch->jc, + &cmdbuf->state.fb.info, batch->tls.gpu, batch->tiler.descs.gpu, + preload_jobs); for (unsigned i = 0; i < num_preload_jobs; i++) util_dynarray_append(&batch->jobs, void *, preload_jobs[i].cpu); } diff --git a/src/panfrost/vulkan/panvk_vX_meta_blit.c b/src/panfrost/vulkan/panvk_vX_meta_blit.c index 6e4e528cb96..30973508616 100644 --- a/src/panfrost/vulkan/panvk_vX_meta_blit.c +++ b/src/panfrost/vulkan/panvk_vX_meta_blit.c @@ -34,7 +34,7 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf, const struct panvk_image *src_img, const struct panvk_image *dst_img) { - struct panfrost_device *pdev = &cmdbuf->device->pdev; + struct panvk_device *dev = cmdbuf->device; struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info; struct pan_blit_context ctx; struct pan_image_view views[2] = { @@ -117,7 +117,7 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf, panvk_per_arch(cmd_close_batch)(cmdbuf); GENX(pan_blit_ctx_init) - (&pdev->blitter, blitinfo, &cmdbuf->desc_pool.base, &ctx); + (&dev->meta.blitter.cache, blitinfo, &cmdbuf->desc_pool.base, &ctx); do { if (ctx.dst.cur_layer < 0) continue; @@ -232,19 +232,19 @@ panvk_per_arch(meta_blit_init)(struct panvk_device *dev) false); panvk_pool_init(&dev->meta.blitter.desc_pool, &dev->pdev, NULL, 0, 16 * 1024, "panvk_meta blitter descriptor pool", false); - pan_blend_shader_cache_init(&dev->pdev.blend_shaders, + pan_blend_shader_cache_init(&dev->meta.blend_shader_cache, dev->physical_device->kmod.props.gpu_prod_id); GENX(pan_blitter_cache_init) - (&dev->pdev.blitter, dev->physical_device->kmod.props.gpu_prod_id, - &dev->pdev.blend_shaders, &dev->meta.blitter.bin_pool.base, + (&dev->meta.blitter.cache, dev->physical_device->kmod.props.gpu_prod_id, + &dev->meta.blend_shader_cache, &dev->meta.blitter.bin_pool.base, &dev->meta.blitter.desc_pool.base); } void panvk_per_arch(meta_blit_cleanup)(struct panvk_device *dev) { - GENX(pan_blitter_cache_cleanup)(&dev->pdev.blitter); - pan_blend_shader_cache_cleanup(&dev->pdev.blend_shaders); + GENX(pan_blitter_cache_cleanup)(&dev->meta.blitter.cache); + pan_blend_shader_cache_cleanup(&dev->meta.blend_shader_cache); panvk_pool_cleanup(&dev->meta.blitter.desc_pool); panvk_pool_cleanup(&dev->meta.blitter.bin_pool); }