diff options
author | Kenneth Graunke <[email protected]> | 2017-10-25 21:17:14 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-11-07 09:19:48 -0800 |
commit | cb47de4ff0668597902c4276deb2f8b2e2d2d28e (patch) | |
tree | a80fed59015c51b46f07a46e30d5453bd57fafa1 /src/broadcom/cle/v3d_decoder.c | |
parent | 47dac5d2bc8b72a5ea96bccd537ca31b6713f090 (diff) |
broadcom/genxml: Fix decoding of groups with small fields.
Groups containing fields smaller than a byte probably not being decoded
correctly. For example:
<group count="32" start="32" size="4">
<field name="Vertex Element Enables" start="0" end="3" type="uint"/>
</group>
gen_field_iterator_next would properly walk over each element of the
array, incrementing group_iter. However, the code to print the actual
values only considered iter->field->start/end, which are 0 and 3 in the
above example. So it would always fetch bits 3:0 of the current byte,
printing the same value over and over.
Cc: Eric Anholt <[email protected]>
Diffstat (limited to 'src/broadcom/cle/v3d_decoder.c')
-rw-r--r-- | src/broadcom/cle/v3d_decoder.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/broadcom/cle/v3d_decoder.c b/src/broadcom/cle/v3d_decoder.c index 4ac40af05e8..9c457b76068 100644 --- a/src/broadcom/cle/v3d_decoder.c +++ b/src/broadcom/cle/v3d_decoder.c @@ -781,8 +781,10 @@ v3d_field_iterator_next(struct v3d_field_iterator *iter) const char *enum_name = NULL; - int s = iter->field->start; - int e = iter->field->end; + int group_member_offset = + iter_group_offset_bits(iter, iter->group_iter); + int s = group_member_offset + iter->field->start; + int e = group_member_offset + iter->field->end; switch (iter->field->type.kind) { case V3D_TYPE_UNKNOWN: |