From 03c2c0f0c4e0519cf19b25ffc05d3f0c50ec7912 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 19 Feb 2021 09:39:07 -0500 Subject: [PATCH] panfrost: Fix NULL dereference adding cbuf to batch Signed-off-by: Alyssa Rosenzweig Reviewed-by: Boris Brezillon Part-of: --- src/gallium/drivers/panfrost/pan_job.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index f469c389f5d..cb1a2078f8a 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -569,22 +569,27 @@ panfrost_batch_add_resource_bos(struct panfrost_batch *batch, panfrost_batch_add_bo(batch, rsrc->separate_stencil->bo, flags); } +/* Adds the BO backing surface to a batch if the surface is non-null */ + static void -panfrost_batch_add_fbo_bos(struct panfrost_batch *batch) +panfrost_batch_add_surface(struct panfrost_batch *batch, struct pipe_surface *surf) { uint32_t flags = PAN_BO_ACCESS_SHARED | PAN_BO_ACCESS_WRITE | PAN_BO_ACCESS_VERTEX_TILER | PAN_BO_ACCESS_FRAGMENT; - - for (unsigned i = 0; i < batch->key.nr_cbufs; ++i) { - struct panfrost_resource *rsrc = pan_resource(batch->key.cbufs[i]->texture); + if (surf) { + struct panfrost_resource *rsrc = pan_resource(surf->texture); panfrost_batch_add_resource_bos(batch, rsrc, flags); } - if (batch->key.zsbuf) { - struct panfrost_resource *rsrc = pan_resource(batch->key.zsbuf->texture); - panfrost_batch_add_resource_bos(batch, rsrc, flags); - } +} +static void +panfrost_batch_add_fbo_bos(struct panfrost_batch *batch) +{ + for (unsigned i = 0; i < batch->key.nr_cbufs; ++i) + panfrost_batch_add_surface(batch, batch->key.cbufs[i]); + + panfrost_batch_add_surface(batch, batch->key.zsbuf); } struct panfrost_bo *