[Mesa-dev] [PATCH 04/13] winsys/amdgpu: Enlarge const IB size.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Thu Apr 14 01:34:54 UTC 2016


Necessary to prevent performance regressions due to extra flushing.

Probably should enlarge it even further when also updating
uniforms through the CE, but this seems large enough for now.

Signed-off-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
---
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
index b0c80c6..3ea0f3d 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
@@ -199,14 +199,19 @@ amdgpu_ctx_query_reset_status(struct radeon_winsys_ctx *rwctx)
 /* COMMAND SUBMISSION */
 
 static bool amdgpu_get_new_ib(struct radeon_winsys *ws, struct amdgpu_ib *ib,
-                              struct amdgpu_cs_ib_info *info)
+                              struct amdgpu_cs_ib_info *info, unsigned ib_type)
 {
    /* Small IBs are better than big IBs, because the GPU goes idle quicker
     * and there is less waiting for buffers and fences. Proof:
     *   http://www.phoronix.com/scan.php?page=article&item=mesa-111-si&num=1
     */
-   const unsigned buffer_size = 128 * 1024 * 4;
-   const unsigned ib_size = 20 * 1024 * 4;
+   unsigned buffer_size = 128 * 1024 * 4;
+   unsigned ib_size = 20 * 1024 * 4;
+
+   if (ib_type == IB_CONST) {
+      buffer_size = 512 * 1024 * 4;
+      ib_size = 128 * 1024 * 4;
+   }
 
    ib->base.cdw = 0;
    ib->base.buf = NULL;
@@ -350,7 +355,7 @@ amdgpu_cs_create(struct radeon_winsys_ctx *rwctx,
       return NULL;
    }
 
-   if (!amdgpu_get_new_ib(&ctx->ws->base, &cs->main, &cs->ib[IB_MAIN])) {
+   if (!amdgpu_get_new_ib(&ctx->ws->base, &cs->main, &cs->ib[IB_MAIN], IB_MAIN)) {
       amdgpu_destroy_cs_context(cs);
       FREE(cs);
       return NULL;
@@ -373,7 +378,7 @@ amdgpu_cs_add_const_ib(struct radeon_winsys_cs *rcs)
    if (cs->ring_type != RING_GFX || cs->const_ib.ib_mapped)
       return NULL;
 
-   if (!amdgpu_get_new_ib(&ws->base, &cs->const_ib, &cs->ib[IB_CONST]))
+   if (!amdgpu_get_new_ib(&ws->base, &cs->const_ib, &cs->ib[IB_CONST], IB_CONST))
       return NULL;
 
    cs->request.number_of_ibs = 2;
@@ -725,9 +730,9 @@ static void amdgpu_cs_flush(struct radeon_winsys_cs *rcs,
 cleanup:
    amdgpu_cs_context_cleanup(cs);
 
-   amdgpu_get_new_ib(&ws->base, &cs->main, &cs->ib[IB_MAIN]);
+   amdgpu_get_new_ib(&ws->base, &cs->main, &cs->ib[IB_MAIN], IB_MAIN);
    if (cs->const_ib.ib_mapped)
-      amdgpu_get_new_ib(&ws->base, &cs->const_ib, &cs->ib[IB_CONST]);
+      amdgpu_get_new_ib(&ws->base, &cs->const_ib, &cs->ib[IB_CONST], IB_CONST);
 
    ws->num_cs_flushes++;
 }
-- 
2.8.0



More information about the mesa-dev mailing list