diff --git a/src/broadcom/vulkan/v3dv_cl.c b/src/broadcom/vulkan/v3dv_cl.c index e9674b6c50f..c36cb6a7e19 100644 --- a/src/broadcom/vulkan/v3dv_cl.c +++ b/src/broadcom/vulkan/v3dv_cl.c @@ -72,10 +72,10 @@ cl_alloc_bo(struct v3dv_cl *cl, uint32_t space, bool use_branch) cl_emit(cl, BRANCH, branch) { branch.address = v3dv_cl_address(bo, 0); } + } else { + v3dv_job_add_bo_unchecked(cl->job, bo); } - v3dv_job_add_bo(cl->job, bo); - cl->bo = bo; cl->base = cl->bo->map; cl->size = cl->bo->size; diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index 6cb9de28a37..a4ace79257c 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -72,6 +72,14 @@ v3dv_job_add_bo(struct v3dv_job *job, struct v3dv_bo *bo) job->bo_count++; } +void +v3dv_job_add_bo_unchecked(struct v3dv_job *job, struct v3dv_bo *bo) +{ + assert(bo); + _mesa_set_add(job->bos, bo); + job->bo_count++; +} + static void cmd_buffer_emit_render_pass_rcl(struct v3dv_cmd_buffer *cmd_buffer); @@ -561,7 +569,7 @@ v3dv_job_start_frame(struct v3dv_job *job, return; } - v3dv_job_add_bo(job, job->tile_alloc); + v3dv_job_add_bo_unchecked(job, job->tile_alloc); const uint32_t tsda_per_tile_size = 256; const uint32_t tile_state_size = tiling->layers * @@ -574,7 +582,7 @@ v3dv_job_start_frame(struct v3dv_job *job, return; } - v3dv_job_add_bo(job, job->tile_state); + v3dv_job_add_bo_unchecked(job, job->tile_state); /* This must go before the binning mode configuration. It is * required for layered framebuffers to work. @@ -5302,7 +5310,7 @@ cmd_buffer_create_csd_job(struct v3dv_cmd_buffer *cmd_buffer, } } - v3dv_job_add_bo(job, cs_assembly_bo); + v3dv_job_add_bo_unchecked(job, cs_assembly_bo); struct v3dv_cl_reloc uniforms = v3dv_write_uniforms_wg_offsets(cmd_buffer, pipeline, cs_variant, diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 36ecba13055..67cbc244d60 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -998,7 +998,10 @@ void v3dv_job_init(struct v3dv_job *job, struct v3dv_cmd_buffer *cmd_buffer, int32_t subpass_idx); void v3dv_job_destroy(struct v3dv_job *job); + void v3dv_job_add_bo(struct v3dv_job *job, struct v3dv_bo *bo); +void v3dv_job_add_bo_unchecked(struct v3dv_job *job, struct v3dv_bo *bo); + void v3dv_job_emit_binning_flush(struct v3dv_job *job); void v3dv_job_start_frame(struct v3dv_job *job, uint32_t width,