This series is :

Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com>

On 04/01/18 01:34, Jason Ekstrand wrote:
---
  src/compiler/spirv/spirv_to_nir.c | 28 ++++++++++++++++++++++++++++
  src/compiler/spirv/vtn_private.h  |  1 +
  2 files changed, 29 insertions(+)

diff --git a/src/compiler/spirv/spirv_to_nir.c 
b/src/compiler/spirv/spirv_to_nir.c
index dcff56f..66ea267 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -31,6 +31,8 @@
  #include "nir/nir_constant_expressions.h"
  #include "spirv_info.h"
+#include <stdio.h>
+
  void
  vtn_log(struct vtn_builder *b, enum nir_spirv_debug_level level,
          size_t spirv_offset, const char *message)
@@ -94,6 +96,27 @@ vtn_log_err(struct vtn_builder *b,
     ralloc_free(msg);
  }
+static void
+vtn_dump_shader(struct vtn_builder *b, const char *path, const char *prefix)
+{
+   static int idx = 0;
+
+   char filename[1024];
+   int len = snprintf(filename, sizeof(filename), "%s/%s-%d.spirv",
+                      path, prefix, idx++);
+   if (len < 0 || len >= sizeof(filename))
+      return;
+
+   FILE *f = fopen(filename, "w");
+   if (f == NULL)
+      return;
+
+   fwrite(b->spirv, sizeof(*b->spirv), b->spirv_word_count, f);
+   fclose(f);
+
+   vtn_info("SPIR-V shader dumped to %s", filename);
+}
+
  void
  _vtn_warn(struct vtn_builder *b, const char *file, unsigned line,
            const char *fmt, ...)
@@ -117,6 +140,10 @@ _vtn_fail(struct vtn_builder *b, const char *file, 
unsigned line,
                 file, line, fmt, args);
     va_end(args);
+ const char *dump_path = getenv("MESA_SPIRV_FAIL_DUMP_PATH");
+   if (dump_path)
+      vtn_dump_shader(b, dump_path, "fail");
+
     longjmp(b->fail_jump, 1);
  }
@@ -3690,6 +3717,7 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
     /* Initialize the stn_builder object */
     struct vtn_builder *b = rzalloc(NULL, struct vtn_builder);
     b->spirv = words;
+   b->spirv_word_count = word_count;
     b->file = NULL;
     b->line = -1;
     b->col = -1;
diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h
index f7d8f49..374643a 100644
--- a/src/compiler/spirv/vtn_private.h
+++ b/src/compiler/spirv/vtn_private.h
@@ -531,6 +531,7 @@ struct vtn_builder {
     jmp_buf fail_jump;
const uint32_t *spirv;
+   size_t spirv_word_count;
nir_shader *shader;
     const struct spirv_to_nir_options *options;


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to