summaryrefslogtreecommitdiffstats
path: root/src/intel/common/gen_decoder.c
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2017-05-19 15:31:35 -0700
committerKenneth Graunke <[email protected]>2017-06-01 11:49:45 -0700
commit73c21e69d0c132a6d837b40b6a863bdd406085d4 (patch)
tree24d6f4473fbee6b670f0ea9b610429decbcaac53 /src/intel/common/gen_decoder.c
parentd1b949282f6387e9dc4a9a43defc8aaa08749c0a (diff)
genxml: Fix decoding of array groups.
If you had a group as the first element of a struct, i.e. <struct name="3DSTATE_CONSTANT_BODY" length="10"> <group count="4" start="0" size="16"> <field name="ReadLength" start="0" end="15" type="uint"/> </group> ... </struct> we would get a group_offset of 0, causing create_field() to think the field wasn't in a group, and fail to offset forward for successive array elements. So we'd mark all the array elements as offset 0. Using ctx->group->elem_size is a better check for "are we in a group?". Acked-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/intel/common/gen_decoder.c')
-rw-r--r--src/intel/common/gen_decoder.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
index de50c4466bc..f419b2118a2 100644
--- a/src/intel/common/gen_decoder.c
+++ b/src/intel/common/gen_decoder.c
@@ -339,7 +339,7 @@ create_field(struct parser_context *ctx, const char **atts)
field->start = ctx->group->group_offset+strtoul(atts[i + 1], &p, 0);
else if (strcmp(atts[i], "end") == 0) {
field->end = ctx->group->group_offset+strtoul(atts[i + 1], &p, 0);
- if (ctx->group->group_offset) {
+ if (ctx->group->elem_size > 0) {
ctx->group->group_offset = field->end+1;
if (ctx->group->variable)
ctx->group->variable_offset = ctx->group->group_offset;