[Mesa-dev] [PATCH v3 1/6] spirv: Add a mechanism for dumping failing shaders
Jason Ekstrand
jason at jlekstrand.net
Mon Jan 8 16:38:18 UTC 2018
There's a v3 of this
On Mon, Jan 8, 2018 at 8:36 AM, Lionel Landwerlin <
lionel.g.landwerlin at intel.com> wrote:
> This series is :
>
> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at 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;
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180108/6d97b458/attachment-0001.html>
More information about the mesa-dev
mailing list