pco, pygen: query bytes required for each variant

Signed-off-by: Simon Perretta <simon.perretta@imgtec.com>
Acked-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32258>
This commit is contained in:
Simon Perretta
2024-05-10 22:57:25 +01:00
committed by Marge Bot
parent 5670eb6732
commit 8887bc0d47
3 changed files with 17 additions and 3 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ static bool ${enum.name}_valid(uint64_t val)
% for bit_set in bit_sets.values():
enum ${bit_set.name}_variant {
${bit_set.name.upper()}_NONE,
% for variant in bit_set.variants:
% for variant, *_ in bit_set.variants:
${variant},
% endfor
};
+13
View File
@@ -32,6 +32,19 @@ enum ${bit_set.name}_field {
% endfor
};
static unsigned ${bit_set.name}_bytes(enum ${bit_set.name}_variant variant)
{
switch (variant) {
case ${bit_set.name.upper()}_NONE: return 0;
% for variant, num_bytes in bit_set.variants:
case ${variant}: return ${num_bytes};
% endfor
default: break;
}
unreachable();
}
static unsigned ${bit_set.name}_encode_field(uint8_t *bin, enum ${bit_set.name}_field field, uint64_t val)
{
uint64_t enc_val;
+3 -2
View File
@@ -344,8 +344,9 @@ def bit_struct(name, bit_set, field_mappings, data=None):
assert (total_bits % 8) == 0, f'Bit struct "{name}" has a non-byte-aligned number of bits ({total_bits}).'
_name = f'{bit_set.name}_{name}'
bs = BitStruct(_name, struct_fields, encode_fields, total_bits // 8, data)
total_bytes = total_bits // 8
bs = BitStruct(_name, struct_fields, encode_fields, total_bytes, data)
bit_set.bit_structs[name] = bs
bit_set.variants.append(f'{bit_set.name}_{name}'.upper())
bit_set.variants.append((f'{bit_set.name}_{name}'.upper(), total_bytes))
return bs