Mesa (master): genxml: Fix decoder for groups with multiple fields.
Kenneth Graunke
kwg at kemper.freedesktop.org
Thu Jun 1 18:57:13 UTC 2017
Module: Mesa
Branch: master
Commit: d1b949282f6387e9dc4a9a43defc8aaa08749c0a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d1b949282f6387e9dc4a9a43defc8aaa08749c0a
Author: Kenneth Graunke <kenneth at whitecape.org>
Date: Fri May 19 15:25:21 2017 -0700
genxml: Fix decoder for groups with multiple fields.
If you have something like:
<group count="0" start="96" size="32">
<field name="Entry_0" start="0" end="15" type="GATHER_CONSTANT_ENTRY"/>
<field name="Entry_1" start="16" end="31" type="GATHER_CONSTANT_ENTRY"/>
</group>
We would reset ctx->group_count to 0 after processing the first field,
so the second would not have a group count.
This is largely untested, as the only groups with multiple fields are
packets we don't emit in Mesa. Found by inspection.
Acked-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
---
src/intel/common/gen_decoder.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
index 3ea2eaf8db..de50c4466b 100644
--- a/src/intel/common/gen_decoder.c
+++ b/src/intel/common/gen_decoder.c
@@ -414,11 +414,9 @@ start_element(void *data, const char *element_name, const char **atts)
&ctx->group->group_count, &ctx->group->elem_size,
&ctx->group->variable);
} else if (strcmp(element_name, "field") == 0) {
- do {
+ for (int g = 0; g < MAX2(ctx->group->group_count, 1); g++) {
ctx->fields[ctx->nfields++] = create_field(ctx, atts);
- if (ctx->group->group_count)
- ctx->group->group_count--;
- } while (ctx->group->group_count > 0);
+ }
} else if (strcmp(element_name, "enum") == 0) {
ctx->enoom = create_enum(ctx, name, atts);
} else if (strcmp(element_name, "value") == 0) {
More information about the mesa-commit
mailing list