Mesa (main): i915g: Enable dumping of fragment shaders under I915_DEBUG=fs.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 28 22:17:31 UTC 2021


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

Author: Emma Anholt <emma at anholt.net>
Date:   Sun Jun 27 13:47:51 2021 -0700

i915g: Enable dumping of fragment shaders under I915_DEBUG=fs.

Probably the most common thing I want to debug in this driver, and we
didn't have a good option for it.

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

---

 src/gallium/drivers/i915/i915_debug.c         |  1 +
 src/gallium/drivers/i915/i915_debug.h         |  1 +
 src/gallium/drivers/i915/i915_debug_fp.c      |  1 -
 src/gallium/drivers/i915/i915_fpc_translate.c | 27 ++++++++++++++++++++-------
 4 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_debug.c b/src/gallium/drivers/i915/i915_debug.c
index e2d271e0480..47d0f3cf55f 100644
--- a/src/gallium/drivers/i915/i915_debug.c
+++ b/src/gallium/drivers/i915/i915_debug.c
@@ -42,6 +42,7 @@ static const struct debug_named_value i915_debug_options[] = {
    {"flush", DBG_FLUSH, "Flushing information"},
    {"texture", DBG_TEXTURE, "Texture information"},
    {"constants", DBG_CONSTANTS, "Constant buffers"},
+   {"fs", DBG_FS, "Dump fragment shaders"},
    DEBUG_NAMED_VALUE_END};
 
 unsigned i915_debug = 0;
diff --git a/src/gallium/drivers/i915/i915_debug.h b/src/gallium/drivers/i915/i915_debug.h
index 30b0f9c979a..8195832aed7 100644
--- a/src/gallium/drivers/i915/i915_debug.h
+++ b/src/gallium/drivers/i915/i915_debug.h
@@ -44,6 +44,7 @@ struct i915_winsys_batchbuffer;
 #define DBG_FLUSH     0x8
 #define DBG_TEXTURE   0x10
 #define DBG_CONSTANTS 0x20
+#define DBG_FS        0x40
 
 extern unsigned i915_debug;
 
diff --git a/src/gallium/drivers/i915/i915_debug_fp.c b/src/gallium/drivers/i915/i915_debug_fp.c
index 628db703cbc..fcada721390 100644
--- a/src/gallium/drivers/i915/i915_debug_fp.c
+++ b/src/gallium/drivers/i915/i915_debug_fp.c
@@ -277,5 +277,4 @@ i915_disassemble_program(const unsigned *program, unsigned sz)
    }
 
    mesa_logi("\t\tEND");
-   mesa_logi("\t\t");
 }
diff --git a/src/gallium/drivers/i915/i915_fpc_translate.c b/src/gallium/drivers/i915/i915_fpc_translate.c
index 1fc5ab1786f..5bfbbc88b26 100644
--- a/src/gallium/drivers/i915/i915_fpc_translate.c
+++ b/src/gallium/drivers/i915/i915_fpc_translate.c
@@ -28,6 +28,7 @@
 #include <stdarg.h>
 
 #include "i915_context.h"
+#include "i915_debug.h"
 #include "i915_debug_private.h"
 #include "i915_fpc.h"
 #include "i915_reg.h"
@@ -35,6 +36,7 @@
 #include "pipe/p_shader_tokens.h"
 #include "tgsi/tgsi_dump.h"
 #include "tgsi/tgsi_parse.h"
+#include "util/log.h"
 #include "util/u_math.h"
 #include "util/u_memory.h"
 #include "util/u_string.h"
@@ -1046,9 +1048,10 @@ i915_translate_fragment_program(struct i915_context *i915,
    const struct tgsi_token *tokens = fs->state.tokens;
    struct i915_token_list *i_tokens;
 
-#if 0
-   tgsi_dump(tokens, 0);
-#endif
+   if (I915_DBG_ON(DBG_FS)) {
+      mesa_logi("TGSI fragment shader:");
+      tgsi_dump(tokens, 0);
+   }
 
    /* hw doesn't seem to like empty frag programs, even when the depth write
     * fixup gets emitted below - may that one is fishy, too? */
@@ -1067,8 +1070,18 @@ i915_translate_fragment_program(struct i915_context *i915,
    i915_fini_compile(i915, p);
    i915_optimize_free(i_tokens);
 
-#if 0
-   /* XXX: The disasm wants the concatenation of the decl and program. */
-   i915_disassemble_program(fs->program, fs->program_len);
-#endif
+   if (I915_DBG_ON(DBG_FS)) {
+      mesa_logi("i915 fragment shader with %d constants%s", fs->num_constants,
+                fs->num_constants ? ":" : "");
+
+      for (int i = 0; i < I915_MAX_CONSTANT; i++) {
+         if (fs->constant_flags[i] &&
+             fs->constant_flags[i] != I915_CONSTFLAG_USER) {
+            mesa_logi("\t\tC[%d] = { %f, %f, %f, %f }", i, fs->constants[i][0],
+                      fs->constants[i][1], fs->constants[i][2],
+                      fs->constants[i][3]);
+         }
+      }
+      i915_disassemble_program(fs->program, fs->program_len);
+   }
 }



More information about the mesa-commit mailing list