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:

committed by
Marge Bot

parent
d155d6b7a3
commit
48ff9fc818
@@ -67,6 +67,7 @@
|
|||||||
#include "drm-uapi/panfrost_drm.h"
|
#include "drm-uapi/panfrost_drm.h"
|
||||||
|
|
||||||
#include "pan_blend.h"
|
#include "pan_blend.h"
|
||||||
|
#include "pan_blitter.h"
|
||||||
#include "pan_desc.h"
|
#include "pan_desc.h"
|
||||||
#include "pan_device.h"
|
#include "pan_device.h"
|
||||||
#include "pan_jc.h"
|
#include "pan_jc.h"
|
||||||
@@ -142,8 +143,11 @@ struct panvk_meta {
|
|||||||
struct {
|
struct {
|
||||||
struct panvk_pool bin_pool;
|
struct panvk_pool bin_pool;
|
||||||
struct panvk_pool desc_pool;
|
struct panvk_pool desc_pool;
|
||||||
|
struct pan_blitter_cache cache;
|
||||||
} blitter;
|
} blitter;
|
||||||
|
|
||||||
|
struct pan_blend_shader_cache blend_shader_cache;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct {
|
struct {
|
||||||
mali_ptr shader;
|
mali_ptr shader;
|
||||||
|
@@ -103,15 +103,15 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct panvk_device *dev = cmdbuf->device;
|
struct panvk_device *dev = cmdbuf->device;
|
||||||
struct panfrost_device *pdev = &cmdbuf->device->pdev;
|
|
||||||
|
|
||||||
list_addtail(&batch->node, &cmdbuf->batches);
|
list_addtail(&batch->node, &cmdbuf->batches);
|
||||||
|
|
||||||
if (batch->jc.first_tiler) {
|
if (batch->jc.first_tiler) {
|
||||||
struct panfrost_ptr preload_jobs[2];
|
struct panfrost_ptr preload_jobs[2];
|
||||||
unsigned num_preload_jobs = GENX(pan_preload_fb)(
|
unsigned num_preload_jobs = GENX(pan_preload_fb)(
|
||||||
&pdev->blitter, &cmdbuf->desc_pool.base, &batch->jc, &cmdbuf->state.fb.info,
|
&dev->meta.blitter.cache, &cmdbuf->desc_pool.base, &batch->jc,
|
||||||
batch->tls.gpu, batch->tiler.descs.gpu, preload_jobs);
|
&cmdbuf->state.fb.info, batch->tls.gpu, batch->tiler.descs.gpu,
|
||||||
|
preload_jobs);
|
||||||
for (unsigned i = 0; i < num_preload_jobs; i++)
|
for (unsigned i = 0; i < num_preload_jobs; i++)
|
||||||
util_dynarray_append(&batch->jobs, void *, preload_jobs[i].cpu);
|
util_dynarray_append(&batch->jobs, void *, preload_jobs[i].cpu);
|
||||||
}
|
}
|
||||||
|
@@ -34,7 +34,7 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf,
|
|||||||
const struct panvk_image *src_img,
|
const struct panvk_image *src_img,
|
||||||
const struct panvk_image *dst_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_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||||
struct pan_blit_context ctx;
|
struct pan_blit_context ctx;
|
||||||
struct pan_image_view views[2] = {
|
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);
|
panvk_per_arch(cmd_close_batch)(cmdbuf);
|
||||||
|
|
||||||
GENX(pan_blit_ctx_init)
|
GENX(pan_blit_ctx_init)
|
||||||
(&pdev->blitter, blitinfo, &cmdbuf->desc_pool.base, &ctx);
|
(&dev->meta.blitter.cache, blitinfo, &cmdbuf->desc_pool.base, &ctx);
|
||||||
do {
|
do {
|
||||||
if (ctx.dst.cur_layer < 0)
|
if (ctx.dst.cur_layer < 0)
|
||||||
continue;
|
continue;
|
||||||
@@ -232,19 +232,19 @@ panvk_per_arch(meta_blit_init)(struct panvk_device *dev)
|
|||||||
false);
|
false);
|
||||||
panvk_pool_init(&dev->meta.blitter.desc_pool, &dev->pdev, NULL, 0, 16 * 1024,
|
panvk_pool_init(&dev->meta.blitter.desc_pool, &dev->pdev, NULL, 0, 16 * 1024,
|
||||||
"panvk_meta blitter descriptor pool", false);
|
"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);
|
dev->physical_device->kmod.props.gpu_prod_id);
|
||||||
GENX(pan_blitter_cache_init)
|
GENX(pan_blitter_cache_init)
|
||||||
(&dev->pdev.blitter, dev->physical_device->kmod.props.gpu_prod_id,
|
(&dev->meta.blitter.cache, dev->physical_device->kmod.props.gpu_prod_id,
|
||||||
&dev->pdev.blend_shaders, &dev->meta.blitter.bin_pool.base,
|
&dev->meta.blend_shader_cache, &dev->meta.blitter.bin_pool.base,
|
||||||
&dev->meta.blitter.desc_pool.base);
|
&dev->meta.blitter.desc_pool.base);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
panvk_per_arch(meta_blit_cleanup)(struct panvk_device *dev)
|
panvk_per_arch(meta_blit_cleanup)(struct panvk_device *dev)
|
||||||
{
|
{
|
||||||
GENX(pan_blitter_cache_cleanup)(&dev->pdev.blitter);
|
GENX(pan_blitter_cache_cleanup)(&dev->meta.blitter.cache);
|
||||||
pan_blend_shader_cache_cleanup(&dev->pdev.blend_shaders);
|
pan_blend_shader_cache_cleanup(&dev->meta.blend_shader_cache);
|
||||||
panvk_pool_cleanup(&dev->meta.blitter.desc_pool);
|
panvk_pool_cleanup(&dev->meta.blitter.desc_pool);
|
||||||
panvk_pool_cleanup(&dev->meta.blitter.bin_pool);
|
panvk_pool_cleanup(&dev->meta.blitter.bin_pool);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user