From efb1880b4a9aa3e38fd7ad4941b35c852e10d5be Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Mon, 8 Jun 2020 10:13:22 +0200 Subject: [PATCH] v3dv: fix BCL start offset in presence of chained BOs If a job's BCL spans multiple BOs we should take the start offset of the BCL from the first BO in the list. Part-of: --- src/broadcom/vulkan/v3dv_queue.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/broadcom/vulkan/v3dv_queue.c b/src/broadcom/vulkan/v3dv_queue.c index a668f56570e..1d421329ef3 100644 --- a/src/broadcom/vulkan/v3dv_queue.c +++ b/src/broadcom/vulkan/v3dv_queue.c @@ -457,7 +457,14 @@ handle_cl_job(struct v3dv_queue *queue, struct drm_v3d_submit_cl submit; - submit.bcl_start = job->bcl.bo->offset; + /* We expect to have just one RCL per job which should fit in just one BO. + * Our BCL, could chain multiple BOS together though. + */ + assert(list_length(&job->rcl.bo_list) == 1); + assert(list_length(&job->bcl.bo_list) >= 1); + struct v3dv_bo *bcl_fist_bo = + list_first_entry(&job->bcl.bo_list, struct v3dv_bo, list_link); + submit.bcl_start = bcl_fist_bo->offset; submit.bcl_end = job->bcl.bo->offset + v3dv_cl_offset(&job->bcl); submit.rcl_start = job->rcl.bo->offset; submit.rcl_end = job->rcl.bo->offset + v3dv_cl_offset(&job->rcl);