diff --git a/src/broadcom/vulkan/v3dv_bo.c b/src/broadcom/vulkan/v3dv_bo.c index 594401edd82..1b26abec325 100644 --- a/src/broadcom/vulkan/v3dv_bo.c +++ b/src/broadcom/vulkan/v3dv_bo.c @@ -206,6 +206,7 @@ v3dv_bo_init(struct v3dv_bo *bo, bo->private = private; bo->dumb_handle = -1; bo->is_import = false; + bo->cl_branch_offset = 0xffffffff; list_inithead(&bo->list_link); } diff --git a/src/broadcom/vulkan/v3dv_bo.h b/src/broadcom/vulkan/v3dv_bo.h index d7a48234677..5e382817b37 100644 --- a/src/broadcom/vulkan/v3dv_bo.h +++ b/src/broadcom/vulkan/v3dv_bo.h @@ -39,6 +39,11 @@ struct v3dv_bo { const char *name; + /* In a CL where a BRANCH has been emitted, the offset of the BRANCH + * instruction in the BO. + */ + uint32_t cl_branch_offset; + /** Entry in the linked list of buffers freed, by age. */ struct list_head time_list; /** Entry in the per-page-count linked list of buffers freed (by age). */ diff --git a/src/broadcom/vulkan/v3dv_cl.c b/src/broadcom/vulkan/v3dv_cl.c index 9d750531772..7d414999e9b 100644 --- a/src/broadcom/vulkan/v3dv_cl.c +++ b/src/broadcom/vulkan/v3dv_cl.c @@ -84,6 +84,7 @@ cl_alloc_bo(struct v3dv_cl *cl, uint32_t space, bool use_branch) /* Chain to the new BO from the old one if requested */ if (use_branch && cl->bo) { + cl->bo->cl_branch_offset = v3dv_cl_offset(cl); cl_emit(cl, BRANCH, branch) { branch.address = v3dv_cl_address(bo, 0); }