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:
committed by
Marge Bot
parent
5670eb6732
commit
8887bc0d47
@@ -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
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user