Crashes in Citra Emulator
zink-wip @ 598d67e1
OpenGL renderer string: zink (Intel(R) HD Graphics 630 (KBL GT2))
Arch Linux, Kernel 5.9.8-arch1-1
I've encountered three unique crash locations in Zink when running Citra:
citra-qt: ../src/gallium/auxiliary/util/u_inlines.h:87: pipe_reference_described: Assertion `count != -1' failed.
Thread 23 "citra-qt:gdrv0" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fff8bfff640 (LWP 8520)]
0x00007ffff63ef615 in raise () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007ffff63ef615 in raise () at /usr/lib/libc.so.6
#1 0x00007ffff63d8862 in abort () at /usr/lib/libc.so.6
#2 0x00007ffff63d8747 in _nl_load_domain.cold () at /usr/lib/libc.so.6
#3 0x00007ffff63e7bf6 in () at /usr/lib/libc.so.6
#4 0x00007fffea37532f in pipe_reference_described (dst=<optimized out>, src=0x0, get_desc=<optimized out>)
at ../src/gallium/auxiliary/util/u_inlines.h:87
#5 pipe_reference_described (get_desc=<optimized out>, src=0x0, dst=<optimized out>)
at ../src/gallium/auxiliary/util/u_inlines.h:73
#6 zink_resource_object_reference (src=0x0, dst=<synthetic pointer>, screen=0x55555eb160e0)
at ../src/gallium/drivers/zink/zink_resource.h:142
#7 zink_fence_clear_resources (screen=screen@entry=0x55555eb160e0, fence=fence@entry=0x7fff7c001780)
at ../src/gallium/drivers/zink/zink_fence.c:49
#8 0x00007fffea391cc2 in zink_reset_batch_state (ctx=ctx@entry=0x55555f331430, bs=bs@entry=0x7fff7c001780)
at ../src/gallium/drivers/zink/zink_batch.c:29
#9 0x00007fffea3920df in zink_batch_reset_all (ctx=ctx@entry=0x55555f331430)
at ../src/gallium/drivers/zink/zink_batch.c:103
#10 0x00007fffea36e87a in zink_maybe_flush_or_stall (ctx=ctx@entry=0x55555f331430)
at ../src/gallium/drivers/zink/zink_context.c:1840
#11 0x00007fffea373d4a in zink_draw_vbo
(pctx=0x55555f331430, dinfo=0x55555f354958, dindirect=0x0, draws=0x7fff8bffe2c0, num_draws=1)
at ../src/gallium/drivers/zink/zink_draw.c:852
#12 0x00007fffea3f1021 in tc_call_draw_single (pipe=<optimized out>, payload=0x55555f354958)
at ../src/gallium/auxiliary/util/u_threaded_context.c:2246
#13 0x00007fffea3f361b in tc_batch_execute (job=job@entry=0x55555f354510, thread_index=thread_index@entry=0)
at ../src/gallium/auxiliary/util/u_threaded_context.c:198
#14 0x00007fffe9bfe8e8 in util_queue_thread_func (input=input@entry=0x55555f2894e0) at ../src/util/u_queue.c:304
#15 0x00007fffe9bfe447 in impl_thrd_routine (p=<optimized out>) at ../include/c11/threads_posix.h:87
#16 0x00007ffff77e73e9 in start_thread () at /usr/lib/libpthread.so.0
#17 0x00007ffff64b2293 in clone () at /usr/lib/libc.so.6
citra-qt: ../src/gallium/drivers/zink/zink_resource.c:124: zink_destroy_resource_object: Assertion `!obj->map_count' failed.
Thread 23 "citra-qt:gdrv0" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffa4ff9640 (LWP 8559)]
0x00007ffff63ef615 in raise () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007ffff63ef615 in raise () at /usr/lib/libc.so.6
#1 0x00007ffff63d8862 in abort () at /usr/lib/libc.so.6
#2 0x00007ffff63d8747 in _nl_load_domain.cold () at /usr/lib/libc.so.6
#3 0x00007ffff63e7bf6 in () at /usr/lib/libc.so.6
#4 0x00007fffea37adec in zink_destroy_resource_object (screen=<optimized out>, obj=<optimized out>)
at ../src/gallium/drivers/zink/zink_resource.c:124
#5 0x00007fffea3752e5 in zink_resource_object_reference (src=0x0, dst=<synthetic pointer>, screen=0x55555eb187c0)
at ../src/gallium/drivers/zink/zink_resource.h:144
#6 zink_fence_clear_resources (screen=screen@entry=0x55555eb187c0, fence=fence@entry=0x55555f334cc0)
at ../src/gallium/drivers/zink/zink_fence.c:49
#7 0x00007fffea391cc2 in zink_reset_batch_state (ctx=ctx@entry=0x55555f325c80, bs=bs@entry=0x55555f334cc0)
at ../src/gallium/drivers/zink/zink_batch.c:29
#8 0x00007fffea3920df in zink_batch_reset_all (ctx=ctx@entry=0x55555f325c80)
at ../src/gallium/drivers/zink/zink_batch.c:103
#9 0x00007fffea36e87a in zink_maybe_flush_or_stall (ctx=ctx@entry=0x55555f325c80)
at ../src/gallium/drivers/zink/zink_context.c:1840
#10 0x00007fffea373d4a in zink_draw_vbo
(pctx=0x55555f325c80, dinfo=0x55555f34b388, dindirect=0x0, draws=0x7fffa4ff82c0, num_draws=1)
at ../src/gallium/drivers/zink/zink_draw.c:852
#11 0x00007fffea3f1021 in tc_call_draw_single (pipe=<optimized out>, payload=0x55555f34b388)
at ../src/gallium/auxiliary/util/u_threaded_context.c:2246
#12 0x00007fffea3f361b in tc_batch_execute (job=job@entry=0x55555f34af40, thread_index=thread_index@entry=0)
at ../src/gallium/auxiliary/util/u_threaded_context.c:198
#13 0x00007fffe9bfe8e8 in util_queue_thread_func (input=input@entry=0x55555f272500) at ../src/util/u_queue.c:304
#14 0x00007fffe9bfe447 in impl_thrd_routine (p=<optimized out>) at ../include/c11/threads_posix.h:87
#15 0x00007ffff77e73e9 in start_thread () at /usr/lib/libpthread.so.0
#16 0x00007ffff64b2293 in clone () at /usr/lib/libc.so.6
citra-qt: ../src/vulkan/util/vk_object.h:58: vk_object_base_assert_valid: Assertion `base == NULL || base->type == obj_type' failed.
malloc_consolidate(): unaligned fastbin chunk detected
Thread 1 "citra-qt" received signal SIGABRT, Aborted.
0x00007ffff63ef615 in raise () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007ffff63ef615 in raise () at /usr/lib/libc.so.6
#1 0x00007ffff63d8862 in abort () at /usr/lib/libc.so.6
#2 0x00007ffff63d8747 in _nl_load_domain.cold () at /usr/lib/libc.so.6
#3 0x00007ffff63e7bf6 in () at /usr/lib/libc.so.6
#4 0x00007fffe3ccdcea in vk_object_base_assert_valid (base=0x7fff1c33afa0, obj_type=VK_OBJECT_TYPE_IMAGE)
at ../src/vulkan/util/vk_object.h:55
#5 vk_object_base_assert_valid (obj_type=VK_OBJECT_TYPE_IMAGE, base=0x7fff1c33afa0) at ../src/vulkan/util/vk_object.h:55
#6 anv_image_from_handle (_handle=0x7fff1c33afa0) at ../src/intel/vulkan/anv_private.h:4554
#7 gen9_CmdPipelineBarrier
(commandBuffer=0x7fff90053a70, srcStageMask=<optimized out>, destStageMask=<optimized out>, byRegion=<optimized out>, memoryBarrierCount=<optimized out>, pMemoryBarriers=<optimized out>, bufferMemoryBarrierCount=0, pBufferMemoryBarriers=0x0, imageMemoryBarrierCount=1, pImageMemoryBarriers=0x7fffffffd090) at ../src/intel/vulkan/genX_cmd_buffer.c:2375
#8 0x00007fffea36d3ab in zink_resource_image_barrier (ctx=ctx@entry=0x55555f2969b0, batch=0x55555f296e28,
batch@entry=0x0, res=res@entry=0x7fff1c33a160, new_layout=new_layout@entry=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, flags=flags@entry=2048, pipeline=pipeline@entry=4096) at ../src/gallium/drivers/zink/zink_context.c:1571
#9 0x00007fffea37bd4d in zink_resource_setup_transfer_layouts
(ctx=ctx@entry=0x55555f2969b0, src=src@entry=0x7fff1c33a160, dst=dst@entry=0x55555fb4e580)
at ../src/gallium/drivers/zink/zink_resource.c:996
#10 0x00007fffea393e33 in blit_native (info=0x55555f2b0e08, ctx=0x55555f2969b0)
at ../src/gallium/drivers/zink/zink_blit.c:129
#11 zink_blit (pctx=0x55555f2969b0, info=0x55555f2b0e08) at ../src/gallium/drivers/zink/zink_blit.c:190
#12 0x00007fffea3f015f in tc_call_blit (pipe=<optimized out>, payload=0x55555f2b0e08)
at ../src/gallium/auxiliary/util/u_threaded_context.c:2490
#13 0x00007fffea3f361b in tc_batch_execute (job=job@entry=0x55555f2b0d80, thread_index=thread_index@entry=0)
at ../src/gallium/auxiliary/util/u_threaded_context.c:198
#14 0x00007fffea3f3aa1 in _tc_sync (tc=tc@entry=0x55555f2ad7c0, func=<optimized out>, info=<optimized out>)
at ../src/gallium/auxiliary/util/u_threaded_context.c:314
#15 0x00007fffea3f3d08 in tc_flush (_pipe=0x55555f2ad7c0, fence=0x55555fdc4c80, flags=0)
at ../src/gallium/auxiliary/util/u_threaded_context.c:2226
#16 0x00007fffe9df1bed in fence_sync (ctx=0x55555f2cc230, condition=37143, flags=0) at ../src/mesa/main/syncobj.c:293
#17 0x0000555555d9c64c in OpenGL::RendererOpenGL::TryPresent(int) (this=<optimized out>, timeout_ms=<optimized out>)
at /home/xperia64/compile/citra/src/video_core/renderer_opengl/renderer_opengl.cpp:1111
#18 0x0000555555830ff2 in OpenGLWindow::Present() (this=0x55555e9917e0)
at /home/xperia64/compile/citra/src/citra_qt/bootmanager.cpp:136
#19 0x0000555555831ad5 in OpenGLWindow::event(QEvent*) (this=<optimized out>, event=0x7fffffffdce0)
at /home/xperia64/compile/citra/src/citra_qt/bootmanager.cpp:147
#20 0x00007ffff7a74752 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#21 0x00007ffff6b6dcda in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#22 0x00007ffff70b6319 in QPlatformWindow::windowEvent(QEvent*) () at /usr/lib/libQt5Gui.so.5
#23 0x00007ffff7a7b437 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#24 0x00007ffff6b6dcda in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#25 0x00007ffff6bc5cc5 in QTimerInfoList::activateTimers() () at /usr/lib/libQt5Core.so.5
#26 0x00007ffff6bc6572 in () at /usr/lib/libQt5Core.so.5
#27 0x00007ffff55fa914 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#28 0x00007ffff564e7d1 in () at /usr/lib/libglib-2.0.so.0
#29 0x00007ffff55f9121 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#30 0x00007ffff6bc6941 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
at /usr/lib/libQt5Core.so.5
#31 0x00007ffff6b6c65c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#32 0x00007ffff6b74af4 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
#33 0x00005555557d045b in main(int, char**) (argc=<optimized out>, argv=<optimized out>)
at /home/xperia64/compile/citra/src/citra_qt/main.cpp:2465
These happen at random after some amount of time launching this homebrew demo in the emulator: https://smealum.github.io/3dscraft/downloads/3dscraft_141120.zip
Citra can be cloned and built from https://github.com/citra-emu/citra/ I'm using the citra-qt version as opposed to SDL.
The relevant settings I've configured are (under Emulation->Configure...->Graphics):
Enhancements:
- Internal Resolution: 4x Native
- Screen Layout: Large Screen
Advanced:
- Enable Hardware Renderer
- Enable Hardware Shader
- Accurate Multiplication
- Enable Shader JIT
- Disable Use Disk Shader Cache
- Enable VSync