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 <boris.brezillon@collabora.com>
Reviewed-by: Constantine Shablya <constantine.shablya@collabora.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26698>
This commit is contained in:
Boris Brezillon
2023-12-12 12:56:43 +01:00
committed by Marge Bot
parent d155d6b7a3
commit 48ff9fc818
3 changed files with 14 additions and 10 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);
}