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

Author: Emma Anholt <[email protected]>
Date:   Mon Apr 18 10:10:10 2022 -0700

turnip: Add a TU_DEBUG=perf debug option.

For doing performance investigation, I often find it useful to have a "are
we tripping over any of our performance TODOs?" flag, so add it and use it
in a few of the TODOs.

This also greatly cleans up the deqp-vk logs.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16316>

---

 src/freedreno/vulkan/tu_clear_blit.c | 5 ++++-
 src/freedreno/vulkan/tu_cmd_buffer.c | 9 ++++++---
 src/freedreno/vulkan/tu_device.c     | 1 +
 src/freedreno/vulkan/tu_pass.c       | 4 +++-
 src/freedreno/vulkan/tu_private.h    | 1 +
 src/freedreno/vulkan/tu_util.h       | 5 +++++
 6 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/freedreno/vulkan/tu_clear_blit.c 
b/src/freedreno/vulkan/tu_clear_blit.c
index db7cdcd9eb0..44a7fe8fff6 100644
--- a/src/freedreno/vulkan/tu_clear_blit.c
+++ b/src/freedreno/vulkan/tu_clear_blit.c
@@ -1794,6 +1794,7 @@ tu_copy_image_to_image(struct tu_cmd_buffer *cmd,
       /* Both formats use UBWC and so neither can be reinterpreted.
        * TODO: We could do an in-place decompression of the dst instead.
        */
+      perf_debug(cmd->device, "TODO: Do in-place UBWC decompression for 
UBWC->UBWC blits");
       use_staging_blit = true;
    }
 
@@ -2534,7 +2535,9 @@ tu_clear_gmem_attachments(struct tu_cmd_buffer *cmd,
    const struct tu_subpass *subpass = cmd->state.subpass;
    struct tu_cs *cs = &cmd->draw_cs;
 
-   /* TODO: swap the loops for smaller cmdstream */
+   if (rect_count > 1)
+      perf_debug(cmd->device, "TODO: Swap tu_clear_gmem_attachments() loop for 
smaller command stream");
+
    for (unsigned i = 0; i < rect_count; i++) {
       unsigned x1 = rects[i].rect.offset.x;
       unsigned y1 = rects[i].rect.offset.y;
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c 
b/src/freedreno/vulkan/tu_cmd_buffer.c
index c82a1a36228..cce271a0205 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -3476,11 +3476,10 @@ tu_CmdNextSubpass2(VkCommandBuffer commandBuffer,
          if (pass->attachments[a].gmem_offset < 0)
             continue;
 
-         /* TODO:
-          * check if the resolved attachment is needed by later subpasses,
+         /* check if the resolved attachment is needed by later subpasses,
           * if it is, should be doing a GMEM->GMEM resolve instead of 
GMEM->MEM->GMEM..
           */
-         tu_finishme("missing GMEM->GMEM resolve path\n");
+         perf_debug(cmd->device, "TODO: missing GMEM->GMEM resolve path\n");
          tu_load_gmem_attachment(cmd, cs, a, false, true);
       }
    }
@@ -3711,8 +3710,10 @@ tu6_calculate_lrz_state(struct tu_cmd_buffer *cmd,
        * so if there is a depth write - LRZ must be disabled.
        */
       if (z_write_enable) {
+         perf_debug(cmd->device, "Invalidating LRZ due to ALWAYS/NOT_EQUAL");
          disable_lrz = true;
       } else {
+         perf_debug(cmd->device, "Skipping LRZ due to ALWAYS/NOT_EQUAL");
          temporary_disable_lrz = true;
       }
       break;
@@ -3750,8 +3751,10 @@ tu6_calculate_lrz_state(struct tu_cmd_buffer *cmd,
        lrz_direction != TU_LRZ_UNKNOWN &&
        cmd->state.lrz.prev_direction != lrz_direction) {
       if (z_write_enable) {
+         perf_debug(cmd->device, "Invalidating LRZ due to direction change");
          disable_lrz = true;
       } else {
+         perf_debug(cmd->device, "Skipping LRZ due to direction change");
          temporary_disable_lrz = true;
       }
    }
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index ae447f620a0..4f4a30b128e 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -335,6 +335,7 @@ static const struct debug_control tu_debug_options[] = {
    { "noubwc", TU_DEBUG_NOUBWC },
    { "nomultipos", TU_DEBUG_NOMULTIPOS },
    { "nolrz", TU_DEBUG_NOLRZ },
+   { "perf", TU_DEBUG_PERF },
    { "perfc", TU_DEBUG_PERFC },
    { "flushall", TU_DEBUG_FLUSHALL },
    { "syncdraw", TU_DEBUG_SYNCDRAW },
diff --git a/src/freedreno/vulkan/tu_pass.c b/src/freedreno/vulkan/tu_pass.c
index 64d9de2676f..93ae39422a5 100644
--- a/src/freedreno/vulkan/tu_pass.c
+++ b/src/freedreno/vulkan/tu_pass.c
@@ -96,8 +96,10 @@ tu_render_pass_add_subpass_dep(struct tu_render_pass *pass,
    if (src == dst)
       return;
 
-   if (dep_invalid_for_gmem(dep))
+   if (dep_invalid_for_gmem(dep)) {
+      perf_debug((struct tu_device *)pass->base.device, "Disabling gmem 
rendering due to invalid subpass dependency");
       pass->gmem_pixels = 0;
+   }
 
    struct tu_subpass_barrier *dst_barrier;
    if (dst == VK_SUBPASS_EXTERNAL) {
diff --git a/src/freedreno/vulkan/tu_private.h 
b/src/freedreno/vulkan/tu_private.h
index 643040929c9..98bab9cd5ed 100644
--- a/src/freedreno/vulkan/tu_private.h
+++ b/src/freedreno/vulkan/tu_private.h
@@ -270,6 +270,7 @@ enum tu_debug_flags
    TU_DEBUG_UNALIGNED_STORE = 1 << 15,
    TU_DEBUG_LAYOUT = 1 << 16,
    TU_DEBUG_LOG_SKIP_GMEM_OPS = 1 << 17,
+   TU_DEBUG_PERF = 1 << 18,
 };
 
 struct tu_instance
diff --git a/src/freedreno/vulkan/tu_util.h b/src/freedreno/vulkan/tu_util.h
index 03d31f0c6c6..eb62c0be74c 100644
--- a/src/freedreno/vulkan/tu_util.h
+++ b/src/freedreno/vulkan/tu_util.h
@@ -329,4 +329,9 @@ tu6_pack_border_color(struct bcolor_entry *bcolor, const 
VkClearColorValue *val,
 void
 tu_dbg_log_gmem_load_store_skips(struct tu_device *device);
 
+#define perf_debug(device, fmt, ...) do {                               \
+   if (unlikely((device)->instance->debug_flags & TU_DEBUG_PERF))       \
+      mesa_log(MESA_LOG_WARN, (MESA_LOG_TAG), (fmt), ##__VA_ARGS__);    \
+} while(0)
+
 #endif /* TU_UTIL_H */

Reply via email to