diff --git a/src/panfrost/lib/decode.c b/src/panfrost/lib/decode.c
index 803461f..12f9f8e 100644
--- a/src/panfrost/lib/decode.c
+++ b/src/panfrost/lib/decode.c
@@ -1044,15 +1044,16 @@
         MAP_ADDR(ATTRIBUTE_BUFFER, addr, cl);
 
         for (int i = 0; i < count; ++i) {
-                struct MALI_ATTRIBUTE_BUFFER temp;
-                MALI_ATTRIBUTE_BUFFER_unpack(cl + i * MALI_ATTRIBUTE_BUFFER_LENGTH, &temp);
+                pan_unpack(cl + i * MALI_ATTRIBUTE_BUFFER_LENGTH, ATTRIBUTE_BUFFER, temp);
                 DUMP_UNPACKED(ATTRIBUTE_BUFFER, temp, "%s:\n", prefix);
 
-                if (temp.type == MALI_ATTRIBUTE_TYPE_1D_NPOT_DIVISOR) {
-                        struct MALI_ATTRIBUTE_BUFFER_CONTINUATION_NPOT temp2;
-                        MALI_ATTRIBUTE_BUFFER_CONTINUATION_NPOT_unpack(cl + (i + 1) * MALI_ATTRIBUTE_BUFFER_LENGTH, &temp2);
-                        MALI_ATTRIBUTE_BUFFER_CONTINUATION_NPOT_print(pandecode_dump_stream, &temp2, 2);
-                }
+                if (temp.type != MALI_ATTRIBUTE_TYPE_1D_NPOT_DIVISOR)
+                        continue;
+
+                pan_unpack(cl + (i + 1) * MALI_ATTRIBUTE_BUFFER_LENGTH,
+                           ATTRIBUTE_BUFFER_CONTINUATION_NPOT, temp2);
+                pan_print(pandecode_dump_stream, ATTRIBUTE_BUFFER_CONTINUATION_NPOT,
+                          temp2, (pandecode_indent + 1) * 2);
         }
 }
 
@@ -1224,9 +1225,8 @@
         /* Decode invocation_count. See the comment before the definition of
          * invocation_count for an explanation.
          */
-        struct MALI_INVOCATION invocation;
         struct mali_invocation_packed invocation_packed = p->invocation;
-        MALI_INVOCATION_unpack((const uint8_t *) &invocation_packed, &invocation);
+        pan_unpack(&invocation_packed, INVOCATION, invocation);
 
         unsigned size_x = bits(invocation.invocations, 0, invocation.size_y_shift) + 1;
         unsigned size_y = bits(invocation.invocations, invocation.size_y_shift, invocation.size_z_shift) + 1;
@@ -1257,9 +1257,8 @@
                       size_x, size_y, size_z,
                       groups_x, groups_y, groups_z);
 
-        struct MALI_PRIMITIVE primitive;
         struct mali_primitive_packed prim_packed = p->primitive;
-        MALI_PRIMITIVE_unpack((const uint8_t *) &prim_packed, &primitive);
+        pan_unpack(&prim_packed, PRIMITIVE, primitive);
         DUMP_UNPACKED(PRIMITIVE, primitive, "Primitive:\n");
 
         /* Validate an index buffer is present if we need one. TODO: verify
@@ -1447,8 +1446,7 @@
         struct pandecode_mapped_memory *mapped_mem = pandecode_find_mapped_gpu_mem_containing(u);
         const uint8_t *cl = pandecode_fetch_gpu_mem(mapped_mem, u, MALI_MIDGARD_TEXTURE_LENGTH);
 
-        struct MALI_MIDGARD_TEXTURE temp;
-        MALI_MIDGARD_TEXTURE_unpack(cl, &temp);
+        pan_unpack(cl, MIDGARD_TEXTURE, temp);
         DUMP_UNPACKED(MIDGARD_TEXTURE, temp, "Texture:\n")
 
         pandecode_indent++;
@@ -1464,8 +1462,7 @@
                 unsigned job_no,
                 unsigned tex)
 {
-        struct MALI_BIFROST_TEXTURE temp;
-        MALI_BIFROST_TEXTURE_unpack(cl, &temp);
+        pan_unpack(cl, BIFROST_TEXTURE, temp);
         DUMP_UNPACKED(BIFROST_TEXTURE, temp, "Texture:\n")
 
         struct pandecode_mapped_memory *tmem = pandecode_find_mapped_gpu_mem_containing(temp.surfaces);
@@ -1626,11 +1623,7 @@
                         .uniform_buffer_count = 0
                 };
 
-                struct MALI_STATE state;
-                struct MALI_MIDGARD_PROPERTIES midg_props;
-                struct MALI_BIFROST_PROPERTIES bi_props;
-
-                MALI_STATE_unpack((const uint8_t *) cl, &state);
+                pan_unpack(cl, STATE, state);
 
                 if (state.shader.shader & ~0xF)
                         info = pandecode_shader_disassemble(state.shader.shader & ~0xF, job_no, job_type, is_bifrost, gpu_id);
@@ -1646,13 +1639,13 @@
 
                 fprintf(pandecode_dump_stream, "  Properties\n");
                 if (is_bifrost) {
-                        MALI_BIFROST_PROPERTIES_unpack((const uint8_t *) &state.properties, &bi_props);
+                        pan_unpack(&state.properties, BIFROST_PROPERTIES, bi_props);
                         DUMP_UNPACKED(BIFROST_PROPERTIES, bi_props, "Properties:\n");
 
                         uniform_count = state.preload.uniform_count;
                         uniform_buffer_count = bi_props.uniform_buffer_count;
                 } else {
-                        MALI_MIDGARD_PROPERTIES_unpack((const uint8_t *) &state.properties, &midg_props);
+                        pan_unpack(&state.properties, MIDGARD_PROPERTIES, midg_props);
                         DUMP_UNPACKED(MIDGARD_PROPERTIES, midg_props, "Properties:\n")
 
                         uniform_count = midg_props.uniform_count;
@@ -1887,10 +1880,9 @@
 {
         struct bifrost_payload_vertex *PANDECODE_PTR_VAR(v, mem, payload);
 
-        struct MALI_DRAW draw;
         struct mali_draw_packed draw_packed;
         memcpy(&draw_packed, &v->postfix, sizeof(draw_packed));
-        MALI_DRAW_unpack((const uint8_t *) &draw_packed, &draw); \
+        pan_unpack(&draw_packed, DRAW, draw);
         pandecode_vertex_tiler_postfix_pre(&draw, job_no, h->job_type, "", true, gpu_id);
 
         pandecode_vertex_tiler_prefix(&v->prefix, job_no, false);
@@ -1906,10 +1898,9 @@
 {
         struct bifrost_payload_tiler *PANDECODE_PTR_VAR(t, mem, payload);
 
-        struct MALI_DRAW draw;
         struct mali_draw_packed draw_packed;
         memcpy(&draw_packed, &t->postfix, sizeof(draw_packed));
-        MALI_DRAW_unpack((const uint8_t *) &draw_packed, &draw); \
+        pan_unpack(&draw_packed, DRAW, draw);
         pandecode_vertex_tiler_postfix_pre(&draw, job_no, h->job_type, "", true, gpu_id);
         pandecode_tiler_meta(t->tiler_meta, job_no);
 
@@ -1942,18 +1933,16 @@
         struct midgard_payload_vertex_tiler *PANDECODE_PTR_VAR(v, mem, payload);
         bool is_graphics = (h->job_type == MALI_JOB_TYPE_VERTEX) || (h->job_type == MALI_JOB_TYPE_TILER);
 
-        struct MALI_DRAW draw;
         struct mali_draw_packed draw_packed;
         memcpy(&draw_packed, &v->postfix, sizeof(draw_packed));
-        MALI_DRAW_unpack((const uint8_t *) &draw_packed, &draw); \
+        pan_unpack(&draw_packed, DRAW, draw);
         pandecode_vertex_tiler_postfix_pre(&draw, job_no, h->job_type, "", false, gpu_id);
 
         pandecode_vertex_tiler_prefix(&v->prefix, job_no, is_graphics);
         DUMP_CL(DRAW, &draw_packed, "Draw:\n");
 
-        struct MALI_PRIMITIVE primitive;
         struct mali_primitive_packed prim_packed = v->prefix.primitive;
-        MALI_PRIMITIVE_unpack((const uint8_t *) &prim_packed, &primitive);
+        pan_unpack(&prim_packed, PRIMITIVE, primitive);
 
         pandecode_primitive_size(v->primitive_size, primitive.point_size_array == 0);
 
