panvk: Stop passing panfrost_device around in internal meta helpers

We're better off passing the panvk_physical_device device directly,
as it contains both the meta cache and the panfrost_device object.

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:09:23 +01:00 committed by Marge Bot
parent e028b6dbe7
commit 2e65d7347e
2 changed files with 38 additions and 33 deletions

View file

@ -32,11 +32,13 @@
#include "vk_format.h" #include "vk_format.h"
static mali_ptr static mali_ptr
panvk_meta_clear_color_attachment_shader(struct panfrost_device *pdev, panvk_meta_clear_color_attachment_shader(struct panvk_physical_device *dev,
struct pan_pool *bin_pool,
enum glsl_base_type base_type, enum glsl_base_type base_type,
struct pan_shader_info *shader_info) struct pan_shader_info *shader_info)
{ {
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
struct panfrost_device *pdev = &dev->pdev;
nir_builder b = nir_builder_init_simple_shader( nir_builder b = nir_builder_init_simple_shader(
MESA_SHADER_FRAGMENT, GENX(pan_shader_get_compiler_options)(), MESA_SHADER_FRAGMENT, GENX(pan_shader_get_compiler_options)(),
"panvk_meta_clear_attachment(base_type=%d)", base_type); "panvk_meta_clear_attachment(base_type=%d)", base_type);
@ -493,17 +495,17 @@ panvk_meta_clear_attachment_init(struct panvk_physical_device *dev)
{ {
dev->meta.clear_attachment.color[GLSL_TYPE_UINT].shader = dev->meta.clear_attachment.color[GLSL_TYPE_UINT].shader =
panvk_meta_clear_color_attachment_shader( panvk_meta_clear_color_attachment_shader(
&dev->pdev, &dev->meta.bin_pool.base, GLSL_TYPE_UINT, dev, GLSL_TYPE_UINT,
&dev->meta.clear_attachment.color[GLSL_TYPE_UINT].shader_info); &dev->meta.clear_attachment.color[GLSL_TYPE_UINT].shader_info);
dev->meta.clear_attachment.color[GLSL_TYPE_INT].shader = dev->meta.clear_attachment.color[GLSL_TYPE_INT].shader =
panvk_meta_clear_color_attachment_shader( panvk_meta_clear_color_attachment_shader(
&dev->pdev, &dev->meta.bin_pool.base, GLSL_TYPE_INT, dev, GLSL_TYPE_INT,
&dev->meta.clear_attachment.color[GLSL_TYPE_INT].shader_info); &dev->meta.clear_attachment.color[GLSL_TYPE_INT].shader_info);
dev->meta.clear_attachment.color[GLSL_TYPE_FLOAT].shader = dev->meta.clear_attachment.color[GLSL_TYPE_FLOAT].shader =
panvk_meta_clear_color_attachment_shader( panvk_meta_clear_color_attachment_shader(
&dev->pdev, &dev->meta.bin_pool.base, GLSL_TYPE_FLOAT, dev, GLSL_TYPE_FLOAT,
&dev->meta.clear_attachment.color[GLSL_TYPE_FLOAT].shader_info); &dev->meta.clear_attachment.color[GLSL_TYPE_FLOAT].shader_info);
} }

View file

@ -282,13 +282,15 @@ panvk_meta_copy_to_buf_emit_rsd(struct pan_pool *desc_pool, mali_ptr shader,
} }
static mali_ptr static mali_ptr
panvk_meta_copy_img2img_shader(struct panfrost_device *pdev, panvk_meta_copy_img2img_shader(struct panvk_physical_device *dev,
struct pan_pool *bin_pool,
enum pipe_format srcfmt, enum pipe_format dstfmt, enum pipe_format srcfmt, enum pipe_format dstfmt,
unsigned dstmask, unsigned texdim, unsigned dstmask, unsigned texdim,
bool texisarray, bool is_ms, bool texisarray, bool is_ms,
struct pan_shader_info *shader_info) struct pan_shader_info *shader_info)
{ {
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
struct panfrost_device *pdev = &dev->pdev;
nir_builder b = nir_builder_init_simple_shader( nir_builder b = nir_builder_init_simple_shader(
MESA_SHADER_FRAGMENT, GENX(pan_shader_get_compiler_options)(), MESA_SHADER_FRAGMENT, GENX(pan_shader_get_compiler_options)(),
"panvk_meta_copy_img2img(srcfmt=%s,dstfmt=%s,%dD%s%s)", "panvk_meta_copy_img2img(srcfmt=%s,dstfmt=%s,%dD%s%s)",
@ -705,8 +707,7 @@ panvk_meta_copy_img2img_init(struct panvk_physical_device *dev, bool is_ms)
struct pan_shader_info shader_info; struct pan_shader_info shader_info;
mali_ptr shader = panvk_meta_copy_img2img_shader( mali_ptr shader = panvk_meta_copy_img2img_shader(
&dev->pdev, &dev->meta.bin_pool.base, dev, panvk_meta_copy_img2img_fmts[i].srcfmt,
panvk_meta_copy_img2img_fmts[i].srcfmt,
panvk_meta_copy_img2img_fmts[i].dstfmt, panvk_meta_copy_img2img_fmts[i].dstfmt,
panvk_meta_copy_img2img_fmts[i].dstmask, texdim, false, is_ms, panvk_meta_copy_img2img_fmts[i].dstmask, texdim, false, is_ms,
&shader_info); &shader_info);
@ -722,8 +723,7 @@ panvk_meta_copy_img2img_init(struct panvk_physical_device *dev, bool is_ms)
texdimidx = panvk_meta_copy_tex_type(texdim, true); texdimidx = panvk_meta_copy_tex_type(texdim, true);
assert(texdimidx < ARRAY_SIZE(dev->meta.copy.img2img[0])); assert(texdimidx < ARRAY_SIZE(dev->meta.copy.img2img[0]));
shader = panvk_meta_copy_img2img_shader( shader = panvk_meta_copy_img2img_shader(
&dev->pdev, &dev->meta.bin_pool.base, dev, panvk_meta_copy_img2img_fmts[i].srcfmt,
panvk_meta_copy_img2img_fmts[i].srcfmt,
panvk_meta_copy_img2img_fmts[i].dstfmt, panvk_meta_copy_img2img_fmts[i].dstfmt,
panvk_meta_copy_img2img_fmts[i].dstmask, texdim, true, is_ms, panvk_meta_copy_img2img_fmts[i].dstmask, texdim, true, is_ms,
&shader_info); &shader_info);
@ -848,11 +848,13 @@ struct panvk_meta_copy_buf2img_info {
.range = ~0) .range = ~0)
static mali_ptr static mali_ptr
panvk_meta_copy_buf2img_shader(struct panfrost_device *pdev, panvk_meta_copy_buf2img_shader(struct panvk_physical_device *dev,
struct pan_pool *bin_pool,
struct panvk_meta_copy_format_info key, struct panvk_meta_copy_format_info key,
struct pan_shader_info *shader_info) struct pan_shader_info *shader_info)
{ {
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
struct panfrost_device *pdev = &dev->pdev;
nir_builder b = nir_builder_init_simple_shader( nir_builder b = nir_builder_init_simple_shader(
MESA_SHADER_FRAGMENT, GENX(pan_shader_get_compiler_options)(), MESA_SHADER_FRAGMENT, GENX(pan_shader_get_compiler_options)(),
"panvk_meta_copy_buf2img(imgfmt=%s,mask=%x)", "panvk_meta_copy_buf2img(imgfmt=%s,mask=%x)",
@ -1134,8 +1136,7 @@ panvk_meta_copy_buf2img_init(struct panvk_physical_device *dev)
for (unsigned i = 0; i < ARRAY_SIZE(panvk_meta_copy_buf2img_fmts); i++) { for (unsigned i = 0; i < ARRAY_SIZE(panvk_meta_copy_buf2img_fmts); i++) {
struct pan_shader_info shader_info; struct pan_shader_info shader_info;
mali_ptr shader = panvk_meta_copy_buf2img_shader( mali_ptr shader = panvk_meta_copy_buf2img_shader(
&dev->pdev, &dev->meta.bin_pool.base, panvk_meta_copy_buf2img_fmts[i], dev, panvk_meta_copy_buf2img_fmts[i], &shader_info);
&shader_info);
dev->meta.copy.buf2img[i].rsd = panvk_meta_copy_to_img_emit_rsd( dev->meta.copy.buf2img[i].rsd = panvk_meta_copy_to_img_emit_rsd(
&dev->meta.desc_pool.base, shader, &shader_info, &dev->meta.desc_pool.base, shader, &shader_info,
panvk_meta_copy_buf2img_fmts[i].imgfmt, panvk_meta_copy_buf2img_fmts[i].imgfmt,
@ -1235,14 +1236,15 @@ struct panvk_meta_copy_img2buf_info {
.range = ~0) .range = ~0)
static mali_ptr static mali_ptr
panvk_meta_copy_img2buf_shader(struct panfrost_device *pdev, panvk_meta_copy_img2buf_shader(struct panvk_physical_device *dev,
struct pan_pool *bin_pool,
struct panvk_meta_copy_format_info key, struct panvk_meta_copy_format_info key,
unsigned texdim, unsigned texisarray, unsigned texdim, unsigned texisarray,
struct pan_shader_info *shader_info) struct pan_shader_info *shader_info)
{ {
unsigned imgtexelsz = util_format_get_blocksize(key.imgfmt); unsigned imgtexelsz = util_format_get_blocksize(key.imgfmt);
unsigned buftexelsz = panvk_meta_copy_buf_texelsize(key.imgfmt, key.mask); unsigned buftexelsz = panvk_meta_copy_buf_texelsize(key.imgfmt, key.mask);
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
struct panfrost_device *pdev = &dev->pdev;
/* FIXME: Won't work on compute queues, but we can't do that with /* FIXME: Won't work on compute queues, but we can't do that with
* a compute shader if the destination is an AFBC surface. * a compute shader if the destination is an AFBC surface.
@ -1565,8 +1567,7 @@ panvk_meta_copy_img2buf_init(struct panvk_physical_device *dev)
struct pan_shader_info shader_info; struct pan_shader_info shader_info;
mali_ptr shader = panvk_meta_copy_img2buf_shader( mali_ptr shader = panvk_meta_copy_img2buf_shader(
&dev->pdev, &dev->meta.bin_pool.base, dev, panvk_meta_copy_img2buf_fmts[i], texdim, false, &shader_info);
panvk_meta_copy_img2buf_fmts[i], texdim, false, &shader_info);
dev->meta.copy.img2buf[texdimidx][i].rsd = dev->meta.copy.img2buf[texdimidx][i].rsd =
panvk_meta_copy_to_buf_emit_rsd(&dev->meta.desc_pool.base, shader, panvk_meta_copy_to_buf_emit_rsd(&dev->meta.desc_pool.base, shader,
&shader_info, true); &shader_info, true);
@ -1578,8 +1579,7 @@ panvk_meta_copy_img2buf_init(struct panvk_physical_device *dev)
texdimidx = panvk_meta_copy_tex_type(texdim, true); texdimidx = panvk_meta_copy_tex_type(texdim, true);
assert(texdimidx < ARRAY_SIZE(dev->meta.copy.img2buf)); assert(texdimidx < ARRAY_SIZE(dev->meta.copy.img2buf));
shader = panvk_meta_copy_img2buf_shader( shader = panvk_meta_copy_img2buf_shader(
&dev->pdev, &dev->meta.bin_pool.base, dev, panvk_meta_copy_img2buf_fmts[i], texdim, true, &shader_info);
panvk_meta_copy_img2buf_fmts[i], texdim, true, &shader_info);
dev->meta.copy.img2buf[texdimidx][i].rsd = dev->meta.copy.img2buf[texdimidx][i].rsd =
panvk_meta_copy_to_buf_emit_rsd(&dev->meta.desc_pool.base, shader, panvk_meta_copy_to_buf_emit_rsd(&dev->meta.desc_pool.base, shader,
&shader_info, true); &shader_info, true);
@ -1615,10 +1615,13 @@ struct panvk_meta_copy_buf2buf_info {
.range = ~0) .range = ~0)
static mali_ptr static mali_ptr
panvk_meta_copy_buf2buf_shader(struct panfrost_device *pdev, panvk_meta_copy_buf2buf_shader(struct panvk_physical_device *dev,
struct pan_pool *bin_pool, unsigned blksz, unsigned blksz,
struct pan_shader_info *shader_info) struct pan_shader_info *shader_info)
{ {
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
struct panfrost_device *pdev = &dev->pdev;
/* FIXME: Won't work on compute queues, but we can't do that with /* FIXME: Won't work on compute queues, but we can't do that with
* a compute shader if the destination is an AFBC surface. * a compute shader if the destination is an AFBC surface.
*/ */
@ -1670,8 +1673,8 @@ panvk_meta_copy_buf2buf_init(struct panvk_physical_device *dev)
{ {
for (unsigned i = 0; i < ARRAY_SIZE(dev->meta.copy.buf2buf); i++) { for (unsigned i = 0; i < ARRAY_SIZE(dev->meta.copy.buf2buf); i++) {
struct pan_shader_info shader_info; struct pan_shader_info shader_info;
mali_ptr shader = panvk_meta_copy_buf2buf_shader( mali_ptr shader =
&dev->pdev, &dev->meta.bin_pool.base, 1 << i, &shader_info); panvk_meta_copy_buf2buf_shader(dev, 1 << i, &shader_info);
dev->meta.copy.buf2buf[i].rsd = panvk_meta_copy_to_buf_emit_rsd( dev->meta.copy.buf2buf[i].rsd = panvk_meta_copy_to_buf_emit_rsd(
&dev->meta.desc_pool.base, shader, &shader_info, false); &dev->meta.desc_pool.base, shader, &shader_info, false);
} }
@ -1746,10 +1749,12 @@ struct panvk_meta_fill_buf_info {
.base = offsetof(struct panvk_meta_fill_buf_info, field), .range = ~0) .base = offsetof(struct panvk_meta_fill_buf_info, field), .range = ~0)
static mali_ptr static mali_ptr
panvk_meta_fill_buf_shader(struct panfrost_device *pdev, panvk_meta_fill_buf_shader(struct panvk_physical_device *dev,
struct pan_pool *bin_pool,
struct pan_shader_info *shader_info) struct pan_shader_info *shader_info)
{ {
struct pan_pool *bin_pool = &dev->meta.bin_pool.base;
struct panfrost_device *pdev = &dev->pdev;
/* FIXME: Won't work on compute queues, but we can't do that with /* FIXME: Won't work on compute queues, but we can't do that with
* a compute shader if the destination is an AFBC surface. * a compute shader if the destination is an AFBC surface.
*/ */
@ -1792,13 +1797,12 @@ panvk_meta_fill_buf_shader(struct panfrost_device *pdev,
} }
static mali_ptr static mali_ptr
panvk_meta_fill_buf_emit_rsd(struct panfrost_device *pdev, panvk_meta_fill_buf_emit_rsd(struct panvk_physical_device *dev)
struct pan_pool *bin_pool,
struct pan_pool *desc_pool)
{ {
struct pan_pool *desc_pool = &dev->meta.desc_pool.base;
struct pan_shader_info shader_info; struct pan_shader_info shader_info;
mali_ptr shader = panvk_meta_fill_buf_shader(pdev, bin_pool, &shader_info); mali_ptr shader = panvk_meta_fill_buf_shader(dev, &shader_info);
struct panfrost_ptr rsd_ptr = struct panfrost_ptr rsd_ptr =
pan_pool_alloc_desc_aggregate(desc_pool, PAN_DESC(RENDERER_STATE)); pan_pool_alloc_desc_aggregate(desc_pool, PAN_DESC(RENDERER_STATE));
@ -1813,8 +1817,7 @@ panvk_meta_fill_buf_emit_rsd(struct panfrost_device *pdev,
static void static void
panvk_meta_fill_buf_init(struct panvk_physical_device *dev) panvk_meta_fill_buf_init(struct panvk_physical_device *dev)
{ {
dev->meta.copy.fillbuf.rsd = panvk_meta_fill_buf_emit_rsd( dev->meta.copy.fillbuf.rsd = panvk_meta_fill_buf_emit_rsd(dev);
&dev->pdev, &dev->meta.bin_pool.base, &dev->meta.desc_pool.base);
} }
static void static void