lavapipe: infinite loop
Upon playback of the provided gfxreconstruct file, lavapipe will get stuck in an infinite loop and gfxrecon-replay will be unable to exit. lvp_hang.7z
[Switching to thread 3 (Thread 0x7fffe6d92640 (LWP 68770))]
#0 0x00007fffec3d20b3 in prim_restart_loop (elements=0x7fff1eabb000, draw_info=0x7fffe6d91c80, info=<optimized out>, draw=<optimized out>) at ../src/gallium/auxiliary/draw/draw_pt.c:378
378 if (i < elt_max && restart_idx == info->restart_index) {
(gdb) bt
#0 0x00007fffec3d20b3 in prim_restart_loop (elements=0x7fff1eabb000, draw_info=0x7fffe6d91c80, info=<optimized out>, draw=<optimized out>) at ../src/gallium/auxiliary/draw/draw_pt.c:378
#1 draw_pt_arrays_restart (num_draws=1, draw_info=0x7fffe6d91c80, info=<optimized out>, draw=<optimized out>) at ../src/gallium/auxiliary/draw/draw_pt.c:414
#2 draw_instances (draw=draw@entry=0x1787ab0, drawid_offset=drawid_offset@entry=0, info=info@entry=0x174e9f8, draws=draws@entry=0x7fffe6d91c80, num_draws=num_draws@entry=1) at ../src/gallium/auxiliary/draw/draw_pt.c:480
#3 0x00007fffec3d26bb in draw_vbo (draw=draw@entry=0x1787ab0, info=info@entry=0x174e9f8, drawid_offset=drawid_offset@entry=0, indirect=indirect@entry=0x0, draws=draws@entry=0x7fffe6d91c80, num_draws=num_draws@entry=1, patch_vertices=<optimized out>) at ../src/gallium/auxiliary/draw/draw_pt.c:613
#4 0x00007fffec362f71 in llvmpipe_draw_vbo (pipe=0x17811e0, info=0x174e9f8, drawid_offset=0, indirect=0x0, draws=0x7fffe6d91c80, num_draws=1) at ../src/gallium/drivers/llvmpipe/lp_draw_arrays.c:150
#5 0x00007fffec13610b in handle_draw_indexed (state=<optimized out>, cmd=<optimized out>) at ../src/gallium/frontends/lavapipe/lvp_execute.c:2537
#6 lvp_execute_cmd_buffer (cmd_buffer=<optimized out>, state=state@entry=0x174e998) at ../src/gallium/frontends/lavapipe/lvp_execute.c:3804
#7 0x00007fffec13a576 in lvp_execute_cmds (device=<optimized out>, queue=queue@entry=0x174e790, cmd_buffer=<optimized out>) at ../src/gallium/frontends/lavapipe/lvp_execute.c:4030
#8 0x00007fffec12b45c in lvp_queue_submit (submit=<optimized out>, vk_queue=<optimized out>) at ../src/gallium/frontends/lavapipe/lvp_device.c:1438
#9 lvp_queue_submit (vk_queue=0x174e790, submit=0x2d9e7b0) at ../src/gallium/frontends/lavapipe/lvp_device.c:1423
#10 0x00007fffec1cafff in vk_queue_submit_final (queue=queue@entry=0x174e790, submit=submit@entry=0x2d9e7b0) at ../src/vulkan/runtime/vk_queue.c:377
#11 0x00007fffec1cb37f in vk_queue_submit_thread_func (_data=_data@entry=0x174e790) at ../src/vulkan/runtime/vk_queue.c:490
#12 0x00007fffec1bcb77 in impl_thrd_routine (p=<optimized out>) at ../src/c11/impl/threads_posix.c:67
#13 0x00007ffff7a35db2 in start_thread () from /lib64/libc.so.6
#14 0x00007ffff79d59e0 in clone3 () from /lib64/libc.so.6
It's worth nothing that anv will give a device loss for the same inputs that generated this capture, and radv will cause a kernel panic in the amdgpu driver, so there's probably something going really wrong with this. Still, it probably shouldn't hang.