Lines Matching refs:iter

762 v3d_field_iterator_init(struct v3d_field_iterator *iter,
766 memset(iter, 0, sizeof(*iter));
768 iter->group = group;
769 iter->p = p;
784 iter_more_fields(const struct v3d_field_iterator *iter)
786 return iter->field_iter < iter->group->nfields;
790 iter_group_offset_bits(const struct v3d_field_iterator *iter,
793 return iter->group->group_offset + (group_iter *
794 iter->group->group_size);
798 iter_more_groups(const struct v3d_field_iterator *iter)
800 if (iter->group->variable) {
801 return iter_group_offset_bits(iter, iter->group_iter + 1) <
802 (v3d_group_get_length(iter->group) * 8);
804 return (iter->group_iter + 1) < iter->group->group_count ||
805 iter->group->next != NULL;
810 iter_advance_group(struct v3d_field_iterator *iter)
812 if (iter->group->variable)
813 iter->group_iter++;
815 if ((iter->group_iter + 1) < iter->group->group_count) {
816 iter->group_iter++;
818 iter->group = iter->group->next;
819 iter->group_iter = 0;
823 iter->field_iter = 0;
827 iter_advance_field(struct v3d_field_iterator *iter)
829 while (!iter_more_fields(iter)) {
830 if (!iter_more_groups(iter))
833 iter_advance_group(iter);
836 iter->field = iter->group->fields[iter->field_iter++];
837 if (iter->field->name)
838 snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
840 memset(iter->name, 0, sizeof(iter->name));
841 iter->offset = iter_group_offset_bits(iter, iter->group_iter) / 8 +
842 iter->field->start / 8;
843 iter->struct_desc = NULL;
849 v3d_field_iterator_next(struct clif_dump *clif, struct v3d_field_iterator *iter)
851 if (!iter_advance_field(iter))
857 iter_group_offset_bits(iter, iter->group_iter);
858 int s = group_member_offset + iter->field->start;
859 int e = group_member_offset + iter->field->end;
861 assert(!iter->field->minus_one ||
862 iter->field->type.kind == V3D_TYPE_INT ||
863 iter->field->type.kind == V3D_TYPE_UINT);
865 switch (iter->field->type.kind) {
868 uint32_t value = __gen_unpack_sint(iter->p, s, e);
869 if (iter->field->minus_one)
871 snprintf(iter->value, sizeof(iter->value), "%d", value);
872 enum_name = v3d_get_enum_name(&iter->field->inline_enum, value);
876 uint32_t value = __gen_unpack_uint(iter->p, s, e);
877 if (iter->field->minus_one)
879 if (strcmp(iter->field->name, "Vec size") == 0 && value == 0)
881 snprintf(iter->value, sizeof(iter->value), "%u", value);
882 enum_name = v3d_get_enum_name(&iter->field->inline_enum, value);
886 snprintf(iter->value, sizeof(iter->value), "%s",
887 __gen_unpack_uint(iter->p, s, e) ?
891 snprintf(iter->value, sizeof(iter->value), "%f",
892 __gen_unpack_float(iter->p, s, e));
896 snprintf(iter->value, sizeof(iter->value), "%f",
897 __gen_unpack_f187(iter->p, s, e));
902 __gen_unpack_uint(iter->p, s, e) << (31 - (e - s));
905 snprintf(iter->value, sizeof(iter->value),
909 snprintf(iter->value, sizeof(iter->value),
912 snprintf(iter->value, sizeof(iter->value),
920 snprintf(iter->value, sizeof(iter->value), "0x%08"PRIx64,
921 __gen_unpack_uint(iter->p, s, e) << (31 - (e - s)));
924 snprintf(iter->value, sizeof(iter->value), "<struct %s>",
925 iter->field->type.v3d_struct->name);
926 iter->struct_desc =
927 v3d_spec_find_struct(iter->group->spec,
928 iter->field->type.v3d_struct->name);
932 snprintf(iter->value, sizeof(iter->value), "%f",
933 __gen_unpack_sfixed(iter->p, s, e,
934 iter->field->type.f));
936 snprintf(iter->value, sizeof(iter->value), "%u",
937 (unsigned)__gen_unpack_uint(iter->p, s, e));
942 snprintf(iter->value, sizeof(iter->value), "%f",
943 __gen_unpack_ufixed(iter->p, s, e,
944 iter->field->type.f));
946 snprintf(iter->value, sizeof(iter->value), "%u",
947 (unsigned)__gen_unpack_uint(iter->p, s, e));
953 uint32_t value = __gen_unpack_uint(iter->p, s, e);
954 snprintf(iter->value, sizeof(iter->value), "%d", value);
955 enum_name = v3d_get_enum_name(iter->field->type.v3d_enum, value);
960 if (strlen(iter->group->name) == 0) {
961 int length = strlen(iter->name);
962 snprintf(iter->name + length, sizeof(iter->name) - length,
963 "[%i]", iter->group_iter);
967 int length = strlen(iter->value);
968 snprintf(iter->value + length, sizeof(iter->value) - length,
979 struct v3d_field_iterator iter;
981 v3d_field_iterator_init(&iter, group, p);
982 while (v3d_field_iterator_next(clif, &iter)) {
986 if (strcmp(iter.field->name, "sub-id") == 0 ||
987 strcmp(iter.field->name, "unused") == 0 ||
988 strcmp(iter.field->name, "Pad") == 0)
993 iter.name, iter.value);
996 iter.name, iter.value);
998 if (iter.struct_desc) {
999 uint64_t struct_offset = offset + iter.offset;
1000 v3d_print_group(clif, iter.struct_desc,
1002 &p[iter.offset]);