There's a v3 of this On Mon, Jan 8, 2018 at 8:36 AM, Lionel Landwerlin < lionel.g.landwer...@intel.com> wrote:
> 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