Reviewed-by: Alejandro Piñeiro <apinhe...@igalia.com> On 02/01/18 17:30, Jason Ekstrand wrote: > --- > src/compiler/spirv/spirv_to_nir.c | 29 +++++++++++++++++++++++++++++ > src/compiler/spirv/vtn_private.h | 1 + > 2 files changed, 30 insertions(+) > > diff --git a/src/compiler/spirv/spirv_to_nir.c > b/src/compiler/spirv/spirv_to_nir.c > index dcff56f..751fb03 100644 > --- a/src/compiler/spirv/spirv_to_nir.c > +++ b/src/compiler/spirv/spirv_to_nir.c > @@ -31,6 +31,9 @@ > #include "nir/nir_constant_expressions.h" > #include "spirv_info.h" > > +#include <fcntl.h> > +#include <unistd.h> > + > void > vtn_log(struct vtn_builder *b, enum nir_spirv_debug_level level, > size_t spirv_offset, const char *message) > @@ -94,6 +97,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; > + > + int fd = open(filename, O_CREAT | O_CLOEXEC | O_WRONLY, 0777); > + if (fd < 0) > + return; > + > + write(fd, b->spirv, b->spirv_word_count * 4); > + close(fd); > + > + 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 +141,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 +3718,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