aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno/ir3
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2018-08-29 15:31:13 -0400
committerRob Clark <[email protected]>2018-09-05 13:38:43 -0400
commit2c623e707144e93db08a2ed1bdcd079c911b7029 (patch)
tree1103bdc4824b950b851ec308c367ea08395c6cf8 /src/gallium/drivers/freedreno/ir3
parentca758251bad0e5e002b57a58a9dd39ec63efb274 (diff)
freedreno/ir3: better compile_error() printing
Try to show the error at the appropriate line of nir Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/ir3')
-rw-r--r--src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
index 005e043a63b..21b2a8b6d22 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
@@ -48,6 +48,8 @@ struct ir3_context {
struct nir_shader *s;
+ struct nir_instr *cur_instr; /* current instruction, just for debug */
+
struct ir3 *ir;
struct ir3_shader_variant *so;
@@ -263,11 +265,21 @@ compile_init(struct ir3_compiler *compiler,
static void
compile_error(struct ir3_context *ctx, const char *format, ...)
{
+ struct hash_table *errors = NULL;
va_list ap;
va_start(ap, format);
- _debug_vprintf(format, ap);
+ if (ctx->cur_instr) {
+ errors = _mesa_hash_table_create(NULL,
+ _mesa_hash_pointer,
+ _mesa_key_pointer_equal);
+ char *msg = ralloc_vasprintf(errors, format, ap);
+ _mesa_hash_table_insert(errors, ctx->cur_instr, msg);
+ } else {
+ _debug_vprintf(format, ap);
+ }
va_end(ap);
- nir_print_shader(ctx->s, stdout);
+ nir_print_shader_annotated(ctx->s, stdout, errors);
+ ralloc_free(errors);
ctx->error = true;
debug_assert(0);
}
@@ -2999,7 +3011,9 @@ emit_block(struct ir3_context *ctx, nir_block *nblock)
}
nir_foreach_instr(instr, nblock) {
+ ctx->cur_instr = instr;
emit_instr(ctx, instr);
+ ctx->cur_instr = NULL;
if (ctx->error)
return;
}