Lines Matching refs:ctx
152 create_group(struct parser_context *ctx,
160 group = rzalloc(ctx->spec, struct intel_group);
164 group->spec = ctx->spec;
218 create_enum(struct parser_context *ctx, const char *name, const char **atts)
222 e = rzalloc(ctx->spec, struct intel_enum);
279 string_to_type(struct parser_context *ctx, const char *s)
301 else if (g = intel_spec_find_struct(ctx->spec, s), g != NULL)
303 else if (e = intel_spec_find_enum(ctx->spec, s), e != NULL)
310 fail(&ctx->loc, "invalid type: %s", s);
314 create_field(struct parser_context *ctx, const char **atts)
318 field = rzalloc(ctx->group, struct intel_field);
319 field->parent = ctx->group;
334 field->type = string_to_type(ctx, atts[i + 1]);
346 create_array_field(struct parser_context *ctx, struct intel_group *array)
350 field = rzalloc(ctx->group, struct intel_field);
351 field->parent = ctx->group;
360 create_value(struct parser_context *ctx, const char **atts)
362 struct intel_value *value = rzalloc(ctx->values, struct intel_value);
375 create_and_append_field(struct parser_context *ctx,
380 create_array_field(ctx, array) : create_field(ctx, atts);
381 struct intel_field *prev = NULL, *list = ctx->group->fields;
390 ctx->group->fields = field;
400 struct parser_context *ctx = data;
404 ctx->loc.line_number = XML_GetCurrentLineNumber(ctx->parser);
415 fail(&ctx->loc, "no platform name given");
417 fail(&ctx->loc, "no gen given");
422 fail(&ctx->loc, "invalid gen given: %s", gen);
426 ctx->spec->gen = intel_make_gen(major, minor);
428 ctx->group = create_group(ctx, name, atts, NULL, false);
430 ctx->group = create_group(ctx, name, atts, NULL, true);
432 ctx->group = create_group(ctx, name, atts, NULL, true);
433 get_register_offset(atts, &ctx->group->register_offset);
435 struct intel_group *group = create_group(ctx, "", atts, ctx->group, false);
436 ctx->last_field = create_and_append_field(ctx, NULL, group);
437 ctx->group = group;
439 ctx->last_field = create_and_append_field(ctx, atts, NULL);
441 ctx->enoom = create_enum(ctx, name, atts);
443 if (ctx->n_values >= ctx->n_allocated_values) {
444 ctx->n_allocated_values = MAX2(2, ctx->n_allocated_values * 2);
445 ctx->values = reralloc_array_size(ctx->spec, ctx->values,
447 ctx->n_allocated_values);
449 assert(ctx->n_values < ctx->n_allocated_values);
450 ctx->values[ctx->n_values++] = create_value(ctx, atts);
458 struct parser_context *ctx = data;
459 struct intel_spec *spec = ctx->spec;
464 struct intel_group *group = ctx->group;
467 ctx->group = ctx->group->parent;
489 ctx->group = ctx->group->parent;
491 struct intel_field *field = ctx->last_field;
492 ctx->last_field = NULL;
493 field->inline_enum.values = ctx->values;
494 field->inline_enum.nvalues = ctx->n_values;
495 ctx->values = ralloc_array(ctx->spec, struct intel_value*, ctx->n_allocated_values = 2);
496 ctx->n_values = 0;
498 struct intel_enum *e = ctx->enoom;
499 e->values = ctx->values;
500 e->nvalues = ctx->n_values;
501 ctx->values = ralloc_array(ctx->spec, struct intel_value*, ctx->n_allocated_values = 2);
502 ctx->n_values = 0;
503 ctx->enoom = NULL;
593 struct parser_context ctx;
613 memset(&ctx, 0, sizeof ctx);
614 ctx.parser = XML_ParserCreate(NULL);
615 XML_SetUserData(ctx.parser, &ctx);
616 if (ctx.parser == NULL) {
621 XML_SetElementHandler(ctx.parser, start_element, end_element);
622 XML_SetCharacterDataHandler(ctx.parser, character_data);
624 ctx.spec = intel_spec_init();
625 if (ctx.spec == NULL) {
635 buf = XML_GetBuffer(ctx.parser, text_length);
638 if (XML_ParseBuffer(ctx.parser, text_length, true) == 0) {
641 XML_GetCurrentLineNumber(ctx.parser),
642 XML_GetCurrentColumnNumber(ctx.parser),
643 XML_GetCurrentByteIndex(ctx.parser), text_length,
644 XML_ErrorString(XML_GetErrorCode(ctx.parser)));
645 XML_ParserFree(ctx.parser);
650 XML_ParserFree(ctx.parser);
653 return ctx.spec;
659 struct parser_context ctx;
670 memset(&ctx, 0, sizeof ctx);
671 ctx.parser = XML_ParserCreate(NULL);
672 XML_SetUserData(ctx.parser, &ctx);
673 if (ctx.parser == NULL) {
679 XML_SetElementHandler(ctx.parser, start_element, end_element);
680 XML_SetCharacterDataHandler(ctx.parser, character_data);
681 ctx.loc.filename = filename;
683 ctx.spec = intel_spec_init();
684 if (ctx.spec == NULL) {
690 buf = XML_GetBuffer(ctx.parser, XML_BUFFER_SIZE);
694 intel_spec_destroy(ctx.spec);
695 ctx.spec = NULL;
700 if (XML_ParseBuffer(ctx.parser, len, len == 0) == 0) {
703 XML_GetCurrentLineNumber(ctx.parser),
704 XML_GetCurrentColumnNumber(ctx.parser),
705 XML_ErrorString(XML_GetErrorCode(ctx.parser)));
706 intel_spec_destroy(ctx.spec);
707 ctx.spec = NULL;
713 XML_ParserFree(ctx.parser);
717 /* free ctx.spec if genxml is empty */
718 if (ctx.spec &&
719 _mesa_hash_table_num_entries(ctx.spec->commands) == 0 &&
720 _mesa_hash_table_num_entries(ctx.spec->structs) == 0) {
723 intel_spec_destroy(ctx.spec);
727 return ctx.spec;