From 9ff7971b16b1c6283128246628e1f9d1fe7e2c8d Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 19 Dec 2023 15:42:50 +0100 Subject: [PATCH] panvk: Make panvk_image_view per-gen This way we can use mali_xxx_packed structs for the descriptor templates. Signed-off-by: Boris Brezillon Acked-by: Erik Faye-Lund Reviewed-by: Mary Guillemard Reviewed-by: Rebecca Mckeever Part-of: --- src/panfrost/vulkan/panvk_image_view.h | 14 +++++++++----- src/panfrost/vulkan/panvk_vX_descriptor_set.c | 2 +- src/panfrost/vulkan/panvk_vX_image_view.c | 11 ++++------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/panfrost/vulkan/panvk_image_view.h b/src/panfrost/vulkan/panvk_image_view.h index 0927694a04c..25b5d6a0874 100644 --- a/src/panfrost/vulkan/panvk_image_view.h +++ b/src/panfrost/vulkan/panvk_image_view.h @@ -6,16 +6,19 @@ #ifndef PANVK_IMAGE_VIEW_H #define PANVK_IMAGE_VIEW_H +#ifndef PAN_ARCH +#error "PAN_ARCH must be defined" +#endif + #include #include "vk_image.h" #include "pan_texture.h" -struct panvk_priv_bo; +#include "genxml/gen_macros.h" -#define TEXTURE_DESC_WORDS 8 -#define ATTRIB_BUF_DESC_WORDS 4 +struct panvk_priv_bo; struct panvk_image_view { struct vk_image_view vk; @@ -23,9 +26,10 @@ struct panvk_image_view { struct pan_image_view pview; struct panvk_priv_bo *bo; + struct { - uint32_t tex[TEXTURE_DESC_WORDS]; - uint32_t img_attrib_buf[ATTRIB_BUF_DESC_WORDS * 2]; + struct mali_texture_packed tex; + struct mali_attribute_buffer_packed img_attrib_buf[2]; } descs; }; diff --git a/src/panfrost/vulkan/panvk_vX_descriptor_set.c b/src/panfrost/vulkan/panvk_vX_descriptor_set.c index 1d3ec404e55..8135e22ac4f 100644 --- a/src/panfrost/vulkan/panvk_vX_descriptor_set.c +++ b/src/panfrost/vulkan/panvk_vX_descriptor_set.c @@ -296,7 +296,7 @@ panvk_write_tex_desc(struct panvk_descriptor_set *set, uint32_t binding, { VK_FROM_HANDLE(panvk_image_view, view, pImageInfo->imageView); - memcpy(panvk_tex_desc(set, binding, elem), view->descs.tex, + memcpy(panvk_tex_desc(set, binding, elem), view->descs.tex.opaque, pan_size(TEXTURE)); panvk_fill_image_desc(panvk_desc_ubo_data(set, binding, elem), view); diff --git a/src/panfrost/vulkan/panvk_vX_image_view.c b/src/panfrost/vulkan/panvk_vX_image_view.c index b8bc4999cbf..c7ade3ca4ec 100644 --- a/src/panfrost/vulkan/panvk_vX_image_view.c +++ b/src/panfrost/vulkan/panvk_vX_image_view.c @@ -105,18 +105,15 @@ panvk_per_arch(CreateImageView)(VkDevice _device, view->bo = panvk_priv_bo_create(device, bo_size, 0, pAllocator, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - STATIC_ASSERT(sizeof(view->descs.tex) >= pan_size(TEXTURE)); - struct panfrost_ptr ptr = { .gpu = view->bo->addr.dev, .cpu = view->bo->addr.host, }; - GENX(panfrost_new_texture)(&view->pview, &view->descs.tex, &ptr); + GENX(panfrost_new_texture)(&view->pview, view->descs.tex.opaque, &ptr); } if (view->vk.usage & VK_IMAGE_USAGE_STORAGE_BIT) { - uint8_t *attrib_buf = (uint8_t *)view->descs.img_attrib_buf; bool is_3d = image->pimage.layout.dim == MALI_TEXTURE_DIMENSION_3D; unsigned offset = image->pimage.data.offset; offset += @@ -124,7 +121,7 @@ panvk_per_arch(CreateImageView)(VkDevice _device, is_3d ? 0 : view->pview.first_layer, is_3d ? view->pview.first_layer : 0); - pan_pack(attrib_buf, ATTRIBUTE_BUFFER, cfg) { + pan_pack(view->descs.img_attrib_buf[0].opaque, ATTRIBUTE_BUFFER, cfg) { cfg.type = image->pimage.layout.modifier == DRM_FORMAT_MOD_LINEAR ? MALI_ATTRIBUTE_TYPE_3D_LINEAR : MALI_ATTRIBUTE_TYPE_3D_INTERLEAVED; @@ -133,8 +130,8 @@ panvk_per_arch(CreateImageView)(VkDevice _device, cfg.size = pan_kmod_bo_size(image->bo) - offset; } - attrib_buf += pan_size(ATTRIBUTE_BUFFER); - pan_pack(attrib_buf, ATTRIBUTE_BUFFER_CONTINUATION_3D, cfg) { + pan_pack(view->descs.img_attrib_buf[1].opaque, + ATTRIBUTE_BUFFER_CONTINUATION_3D, cfg) { unsigned level = view->pview.first_level; cfg.s_dimension = u_minify(image->pimage.layout.width, level);