From 5fd523fafbc623bcfd65829705abeda83d51ad4e Mon Sep 17 00:00:00 2001 From: Lars-Ivar Hesselberg Simonsen Date: Tue, 10 Sep 2024 16:14:03 +0200 Subject: [PATCH] pan/genxml: Add pan_pack_nodefaults() The new packing macro will not default initialize fields, which is useful for structures used as override flags or in pan_merge(). Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/11506 Part-of: --- src/panfrost/.clang-format | 1 + src/panfrost/lib/genxml/gen_pack.py | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/panfrost/.clang-format b/src/panfrost/.clang-format index 0c23ca6029a..4766dd01180 100644 --- a/src/panfrost/.clang-format +++ b/src/panfrost/.clang-format @@ -68,6 +68,7 @@ ForEachMacros: [ 'pan_foreach_predecessor', 'pan_foreach_successor', 'pan_pack', + 'pan_pack_nodefaults', 'pan_section_pack', 'panvk_cs_reg_upd_ctx', ] diff --git a/src/panfrost/lib/genxml/gen_pack.py b/src/panfrost/lib/genxml/gen_pack.py index a90503837f7..4d48284fa82 100644 --- a/src/panfrost/lib/genxml/gen_pack.py +++ b/src/panfrost/lib/genxml/gen_pack.py @@ -125,6 +125,13 @@ __gen_unpack_padded(const uint8_t *restrict cl, uint32_t start, uint32_t end) ({ PREFIX2(T, pack)((uint32_t *) (dst), &name); \\ _loop_terminate = NULL; })) +#define pan_pack_nodefaults(dst, T, name) \\ + for (struct PREFIX1(T) name = { 0 }, \\ + *_loop_terminate = &name; \\ + __builtin_expect(_loop_terminate != NULL, 1); \\ + ({ PREFIX2(T, pack)((uint32_t *) (dst), &name); \\ + _loop_terminate = NULL; })) + #define pan_unpack(src, T, name) \\ struct PREFIX1(T) name; \\ PREFIX2(T, unpack)((uint8_t *)(src), &name)