From c5f39acb33e3eaf2b9eaa79b068fb3b6b40025cf Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Mon, 18 Oct 2021 00:40:54 -0400 Subject: winsys/amdgpu: set max_ib_size and max_check_space_size later in cs_check_space If there is enough CS space, don't update them. This eliminates some overhead. Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/gallium/winsys/amdgpu/drm/amdgpu_cs.c') diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index a60c1225b14..141f6f6c336 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -1074,26 +1074,25 @@ static bool amdgpu_cs_check_space(struct radeon_cmdbuf *rcs, unsigned dw) { struct amdgpu_cs *cs = amdgpu_cs(rcs); struct amdgpu_ib *ib = &cs->main; - unsigned cs_epilog_dw = amdgpu_cs_epilog_dws(cs); - unsigned need_byte_size = (dw + cs_epilog_dw) * 4; assert(rcs->current.cdw <= rcs->current.max_dw); /* 125% of the size for IB epilog. */ - unsigned safe_byte_size = need_byte_size + need_byte_size / 4; - ib->max_check_space_size = MAX2(ib->max_check_space_size, - safe_byte_size); - unsigned requested_size = rcs->prev_dw + rcs->current.cdw + dw; if (requested_size > IB_MAX_SUBMIT_DWORDS) return false; - ib->max_ib_size = MAX2(ib->max_ib_size, requested_size); - if (rcs->current.max_dw - rcs->current.cdw >= dw) return true; + unsigned cs_epilog_dw = amdgpu_cs_epilog_dws(cs); + unsigned need_byte_size = (dw + cs_epilog_dw) * 4; + unsigned safe_byte_size = need_byte_size + need_byte_size / 4; + ib->max_check_space_size = MAX2(ib->max_check_space_size, + safe_byte_size); + ib->max_ib_size = MAX2(ib->max_ib_size, requested_size); + if (!cs->has_chaining) return false; -- cgit v1.2.3