From 4aeb7aa22fde04bf288af9570d2da3d7a62d7a9e Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Wed, 13 Dec 2023 10:43:59 +0100 Subject: [PATCH] panvk: Make panvk_buffer_view per-gen Use auto-generated mali_xx_packed structs for the descriptors and make sure panvk_buffer_view.h is never included from a non per-gen context. Signed-off-by: Boris Brezillon Acked-by: Erik Faye-Lund Reviewed-by: Mary Guillemard Reviewed-by: Rebecca Mckeever Part-of: --- src/panfrost/vulkan/panvk_buffer_view.h | 14 +++++++++----- src/panfrost/vulkan/panvk_vX_buffer_view.c | 10 ++++------ src/panfrost/vulkan/panvk_vX_descriptor_set.c | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/panfrost/vulkan/panvk_buffer_view.h b/src/panfrost/vulkan/panvk_buffer_view.h index 92e9bbdab65..81478ccf22f 100644 --- a/src/panfrost/vulkan/panvk_buffer_view.h +++ b/src/panfrost/vulkan/panvk_buffer_view.h @@ -6,21 +6,25 @@ #ifndef PANVK_BUFFER_VIEW_H #define PANVK_BUFFER_VIEW_H +#ifndef PAN_ARCH +#error "PAN_ARCH must be defined" +#endif + #include #include "vk_buffer_view.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_buffer_view { struct vk_buffer_view vk; 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_buffer_view.c b/src/panfrost/vulkan/panvk_vX_buffer_view.c index 2355e76a5d3..8b12fb4c4fd 100644 --- a/src/panfrost/vulkan/panvk_vX_buffer_view.c +++ b/src/panfrost/vulkan/panvk_vX_buffer_view.c @@ -53,7 +53,7 @@ panvk_per_arch(CreateBufferView)(VkDevice _device, cfg.pointer = address; } - pan_pack(view->descs.tex, TEXTURE, cfg) { + pan_pack(view->descs.tex.opaque, TEXTURE, cfg) { cfg.dimension = MALI_TEXTURE_DIMENSION_1D; cfg.format = GENX(panfrost_format_from_pipe_format)(pfmt)->hw; cfg.width = view->vk.elements; @@ -68,17 +68,15 @@ panvk_per_arch(CreateBufferView)(VkDevice _device, } if (buffer->vk.usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) { - uint8_t *attrib_buf = (uint8_t *)view->descs.img_attrib_buf; - - pan_pack(attrib_buf, ATTRIBUTE_BUFFER, cfg) { + pan_pack(view->descs.img_attrib_buf[0].opaque, ATTRIBUTE_BUFFER, cfg) { cfg.type = MALI_ATTRIBUTE_TYPE_3D_LINEAR; cfg.pointer = address; cfg.stride = blksz; cfg.size = view->vk.elements * blksz; } - 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) { cfg.s_dimension = view->vk.elements; cfg.t_dimension = 1; cfg.r_dimension = 1; diff --git a/src/panfrost/vulkan/panvk_vX_descriptor_set.c b/src/panfrost/vulkan/panvk_vX_descriptor_set.c index 70385cd400d..1d3ec404e55 100644 --- a/src/panfrost/vulkan/panvk_vX_descriptor_set.c +++ b/src/panfrost/vulkan/panvk_vX_descriptor_set.c @@ -319,7 +319,7 @@ panvk_write_tex_buf_desc(struct panvk_descriptor_set *set, uint32_t binding, { VK_FROM_HANDLE(panvk_buffer_view, view, bufferView); - 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_bview_desc(panvk_desc_ubo_data(set, binding, elem), view);