summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2017-10-25 21:17:14 -0700
committerEric Anholt <[email protected]>2017-11-07 09:19:48 -0800
commitcb47de4ff0668597902c4276deb2f8b2e2d2d28e (patch)
treea80fed59015c51b46f07a46e30d5453bd57fafa1 /src
parent47dac5d2bc8b72a5ea96bccd537ca31b6713f090 (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')
-rw-r--r--src/broadcom/cle/v3d_decoder.c6
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: