summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2021-10-18 00:40:54 -0400
committerMarge Bot <eric+marge@anholt.net>2021-10-19 16:53:30 +0000
commitc5f39acb33e3eaf2b9eaa79b068fb3b6b40025cf (patch)
treea12090ec8e1518a600c494b3e9bfb061e9259217 /src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
parent6129db68bf81ac72e72e3e39e574fe8f227d0f0b (diff)
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 <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13400>
Diffstat (limited to 'src/gallium/winsys/amdgpu/drm/amdgpu_cs.c')
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_cs.c15
1 files changed, 7 insertions, 8 deletions
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;