vkcube: ../src/util/u_vector.c:88: u_vector_add: Assertion `vector->head - vector->tail < vector->size' failed.
System information
- OS:
PRETTY_NAME="Ubuntu 20.04 LTS"
- GPU: no GPU.
- Kernel version:
Linux bulssi 5.4.96+ #33 SMP PREEMPT Wed Jun 9 10:39:02 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
- Mesa version: compiled from git. "main" branch, 87cdcf56
- Xserver version: no Xserver installed
- Desktop manager and compositor: wayland test compositor, "weston"
Describe the issue
I'm trying to run vulkan test application with wayland protocol on arm64 hardware without GPU. I have used following vulkan test program. https://github.com/krh/vkcube
When I execute vkcube, it has abort() with following backtrace.
root@bulssi:/home/bulssi/work/git/mesa/build# gdb --args ../../vkcube/build/vkcube
...
Reading symbols from ../../vkcube/build/vkcube...
(gdb) r
...
vkcube: ../src/util/u_vector.c:88: u_vector_add: Assertion `vector->head - vector->tail < vector->size' failed.
Thread 1 "vkcube" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x0000007ff7ccbd68 in __GI_abort () at abort.c:79
#2 0x0000007ff7cd8674 in __assert_fail_base (fmt=0x7ff7dd36c8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7ff77af958 "vector->head - vector->tail < vector->size", file=file@entry=0x7ff77af860 "../src/util/u_vector.c", line=line@entry=88, function=function@entry=0x7ff77af9d8 <__PRETTY_FUNCTION__.8768> "u_vector_add") at assert.c:92
#3 0x0000007ff7cd86dc in __GI___assert_fail (assertion=assertion@entry=0x7ff77af958 "vector->head - vector->tail < vector->size", file=file@entry=0x7ff77af860 "../src/util/u_vector.c", line=line@entry=88, function=function@entry=0x7ff77af9d8 <__PRETTY_FUNCTION__.8768> "u_vector_add") at assert.c:101
#4 0x0000007ff749e0dc in u_vector_add (vector=vector@entry=0x7fffffee10) at /usr/include/aarch64-linux-gnu/bits/string_fortified.h:34
#5 0x0000007ff769bc98 in wsi_wl_display_add_vk_format (display=<optimized out>, format=VK_FORMAT_B8G8R8A8_SRGB, formats=0x7fffffee10) at ../src/vulkan/wsi/wsi_common_wayland.c:121
#6 wsi_wl_display_add_vk_format (formats=formats@entry=0x7fffffee10, format=format@entry=VK_FORMAT_B8G8R8A8_SRGB, display=<optimized out>) at ../src/vulkan/wsi/wsi_common_wayland.c:104
#7 0x0000007ff769c004 in wsi_wl_display_add_wl_shm_format (wl_shm_format=<optimized out>, formats=0x7fffffee10, display=0x7fffffedf0) at ../src/vulkan/wsi/wsi_common_wayland.c:256
#8 shm_handle_format (data=0x7fffffedf0, shm=<optimized out>, format=<optimized out>) at ../src/vulkan/wsi/wsi_common_wayland.c:421
#9 0x0000007ff7c6aff8 in ?? () from /lib/aarch64-linux-gnu/libffi.so.7
#10 0x0000007ff7c6a7cc in ?? () from /lib/aarch64-linux-gnu/libffi.so.7
#11 0x0000007ff7f71c20 in wl_closure_invoke (closure=closure@entry=0x5555579f50, flags=flags@entry=1, target=<optimized out>, target@entry=0x555569ed50, opcode=opcode@entry=0, data=<optimized out>) at ../src/connection.c:1018
#12 0x0000007ff7f6e6ec in dispatch_event (display=0x55555742a0, queue=<optimized out>) at ../src/wayland-client.c:1445
#13 0x0000007ff7f6fad0 in dispatch_queue (queue=0x5555904fb0, display=0x55555742a0) at ../src/wayland-client.c:1584
#14 wl_display_dispatch_queue_pending (display=0x55555742a0, queue=0x5555904fb0) at ../src/wayland-client.c:1833
#15 0x0000007ff7f6ff6c in wl_display_roundtrip_queue (display=0x55555742a0, queue=0x5555904fb0) at ../src/wayland-client.c:1251
#16 0x0000007ff769af80 in wsi_wl_display_init (wsi_wl=0x5555698ca0, display=display@entry=0x7fffffedf0, wl_display=<optimized out>, get_format_list=get_format_list@entry=false, sw=<optimized out>) at ../src/vulkan/wsi/wsi_common_wayland.c:544
#17 0x0000007ff769cb50 in wsi_wl_get_presentation_support (wsi_device=<optimized out>, wl_display=<optimized out>) at ../src/vulkan/wsi/wsi_common_wayland.c:643
#18 0x000000555555c1bc in init_wayland (vc=0x7fffffef78) at ../main.c:1202
#19 0x000000555555da00 in init_display (vc=0x7fffffef78) at ../main.c:1649
#20 0x000000555555dd38 in main (argc=1, argv=0x7ffffff528) at ../main.c:1733
(gdb)
Abort comes wsi_wl_get_presentation_support() and wsi_wl_display_init() functions that does not initialize display->swrast.formats
vector.
With following patch, it works fine.
root@bulssi:/home/bulssi/work/git/mesa# git diff
diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c
index b37163de04c..aa8d1f5810a 100644
--- a/src/vulkan/wsi/wsi_common_wayland.c
+++ b/src/vulkan/wsi/wsi_common_wayland.c
@@ -640,7 +640,7 @@ wsi_wl_get_presentation_support(struct wsi_device *wsi_device,
(struct wsi_wayland *)wsi_device->wsi[VK_ICD_WSI_PLATFORM_WAYLAND];
struct wsi_wl_display display;
- VkResult ret = wsi_wl_display_init(wsi, &display, wl_display, false,
+ VkResult ret = wsi_wl_display_init(wsi, &display, wl_display, true,
wsi_device->sw);
if (ret == VK_SUCCESS)
wsi_wl_display_finish(&display);
root@bulssi:/home/bulssi/work/git/mesa#