Lines Matching refs:iter

742 v3d_field_iterator_init(struct v3d_field_iterator *iter,
746 memset(iter, 0, sizeof(*iter));
748 iter->group = group;
749 iter->p = p;
764 iter_more_fields(const struct v3d_field_iterator *iter)
766 return iter->field_iter < iter->group->nfields;
770 iter_group_offset_bits(const struct v3d_field_iterator *iter,
773 return iter->group->group_offset + (group_iter *
774 iter->group->group_size);
778 iter_more_groups(const struct v3d_field_iterator *iter)
780 if (iter->group->variable) {
781 return iter_group_offset_bits(iter, iter->group_iter + 1) <
782 (v3d_group_get_length(iter->group) * 8);
784 return (iter->group_iter + 1) < iter->group->group_count ||
785 iter->group->next != NULL;
790 iter_advance_group(struct v3d_field_iterator *iter)
792 if (iter->group->variable)
793 iter->group_iter++;
795 if ((iter->group_iter + 1) < iter->group->group_count) {
796 iter->group_iter++;
798 iter->group = iter->group->next;
799 iter->group_iter = 0;
803 iter->field_iter = 0;
807 iter_advance_field(struct v3d_field_iterator *iter)
809 while (!iter_more_fields(iter)) {
810 if (!iter_more_groups(iter))
813 iter_advance_group(iter);
816 iter->field = iter->group->fields[iter->field_iter++];
817 if (iter->field->name)
818 snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
820 memset(iter->name, 0, sizeof(iter->name));
821 iter->offset = iter_group_offset_bits(iter, iter->group_iter) / 8 +
822 iter->field->start / 8;
823 iter->struct_desc = NULL;
829 v3d_field_iterator_next(struct clif_dump *clif, struct v3d_field_iterator *iter)
831 if (!iter_advance_field(iter))
837 iter_group_offset_bits(iter, iter->group_iter);
838 int s = group_member_offset + iter->field->start;
839 int e = group_member_offset + iter->field->end;
841 assert(!iter->field->minus_one ||
842 iter->field->type.kind == V3D_TYPE_INT ||
843 iter->field->type.kind == V3D_TYPE_UINT);
845 switch (iter->field->type.kind) {
848 uint32_t value = __gen_unpack_sint(iter->p, s, e);
849 if (iter->field->minus_one)
851 snprintf(iter->value, sizeof(iter->value), "%d", value);
852 enum_name = v3d_get_enum_name(&iter->field->inline_enum, value);
856 uint32_t value = __gen_unpack_uint(iter->p, s, e);
857 if (iter->field->minus_one)
859 if (strcmp(iter->field->name, "Vec size") == 0 && value == 0)
861 snprintf(iter->value, sizeof(iter->value), "%u", value);
862 enum_name = v3d_get_enum_name(&iter->field->inline_enum, value);
866 snprintf(iter->value, sizeof(iter->value), "%s",
867 __gen_unpack_uint(iter->p, s, e) ?
871 snprintf(iter->value, sizeof(iter->value), "%f",
872 __gen_unpack_float(iter->p, s, e));
876 snprintf(iter->value, sizeof(iter->value), "%f",
877 __gen_unpack_f187(iter->p, s, e));
882 __gen_unpack_uint(iter->p, s, e) << (31 - (e - s));
885 snprintf(iter->value, sizeof(iter->value),
889 snprintf(iter->value, sizeof(iter->value),
892 snprintf(iter->value, sizeof(iter->value),
900 snprintf(iter->value, sizeof(iter->value), "0x%08"PRIx64,
901 __gen_unpack_uint(iter->p, s, e) << (31 - (e - s)));
904 snprintf(iter->value, sizeof(iter->value), "<struct %s>",
905 iter->field->type.v3d_struct->name);
906 iter->struct_desc =
907 v3d_spec_find_struct(iter->group->spec,
908 iter->field->type.v3d_struct->name);
912 snprintf(iter->value, sizeof(iter->value), "%f",
913 __gen_unpack_sfixed(iter->p, s, e,
914 iter->field->type.f));
916 snprintf(iter->value, sizeof(iter->value), "%u",
917 (unsigned)__gen_unpack_uint(iter->p, s, e));
922 snprintf(iter->value, sizeof(iter->value), "%f",
923 __gen_unpack_ufixed(iter->p, s, e,
924 iter->field->type.f));
926 snprintf(iter->value, sizeof(iter->value), "%u",
927 (unsigned)__gen_unpack_uint(iter->p, s, e));
933 uint32_t value = __gen_unpack_uint(iter->p, s, e);
934 snprintf(iter->value, sizeof(iter->value), "%d", value);
935 enum_name = v3d_get_enum_name(iter->field->type.v3d_enum, value);
940 if (strlen(iter->group->name) == 0) {
941 int length = strlen(iter->name);
942 snprintf(iter->name + length, sizeof(iter->name) - length,
943 "[%i]", iter->group_iter);
947 int length = strlen(iter->value);
948 snprintf(iter->value + length, sizeof(iter->value) - length,
959 struct v3d_field_iterator iter;
961 v3d_field_iterator_init(&iter, group, p);
962 while (v3d_field_iterator_next(clif, &iter)) {
966 if (strcmp(iter.field->name, "sub-id") == 0 ||
967 strcmp(iter.field->name, "unused") == 0 ||
968 strcmp(iter.field->name, "Pad") == 0)
973 iter.name, iter.value);
976 iter.name, iter.value);
978 if (iter.struct_desc) {
979 uint64_t struct_offset = offset + iter.offset;
980 v3d_print_group(clif, iter.struct_desc,
982 &p[iter.offset]);