Lines Matching refs:iter
787 v3d_field_iterator_init(struct v3d_field_iterator *iter,
791 memset(iter, 0, sizeof(*iter));
793 iter->group = group;
794 iter->p = p;
809 iter_more_fields(const struct v3d_field_iterator *iter)
811 return iter->field_iter < iter->group->nfields;
815 iter_group_offset_bits(const struct v3d_field_iterator *iter,
818 return iter->group->group_offset + (group_iter *
819 iter->group->group_size);
823 iter_more_groups(const struct v3d_field_iterator *iter)
825 if (iter->group->variable) {
826 return iter_group_offset_bits(iter, iter->group_iter + 1) <
827 (v3d_group_get_length(iter->group) * 8);
829 return (iter->group_iter + 1) < iter->group->group_count ||
830 iter->group->next != NULL;
835 iter_advance_group(struct v3d_field_iterator *iter)
837 if (iter->group->variable)
838 iter->group_iter++;
840 if ((iter->group_iter + 1) < iter->group->group_count) {
841 iter->group_iter++;
843 iter->group = iter->group->next;
844 iter->group_iter = 0;
848 iter->field_iter = 0;
852 iter_advance_field(struct v3d_field_iterator *iter)
854 while (!iter_more_fields(iter)) {
855 if (!iter_more_groups(iter))
858 iter_advance_group(iter);
861 iter->field = iter->group->fields[iter->field_iter++];
862 if (iter->field->name)
863 snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
865 memset(iter->name, 0, sizeof(iter->name));
866 iter->offset = iter_group_offset_bits(iter, iter->group_iter) / 8 +
867 iter->field->start / 8;
868 iter->struct_desc = NULL;
874 v3d_field_iterator_next(struct clif_dump *clif, struct v3d_field_iterator *iter)
876 if (!iter_advance_field(iter))
882 iter_group_offset_bits(iter, iter->group_iter);
883 int s = group_member_offset + iter->field->start;
884 int e = group_member_offset + iter->field->end;
886 assert(!iter->field->minus_one ||
887 iter->field->type.kind == V3D_TYPE_INT ||
888 iter->field->type.kind == V3D_TYPE_UINT);
890 switch (iter->field->type.kind) {
893 uint32_t value = __gen_unpack_sint(iter->p, s, e);
894 if (iter->field->minus_one)
896 snprintf(iter->value, sizeof(iter->value), "%d", value);
897 enum_name = v3d_get_enum_name(&iter->field->inline_enum, value);
901 uint32_t value = __gen_unpack_uint(iter->p, s, e);
902 if (iter->field->minus_one)
904 if (strcmp(iter->field->name, "Vec size") == 0 && value == 0)
906 snprintf(iter->value, sizeof(iter->value), "%u", value);
907 enum_name = v3d_get_enum_name(&iter->field->inline_enum, value);
911 snprintf(iter->value, sizeof(iter->value), "%s",
912 __gen_unpack_uint(iter->p, s, e) ?
916 snprintf(iter->value, sizeof(iter->value), "%f",
917 __gen_unpack_float(iter->p, s, e));
921 snprintf(iter->value, sizeof(iter->value), "%f",
922 __gen_unpack_f187(iter->p, s, e));
927 __gen_unpack_uint(iter->p, s, e) << (31 - (e - s));
930 snprintf(iter->value, sizeof(iter->value),
934 snprintf(iter->value, sizeof(iter->value),
937 snprintf(iter->value, sizeof(iter->value),
945 snprintf(iter->value, sizeof(iter->value), "0x%08"PRIx64,
946 __gen_unpack_uint(iter->p, s, e) << (31 - (e - s)));
949 snprintf(iter->value, sizeof(iter->value), "<struct %s>",
950 iter->field->type.v3d_struct->name);
951 iter->struct_desc =
952 v3d_spec_find_struct(iter->group->spec,
953 iter->field->type.v3d_struct->name);
957 snprintf(iter->value, sizeof(iter->value), "%f",
958 __gen_unpack_sfixed(iter->p, s, e,
959 iter->field->type.f));
961 snprintf(iter->value, sizeof(iter->value), "%u",
962 (unsigned)__gen_unpack_uint(iter->p, s, e));
967 snprintf(iter->value, sizeof(iter->value), "%f",
968 __gen_unpack_ufixed(iter->p, s, e,
969 iter->field->type.f));
971 snprintf(iter->value, sizeof(iter->value), "%u",
972 (unsigned)__gen_unpack_uint(iter->p, s, e));
978 uint32_t value = __gen_unpack_uint(iter->p, s, e);
979 snprintf(iter->value, sizeof(iter->value), "%d", value);
980 enum_name = v3d_get_enum_name(iter->field->type.v3d_enum, value);
985 if (strlen(iter->group->name) == 0) {
986 int length = strlen(iter->name);
987 snprintf(iter->name + length, sizeof(iter->name) - length,
988 "[%i]", iter->group_iter);
992 int length = strlen(iter->value);
993 snprintf(iter->value + length, sizeof(iter->value) - length,
1004 struct v3d_field_iterator iter;
1006 v3d_field_iterator_init(&iter, group, p);
1007 while (v3d_field_iterator_next(clif, &iter)) {
1011 if (strcmp(iter.field->name, "sub-id") == 0 ||
1012 strcmp(iter.field->name, "unused") == 0 ||
1013 strcmp(iter.field->name, "Pad") == 0)
1018 iter.name, iter.value);
1021 iter.name, iter.value);
1023 if (iter.struct_desc) {
1024 uint64_t struct_offset = offset + iter.offset;
1025 v3d_print_group(clif, iter.struct_desc,
1027 &p[iter.offset]);