Skip to content

WIP: HACK: freedreno: nir: Workaround to db410c crash

On db410c with the 19.1 branch we see the following crash booting to the home screen in AOSP (on wallpaper loading, I believe):

signal 11 (Segmentation fault)
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xc23072b2 in tid 4355 (RenderThread), pid 4332 (ndroid.settings)
Revision: '0'
pid: 4332, tid: 4355, name: RenderThread  >>> com.android.settings <<<
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xc23072b2
     r0  00000000  r1  86d1760d  r2  00000000  r3  00000007
     r4  c1a51ad8  r5  c1a8cf58  r6  c23072b2  r7  00000004
     r8  00000000  r9  00000000
     ip  e87acd20  sp  c1ebdc80  lr  e872a075  pc  c26c4d24

Stack Trace:
  RELADDR   FUNCTION                     FILE:LINE
  00404d24  ir3_context_error+92         external/mesa3d/src/freedreno/ir3/ir3_context.c:?
  v------>  emit_tex                     external/mesa3d/src/freedreno/ir3/ir3_compiler_nir.c:1736
  0040134b  emit_instr+7542              external/mesa3d/src/freedreno/ir3/ir3_compiler_nir.c:2075
  003ff57d  emit_block+116               external/mesa3d/src/freedreno/ir3/ir3_compiler_nir.c:2143
  003ff44d  emit_cf_list+28              external/mesa3d/src/freedreno/ir3/ir3_compiler_nir.c:2190
  v------>  emit_function                external/mesa3d/src/freedreno/ir3/ir3_compiler_nir.c:2329
  v------>  emit_instructions            external/mesa3d/src/freedreno/ir3/ir3_compiler_nir.c:2718
  003fe6c5  ir3_compile_shader_nir+1680  external/mesa3d/src/freedreno/ir3/ir3_compiler_nir.c:2822
  003fd7d5  create_variant+76            external/mesa3d/src/freedreno/ir3/ir3_shader.c:198
  v------>  shader_variant               external/mesa3d/src/freedreno/ir3/ir3_shader.c:230
  003fd747  ir3_shader_get_variant+78    external/mesa3d/src/freedreno/ir3/ir3_shader.c:245
  00136535  ir3_shader_variant+112       external/mesa3d/src/gallium/drivers/freedreno/ir3/ir3_gallium.c:91
  v------>  fd3_emit_get_fp              external/mesa3d/src/gallium/drivers/freedreno/a3xx/fd3_emit.h:81
  00114777  fd3_program_emit+154         external/mesa3d/src/gallium/drivers/freedreno/a3xx/fd3_program.c:150
  00112f97  fd3_emit_tile_mem2gmem+1414  external/mesa3d/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c:670
  v------>  render_tiles                 external/mesa3d/src/gallium/drivers/freedreno/freedreno_gmem.c:363
  000fe8b3  fd_gmem_render_tiles+426     external/mesa3d/src/gallium/drivers/freedreno/freedreno_gmem.c:464
  000fbcf5  batch_flush_func+4           external/mesa3d/src/gallium/drivers/freedreno/freedreno_batch.c:298
  003f5265  util_queue_thread_func+164   external/mesa3d/src/util/u_queue.c:289
  000a291b  __pthread_start(void*)+20    bionic/libc/bionic/pthread_create.cpp:338
  0005e293  __start_thread+30            bionic/libc/bionic/clone.cpp:53

With the error message: "Unhandled NIR tex src type: 11"

Interestingly this isn't seen on db845c with the same code.

For whatever reason, the src_type is being set to nir_tex_src_texture_deref and nir_tex_src_sampler_deref on the db410c, and that's crashing out as unhandled.

(NOTE: This crash does not occur with 19.0 or master)

This workaround patch (which obviously isn't right) simply adds those two values to the select statement treating them like nir_tex_src_texture_offset, which seems to avoid the crash and work ok.

Suggestions for a better fix would be great!

Signed-off-by: John Stultz john.stultz@linaro.org

Edited by Rob Clark

Merge request reports