Mesa (main): winsys/amdgpu: set max_ib_size and max_check_space_size later in cs_check_space

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Oct 19 17:44:52 UTC 2021


Module: Mesa
Branch: main
Commit: c5f39acb33e3eaf2b9eaa79b068fb3b6b40025cf
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c5f39acb33e3eaf2b9eaa79b068fb3b6b40025cf

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Mon Oct 18 00:40:54 2021 -0400

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 at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13400>

---

 src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 15 +++++++--------
 1 file 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;
 



More information about the mesa-commit mailing list