On Wed, Jul 13, 2016 at 11:32 AM, Grazvydas Ignotas <nota...@gmail.com> wrote: > On Tue, Jul 12, 2016 at 11:52 PM, Marek Olšák <mar...@gmail.com> wrote: >> From: Marek Olšák <marek.ol...@amd.com> >> >> This patch may be dropped depending on feedback. >> >> Cc: 12.0 <mesa-sta...@lists.freedesktop.org> >> --- >> src/gallium/drivers/radeonsi/si_shader.c | 33 >> ++++++++++++++++++++++++++++++++ >> 1 file changed, 33 insertions(+) >> >> diff --git a/src/gallium/drivers/radeonsi/si_shader.c >> b/src/gallium/drivers/radeonsi/si_shader.c >> index 79c3496..81d071e 100644 >> --- a/src/gallium/drivers/radeonsi/si_shader.c >> +++ b/src/gallium/drivers/radeonsi/si_shader.c >> @@ -6705,6 +6705,39 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, >> >> radeon_llvm_dispose(&ctx.radeon_bld); >> >> + /* Validate SGPR and VGPR usage for compute to detect compiler bugs. >> */ >> + if (sel->type == PIPE_SHADER_COMPUTE) { >> + unsigned *props = sel->info.properties; >> + unsigned wave_size = 64; >> + unsigned max_vgprs = 256; >> + unsigned max_sgprs = sscreen->b.chip_class >= VI ? 800 : 512; >> + unsigned max_sgprs_per_wave = 128; >> + unsigned min_waves_per_cu = >> + >> DIV_ROUND_UP(props[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] * >> + >> props[TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT] * >> + >> props[TGSI_PROPERTY_CS_FIXED_BLOCK_DEPTH], >> + wave_size); >> + unsigned min_waves_per_simd = DIV_ROUND_UP(min_waves_per_cu, >> 4); >> + >> + max_vgprs = max_vgprs / min_waves_per_simd; >> + max_sgprs = MIN2(max_sgprs / min_waves_per_simd, >> max_sgprs_per_wave); >> + >> + if (shader->config.num_sgprs > max_sgprs || >> + shader->config.num_vgprs > max_vgprs) { >> + fprintf(stderr, "LLVM failed to compile a shader >> correctly: " >> + "SGPR:VGPR usage is %u:%u, but the hw limit >> is %u:%u\n", >> + shader->config.num_sgprs, >> shader->config.num_vgprs, >> + max_sgprs, max_vgprs); >> + >> + /* Just terminate the process, because dependent >> + * shaders can hang due to bad input data, but use >> + * the env var to allow shader-db to work. >> + */ >> + if (!debug_get_bool_option("SI_PASS_BAD_SHADERS", >> false)) >> + exit(0); > > Hmm exit(0) usually means "the program finished successfully" and not > everyone might notice the error message. I think exit(1) or even > abort() would be better.
OK, I'll use abort(). Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev