v3d: we always have at least one output segment
[mesa.git] / src / broadcom / cle / v3d_decoder.c
index 084fc64d36511890a532ffecf5142a4fe97d780a..23ee59fd0cf1187e71dec25e0d6e6aa46508373b 100644 (file)
@@ -453,7 +453,9 @@ start_element(void *data, const char *element_name, const char **atts)
         ctx->loc.line_number = XML_GetCurrentLineNumber(ctx->parser);
 
         for (i = 0; atts[i]; i += 2) {
-                if (strcmp(atts[i], "name") == 0)
+                if (strcmp(atts[i], "shortname") == 0)
+                        name = atts[i + 1];
+                else if (strcmp(atts[i], "name") == 0 && !name)
                         name = atts[i + 1];
                 else if (strcmp(atts[i], "gen") == 0)
                         ver = atts[i + 1];
@@ -649,7 +651,8 @@ v3d_spec_load(const struct v3d_device_info *devinfo)
         struct parser_context ctx;
         void *buf;
         uint8_t *text_data = NULL;
-        uint32_t text_offset = 0, text_length = 0, total_length;
+        uint32_t text_offset = 0, text_length = 0;
+        ASSERTED uint32_t total_length;
 
         for (int i = 0; i < ARRAY_SIZE(genxml_files_table); i++) {
                 if (i != 0) {
@@ -832,7 +835,7 @@ iter_advance_field(struct v3d_field_iterator *iter)
 
         iter->field = iter->group->fields[iter->field_iter++];
         if (iter->field->name)
-                strncpy(iter->name, iter->field->name, sizeof(iter->name));
+                snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
         else
                 memset(iter->name, 0, sizeof(iter->name));
         iter->offset = iter_group_offset_bits(iter, iter->group_iter) / 8 +
@@ -925,14 +928,24 @@ v3d_field_iterator_next(struct clif_dump *clif, struct v3d_field_iterator *iter)
                                              iter->field->type.v3d_struct->name);
                 break;
         case V3D_TYPE_SFIXED:
-                snprintf(iter->value, sizeof(iter->value), "%f",
-                         __gen_unpack_sfixed(iter->p, s, e,
-                                             iter->field->type.f));
+                if (clif->pretty) {
+                        snprintf(iter->value, sizeof(iter->value), "%f",
+                                 __gen_unpack_sfixed(iter->p, s, e,
+                                                     iter->field->type.f));
+                } else {
+                        snprintf(iter->value, sizeof(iter->value), "%u",
+                                 (unsigned)__gen_unpack_uint(iter->p, s, e));
+                }
                 break;
         case V3D_TYPE_UFIXED:
-                snprintf(iter->value, sizeof(iter->value), "%f",
-                         __gen_unpack_ufixed(iter->p, s, e,
-                                             iter->field->type.f));
+                if (clif->pretty) {
+                        snprintf(iter->value, sizeof(iter->value), "%f",
+                                 __gen_unpack_ufixed(iter->p, s, e,
+                                                     iter->field->type.f));
+                } else {
+                        snprintf(iter->value, sizeof(iter->value), "%u",
+                                 (unsigned)__gen_unpack_uint(iter->p, s, e));
+                }
                 break;
         case V3D_TYPE_MBO:
                 break;