ilo: improve blob decoding
authorChia-I Wu <olvaffe@gmail.com>
Sat, 25 Oct 2014 05:27:09 +0000 (13:27 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Sat, 25 Oct 2014 06:28:08 +0000 (14:28 +0800)
The last few dwords were skipped if the total number of dwords was not a
multiple of 4.  Change the formatting for better readability.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
src/gallium/drivers/ilo/ilo_builder_decode.c

index 922acc00cc151fae694356c7bb20fa0c0ed1ac00..3a9ae248d1d36839ade81ce64d9e861b29d7c543 100644 (file)
@@ -79,21 +79,44 @@ writer_decode_blob(const struct ilo_builder *builder,
                    enum ilo_builder_writer_type which,
                    const struct ilo_builder_item *item)
 {
-   const unsigned state_size = sizeof(uint32_t) * 4;
+   const unsigned state_size = sizeof(uint32_t);
    const unsigned count = item->size / state_size;
    unsigned offset = item->offset;
    unsigned i;
 
-   for (i = 0; i < count; i++) {
+   for (i = 0; i < count; i += 4) {
       const uint32_t *dw = writer_pointer(builder, which, offset);
 
-      writer_dw(builder, which, offset, 0, "BLOB%d", i);
-      /* output a single line for all four DWords */
-      ilo_printf("(% f, % f, % f, % f) (0x%08x, 0x%08x, 0x%08x, 0x%08x)\n",
-               uif(dw[0]), uif(dw[1]), uif(dw[2]), uif(dw[3]),
-               dw[0], dw[1], dw[2], dw[3]);
+      writer_dw(builder, which, offset, 0, "BLOB%d", i / 4);
+
+      switch (count - i) {
+      case 1:
+         ilo_printf("(%10.4f, %10c, %10c, %10c) "
+                    "(0x%08x, %10c, %10c, %10c)\n",
+                    uif(dw[0]), 'X', 'X', 'X',
+                        dw[0],  'X', 'X', 'X');
+         break;
+      case 2:
+         ilo_printf("(%10.4f, %10.4f, %10c, %10c) "
+                    "(0x%08x, 0x%08x, %10c, %10c)\n",
+                    uif(dw[0]), uif(dw[1]), 'X', 'X',
+                        dw[0],      dw[1],  'X', 'X');
+         break;
+      case 3:
+         ilo_printf("(%10.4f, %10.4f, %10.4f, %10c) "
+                    "(0x%08x, 0x%08x, 0x%08x, %10c)\n",
+                    uif(dw[0]), uif(dw[1]), uif(dw[2]), 'X',
+                        dw[0],      dw[1],      dw[2],  'X');
+         break;
+      default:
+         ilo_printf("(%10.4f, %10.4f, %10.4f, %10.4f) "
+                    "(0x%08x, 0x%08x, 0x%08x, 0x%08x)\n",
+                    uif(dw[0]), uif(dw[1]), uif(dw[2]), uif(dw[3]),
+                        dw[0],      dw[1],      dw[2],      dw[3]);
+         break;
+      }
 
-      offset += state_size;
+      offset += state_size * 4;
    }
 }