pan/decode: Express tiler structures as offsets
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 19 Aug 2019 17:38:25 +0000 (10:38 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 21 Aug 2019 15:40:52 +0000 (08:40 -0700)
This allows us to catch a class of errors (for negative offsets, etc)
automatically.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/panfrost/pandecode/decode.c

index 25fd261b6e21343db09c05741d7d0f616ef50a6b..782ad2991fc22fec5134242d5f099d400b2f235e 100644 (file)
@@ -486,19 +486,21 @@ pandecode_midgard_tiler_descriptor(const struct midgard_tiler_descriptor *t)
         pandecode_prop("polygon_list_size = 0x%x", t->polygon_list_size);
 
         MEMORY_PROP(t, polygon_list);
-        MEMORY_PROP(t, polygon_list_body);
 
-        MEMORY_PROP(t, heap_start);
+        /* The body is offset from the base of the polygon list */
+        assert(t->polygon_list_body > t->polygon_list);
+        unsigned body_offset = t->polygon_list_body - t->polygon_list;
 
-        if (t->heap_start == t->heap_end) {
-              /* Print identically to show symmetry for empty tiler heaps */  
-                MEMORY_PROP(t, heap_end);
-        } else {
-                /* Points to the end of a buffer */
-                char *a = pointer_as_memory_reference(t->heap_end - 1);
-                pandecode_prop("heap_end = %s + 1", a);
-                free(a);
-        }
+        /* It needs to fit inside the reported size */
+        assert(t->polygon_list_size >= body_offset);
+
+        /* TODO: Check BO size */
+        pandecode_msg("body offset %d\n", body_offset);
+
+        /* The tiler heap has a start and end specified. TODO: Check size */
+        MEMORY_PROP(t, heap_start);
+        assert(t->heap_end >= t->heap_start);
+        pandecode_msg("heap size %d\n", t->heap_end - t->heap_start);
 
         bool nonzero_weights = false;