iris: print binder utilization in INTEL_DEBUG=submit
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 18 Jun 2018 05:22:03 +0000 (22:22 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:07 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_batch.c
src/gallium/drivers/iris/iris_binder.c
src/gallium/drivers/iris/iris_binder.h
src/gallium/drivers/iris/iris_draw.c

index d552579782fb5d10511283b2be4c91f6ee7300e1..17d32bd9d12061b1419d5e5ff8a01cfe916348dc 100644 (file)
@@ -431,12 +431,14 @@ _iris_batch_flush_fence(struct iris_batch *batch,
 
    if (unlikely(INTEL_DEBUG & (DEBUG_BATCH | DEBUG_SUBMIT))) {
       int bytes_for_commands = batch_bytes_used(batch);
+      int bytes_for_binder = batch->binder.insert_point;
       if (batch->bo != batch->exec_bos[0])
          bytes_for_commands += batch->primary_batch_size;
-      fprintf(stderr, "%19s:%-3d: Batchbuffer flush with %5db (%0.1f%%), "
-              "%4d BOs (%0.1fMb aperture)\n",
+      fprintf(stderr, "%19s:%-3d: Batchbuffer flush with %5db (%0.1f%%) "
+              "(cmds), %5db (%0.1f%%) (binder), %4d BOs (%0.1fMb aperture)\n",
               file, line,
               bytes_for_commands, 100.0f * bytes_for_commands / BATCH_SZ,
+              bytes_for_binder, 100.0f * bytes_for_binder / IRIS_BINDER_SIZE,
               batch->exec_count,
               (float) batch->aperture_space / (1024 * 1024));
       dump_validation_list(batch);
index 02b0fab50d0afc897a08113d26e8a3ba1515c4e8..2f5318ed7fd8aed035bdda4c72499225175de166 100644 (file)
@@ -27,9 +27,6 @@
 #include "iris_bufmgr.h"
 #include "iris_context.h"
 
-/* 64kb */
-#define BINDER_SIZE (64 * 1024)
-
 /**
  * Reserve a block of space in the binder.
  */
@@ -44,13 +41,13 @@ iris_binder_reserve(struct iris_batch *batch, unsigned size)
    /* If we can't fit all stages in the binder, flush the batch which
     * will cause us to gain a new empty binder.
     */
-   if (binder->insert_point + size > BINDER_SIZE)
+   if (binder->insert_point + size > IRIS_BINDER_SIZE)
       iris_batch_flush(batch);
 
    uint32_t offset = binder->insert_point;
 
    /* It had better fit now. */
-   assert(offset + size <= BINDER_SIZE);
+   assert(offset + size <= IRIS_BINDER_SIZE);
 
    binder->insert_point = align(binder->insert_point + size, 64);
 
@@ -97,7 +94,7 @@ void
 iris_init_binder(struct iris_binder *binder, struct iris_bufmgr *bufmgr)
 {
    binder->bo =
-      iris_bo_alloc(bufmgr, "binder", BINDER_SIZE, IRIS_MEMZONE_BINDER);
+      iris_bo_alloc(bufmgr, "binder", IRIS_BINDER_SIZE, IRIS_MEMZONE_BINDER);
    binder->map = iris_bo_map(NULL, binder->bo, MAP_WRITE);
    binder->insert_point = INIT_INSERT_POINT;
 }
index dbb010693f50e3748b2174c4b05e1a387fd87b54..bae548b9d73fcf3253940c0fdf6f086a94835254 100644 (file)
@@ -33,6 +33,8 @@ struct iris_batch;
 struct iris_bufmgr;
 struct iris_compiled_shader;
 
+#define IRIS_BINDER_SIZE (64 * 1024)
+
 struct iris_binder
 {
    struct iris_bo *bo;
index 8fc080b013c3bf471beb022d29a7e8475bc7ec77..218a3076699dea7ce3209aaa18dcd3a8bf2bf68b 100644 (file)
@@ -63,6 +63,7 @@ iris_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
                           IRIS_DIRTY_BINDINGS_FS;
    }
 
+   // XXX: don't do this unless things are dirty...
    iris_binder_reserve_3d(batch, ice->shaders.prog);
    ice->vtbl.upload_render_state(ice, batch, info);