panfrost: Add polygon_list to the batch BO set at allocation time
authorBoris Brezillon <boris.brezillon@collabora.com>
Sat, 14 Sep 2019 16:15:26 +0000 (18:15 +0200)
committerBoris Brezillon <boris.brezillon@collabora.com>
Wed, 18 Sep 2019 08:27:30 +0000 (10:27 +0200)
That's what we do for other per-batch BOs, and we'll soon add an helper
to automate this create_bo()+add_bo()+bo_unreference() sequence, so
let's prepare the code to ease this transition.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/pan_drm.c
src/gallium/drivers/panfrost/pan_job.c

index ada6221850c083074d6dd4923b249676426e1f47..b77af714d1177f5c70476cbe6921dd9b7a237dfd 100644 (file)
@@ -278,7 +278,6 @@ panfrost_drm_submit_vs_fs_batch(struct panfrost_batch *batch, bool has_draws)
 
         panfrost_batch_add_bo(batch, ctx->scratchpad);
         panfrost_batch_add_bo(batch, ctx->tiler_heap);
-        panfrost_batch_add_bo(batch, batch->polygon_list);
 
         if (batch->first_job.gpu) {
                 ret = panfrost_drm_submit_batch(batch, batch->first_job.gpu, 0);
index 03119e6438468cea255835d740673f112c14807a..e06440010aebcb2937848753064e8b3787e1da98 100644 (file)
@@ -67,9 +67,6 @@ panfrost_free_batch(struct panfrost_batch *batch)
                 panfrost_bo_unreference(ctx->base.screen, bo);
         }
 
-        /* Unreference the polygon list */
-        panfrost_bo_unreference(ctx->base.screen, batch->polygon_list);
-
         _mesa_hash_table_remove_key(ctx->batches, &batch->key);
 
         if (ctx->batch == batch)
@@ -158,6 +155,13 @@ panfrost_batch_get_polygon_list(struct panfrost_batch *batch, unsigned size)
 
                 batch->polygon_list = panfrost_drm_create_bo(screen,
                                 size, PAN_ALLOCATE_INVISIBLE);
+                panfrost_batch_add_bo(batch, batch->polygon_list);
+
+                /* A BO reference has been retained by panfrost_batch_add_bo(),
+                 * so we need to unreference it here if we want the BO to be
+                 * automatically released when the batch is destroyed.
+                 */
+                panfrost_bo_unreference(&screen->base, batch->polygon_list);
         }
 
         return batch->polygon_list->gpu;