On Fri, Aug 18, 2023 at 11:13 PM Akihiko Odaki <akihiko.od...@gmail.com> wrote:
> On 2023/08/19 10:17, Gurchetan Singh wrote: > > > > > > On Fri, Aug 18, 2023 at 5:08 AM Akihiko Odaki <akihiko.od...@gmail.com > > <mailto:akihiko.od...@gmail.com>> wrote: > > > > On 2023/08/18 8:47, Gurchetan Singh wrote: > > > > > > > > > On Wed, Aug 16, 2023 at 10:28 PM Akihiko Odaki > > <akihiko.od...@gmail.com <mailto:akihiko.od...@gmail.com> > > > <mailto:akihiko.od...@gmail.com > > <mailto:akihiko.od...@gmail.com>>> wrote: > > > > > > On 2023/08/17 11:23, Gurchetan Singh wrote: > > > > From: Gurchetan Singh <gurchetansi...@chromium.org > > <mailto:gurchetansi...@chromium.org> > > > <mailto:gurchetansi...@chromium.org > > <mailto:gurchetansi...@chromium.org>>> > > > > > > > > This adds basic documentation for virtio-gpu. > > > > > > > > Suggested-by: Akihiko Odaki <akihiko.od...@daynix.com > > <mailto:akihiko.od...@daynix.com> > > > <mailto:akihiko.od...@daynix.com > > <mailto:akihiko.od...@daynix.com>>> > > > > Signed-off-by: Gurchetan Singh > > <gurchetansi...@chromium.org <mailto:gurchetansi...@chromium.org> > > > <mailto:gurchetansi...@chromium.org > > <mailto:gurchetansi...@chromium.org>>> > > > > Tested-by: Alyssa Ross <h...@alyssa.is <mailto:h...@alyssa.is> > > <mailto:h...@alyssa.is <mailto:h...@alyssa.is>>> > > > > Tested-by: Emmanouil Pitsidianakis > > > <manos.pitsidiana...@linaro.org > > <mailto:manos.pitsidiana...@linaro.org> > > <mailto:manos.pitsidiana...@linaro.org > > <mailto:manos.pitsidiana...@linaro.org>>> > > > > Reviewed-by: Emmanouil Pitsidianakis > > > <manos.pitsidiana...@linaro.org > > <mailto:manos.pitsidiana...@linaro.org> > > <mailto:manos.pitsidiana...@linaro.org > > <mailto:manos.pitsidiana...@linaro.org>>> > > > > --- > > > > v2: - Incorporated suggestions by Akihiko Odaki > > > > - Listed the currently supported capset_names > (Bernard) > > > > > > > > v3: - Incorporated suggestions by Akihiko Odaki and Alyssa > > Ross > > > > > > > > v4: - Incorporated suggestions by Akihiko Odaki > > > > > > > > v5: - Removed pci suffix from examples > > > > - Verified that -device virtio-gpu-rutabaga works. > > Strangely > > > > enough, I don't remember changing anything, and I > > remember > > > > it not working. I did rebase to top of tree though. > > > > - Fixed meson examples in crosvm docs > > > > > > > > docs/system/device-emulation.rst | 1 + > > > > docs/system/devices/virtio-gpu.rst | 113 > > > +++++++++++++++++++++++++++++ > > > > 2 files changed, 114 insertions(+) > > > > create mode 100644 docs/system/devices/virtio-gpu.rst > > > > > > > > diff --git a/docs/system/device-emulation.rst > > > b/docs/system/device-emulation.rst > > > > index 4491c4cbf7..1167f3a9f2 100644 > > > > --- a/docs/system/device-emulation.rst > > > > +++ b/docs/system/device-emulation.rst > > > > @@ -91,6 +91,7 @@ Emulated Devices > > > > devices/nvme.rst > > > > devices/usb.rst > > > > devices/vhost-user.rst > > > > + devices/virtio-gpu.rst > > > > devices/virtio-pmem.rst > > > > devices/vhost-user-rng.rst > > > > devices/canokey.rst > > > > diff --git a/docs/system/devices/virtio-gpu.rst > > > b/docs/system/devices/virtio-gpu.rst > > > > new file mode 100644 > > > > index 0000000000..8c5c708272 > > > > --- /dev/null > > > > +++ b/docs/system/devices/virtio-gpu.rst > > > > @@ -0,0 +1,113 @@ > > > > +.. > > > > + SPDX-License-Identifier: GPL-2.0 > > > > + > > > > +virtio-gpu > > > > +========== > > > > + > > > > +This document explains the setup and usage of the > > virtio-gpu device. > > > > +The virtio-gpu device paravirtualizes the GPU and display > > > controller. > > > > + > > > > +Linux kernel support > > > > +-------------------- > > > > + > > > > +virtio-gpu requires a guest Linux kernel built with the > > > > +``CONFIG_DRM_VIRTIO_GPU`` option. > > > > + > > > > +QEMU virtio-gpu variants > > > > +------------------------ > > > > + > > > > +QEMU virtio-gpu device variants come in the following > form: > > > > + > > > > + * ``virtio-vga[-BACKEND]`` > > > > + * ``virtio-gpu[-BACKEND][-INTERFACE]`` > > > > + * ``vhost-user-vga`` > > > > + * ``vhost-user-pci`` > > > > + > > > > +**Backends:** QEMU provides a 2D virtio-gpu backend, and > two > > > accelerated > > > > +backends: virglrenderer ('gl' device label) and > rutabaga_gfx > > > ('rutabaga' > > > > +device label). There is a vhost-user backend that runs > the > > > graphics stack > > > > +in a separate process for improved isolation. > > > > + > > > > +**Interfaces:** QEMU further categorizes virtio-gpu device > > > variants based > > > > +on the interface exposed to the guest. The interfaces can > be > > > classified > > > > +into VGA and non-VGA variants. The VGA ones are prefixed > with > > > virtio-vga > > > > +or vhost-user-vga while the non-VGA ones are prefixed with > > > virtio-gpu or > > > > +vhost-user-gpu. > > > > + > > > > +The VGA ones always use the PCI interface, but for the > > non-VGA > > > ones, the > > > > +user can further pick between MMIO or PCI. For MMIO, the > user > > > can suffix > > > > +the device name with -device, though vhost-user-gpu does > not > > > support MMIO. > > > > +For PCI, the user can suffix it with -pci. Without these > > > suffixes, the > > > > +platform default will be chosen. > > > > + > > > > +virtio-gpu 2d > > > > +------------- > > > > + > > > > +The default 2D backend only performs 2D operations. The > guest > > > needs to > > > > +employ a software renderer for 3D graphics. > > > > + > > > > +Typically, the software renderer is provided by `Mesa`_ or > > > `SwiftShader`_. > > > > +Mesa's implementations (LLVMpipe, Lavapipe and virgl > > below) work > > > out of box > > > > +on typical modern Linux distributions. > > > > + > > > > +.. parsed-literal:: > > > > + -device virtio-gpu > > > > + > > > > +.. _Mesa: https://www.mesa3d.org/ > > <https://www.mesa3d.org/> <https://www.mesa3d.org/ > > <https://www.mesa3d.org/>> > > > > +.. _SwiftShader: https://github.com/google/swiftshader > > <https://github.com/google/swiftshader> > > > <https://github.com/google/swiftshader > > <https://github.com/google/swiftshader>> > > > > + > > > > +virtio-gpu virglrenderer > > > > +------------------------ > > > > + > > > > +When using virgl accelerated graphics mode in the guest, > > OpenGL > > > API calls > > > > +are translated into an intermediate representation (see > > > `Gallium3D`_). The > > > > +intermediate representation is communicated to the host > > and the > > > > +`virglrenderer`_ library on the host translates the > > intermediate > > > > +representation back to OpenGL API calls. > > > > + > > > > +.. parsed-literal:: > > > > + -device virtio-gpu-gl > > > > + > > > > +.. _Gallium3D: > > > https://www.freedesktop.org/wiki/Software/gallium/ > > <https://www.freedesktop.org/wiki/Software/gallium/> > > > <https://www.freedesktop.org/wiki/Software/gallium/ > > <https://www.freedesktop.org/wiki/Software/gallium/>> > > > > +.. _virglrenderer: > > > https://gitlab.freedesktop.org/virgl/virglrenderer/ > > <https://gitlab.freedesktop.org/virgl/virglrenderer/> > > > <https://gitlab.freedesktop.org/virgl/virglrenderer/ > > <https://gitlab.freedesktop.org/virgl/virglrenderer/>> > > > > + > > > > +virtio-gpu rutabaga > > > > +------------------- > > > > + > > > > +virtio-gpu can also leverage `rutabaga_gfx`_ to provide > > `gfxstream`_ > > > > +rendering and `Wayland display passthrough`_. With the > > > gfxstream rendering > > > > +mode, GLES and Vulkan calls are forwarded to the host > > with minimal > > > > +modification. > > > > + > > > > +The crosvm book provides directions on how to build a > > > `gfxstream-enabled > > > > +rutabaga`_ and launch a `guest Wayland proxy`_. > > > > + > > > > +This device does require host blob support (``hostmem`` > field > > > below). The > > > > +``hostmem`` field specifies the size of virtio-gpu host > > memory > > > window. > > > > +This is typically between 256M and 8G. > > > > + > > > > +At least one capset (see colon separated ``capset_names`` > > below) > > > must be > > > > +specified when starting the device. The currently > supported > > > > +``capset_names`` are ``gfxstream-vulkan`` and > > ``cross-domain`` > > > on Linux > > > > +guests. For Android guests, ``gfxstream-gles`` is also > > supported. > > > > + > > > > +The device will try to auto-detect the wayland socket > > path if the > > > > +``cross-domain`` capset name is set. The user may > optionally > > > specify > > > > +``wayland_socket_path`` for non-standard paths. > > > > + > > > > +The ``wsi`` option can be set to ``surfaceless`` or > > ``headless``. > > > > +Surfaceless doesn't create a native window surface, but > does > > > copy from the > > > > +render target to the Pixman buffer if a virtio-gpu 2D > > hypercall > > > is issued. > > > > +Headless is like surfaceless, but doesn't copy to the > > Pixman buffer. > > > > +Surfaceless is the default if ``wsi`` is not specified. > > > > + > > > > +.. parsed-literal:: > > > > + -device > > > > virtio-gpu-rutabaga,capset_names=gfxstream-vulkan:cross-domain, > > > > + > > > > > hostmem=8G,wayland_socket_path=/tmp/nonstandard/mock_wayland.sock, > > > > + wsi=headless > > > > + > > > > +.. _rutabaga_gfx: > > > > > > https://github.com/google/crosvm/blob/main/rutabaga_gfx/ffi/src/include/rutabaga_gfx_ffi.h > < > https://github.com/google/crosvm/blob/main/rutabaga_gfx/ffi/src/include/rutabaga_gfx_ffi.h> > < > https://github.com/google/crosvm/blob/main/rutabaga_gfx/ffi/src/include/rutabaga_gfx_ffi.h > < > https://github.com/google/crosvm/blob/main/rutabaga_gfx/ffi/src/include/rutabaga_gfx_ffi.h > >> > > > > +.. _gfxstream: > > > > > https://android.googlesource.com/platform/hardware/google/gfxstream/ > > < > https://android.googlesource.com/platform/hardware/google/gfxstream/> > > > > > < > https://android.googlesource.com/platform/hardware/google/gfxstream/ < > https://android.googlesource.com/platform/hardware/google/gfxstream/>> > > > > +.. _Wayland display passthrough: > > > https://www.youtube.com/watch?v=OZJiHMtIQ2M > > <https://www.youtube.com/watch?v=OZJiHMtIQ2M> > > > <https://www.youtube.com/watch?v=OZJiHMtIQ2M > > <https://www.youtube.com/watch?v=OZJiHMtIQ2M>> > > > > +.. _gfxstream-enabled rutabaga: > > > https://crosvm.dev/book/appendix/rutabaga_gfx.html > > <https://crosvm.dev/book/appendix/rutabaga_gfx.html> > > > <https://crosvm.dev/book/appendix/rutabaga_gfx.html > > <https://crosvm.dev/book/appendix/rutabaga_gfx.html>> > > > > > > You have different links for "rutabaga_gfx" and > > "gfxstream-enabled > > > rutabaga", but I think you only need one. > > > > > > > > > Done. Didn't resend the entire patch series (to avoid spamming > > list), > > > just did "in-reply-to". The change is also available at: > > > > > > > > > https://gitlab.freedesktop.org/gurchetansingh/qemu-gfxstream/-/commits/qemu-gfxstream-v8 > < > https://gitlab.freedesktop.org/gurchetansingh/qemu-gfxstream/-/commits/qemu-gfxstream-v8> > < > https://gitlab.freedesktop.org/gurchetansingh/qemu-gfxstream/-/commits/qemu-gfxstream-v8 > < > https://gitlab.freedesktop.org/gurchetansingh/qemu-gfxstream/-/commits/qemu-gfxstream-v8 > >> > > > > The patch series now looks good so I finally decided to try this > patch > > series, but I couldn't get it work. > > > > I noticed gfxstream has page size hardcoded as 4 KiB, which broke my > > setup on M2 MacBook Air (running Asahi Linux) that has 16 KiB page. > You > > may add code to check host page size and to report an error if it's > not > > 4 KiB to virtio-gpu-rutabaga, but I think it's trivial to fix > gfxstream > > to query page size at runtime as QEMU and Rutabaga does so I hope > > you to > > do so. For testing purpose, I have replaced it with 16 KiB on my > setup. > > > > > > Good catch, the fix to the 16KiB was merged today and is in gfxstream > > ToT right now. > > The fix is incomplete. There are a few other places that hardcodes page > size, namely ANDROID_EMU_ADDRESS_SPACE_DEFAULT_PAGE_SIZE and > ADDRESS_SPACE_GRAPHICS_PAGE_SIZE. > > ANDROID_EMU_ADDRESS_SPACE_DEFAULT_PAGE_SIZE is used by no one so you can > just remove it. ADDRESS_SPACE_GRAPHICS_PAGE_SIZE is actually in use and > needs to be fixed. > > It's also better to remove PAGE_SIZE definition from guest/meson.build > just in case. > ANDROID_EMU_ADDRESS_SPACE_DEFAULT_PAGE_SIZE and PAGE_SIZE were removed from gfxstream ToT. The host alignment of the ring blob is also now based on getpagesize(..) and not hardcoded. > > > > > > I also found some bugs on QEMU side so I added comments to respective > > patches. > > > > Below is the logs from my last attempt of running vkgears: > > > > $ VK_LOADER_DEBUG=all demos/build/src/vulkan/vkgears > > INFO: Vulkan Loader Version 1.3.243 > > LAYER: Searching for layer manifest files > > LAYER: In following locations: > > LAYER: > /var/home/person/.config/vulkan/implicit_layer.d > > LAYER: /etc/xdg/vulkan/implicit_layer.d > > LAYER: /etc/vulkan/implicit_layer.d > > LAYER: > > /var/home/person/.local/share/vulkan/implicit_layer.d > > LAYER: > > > /var/home/person/.local/share/flatpak/exports/share/vulkan/implicit_layer.d > > LAYER: > > /var/lib/flatpak/exports/share/vulkan/implicit_layer.d > > LAYER: /usr/local/share/vulkan/implicit_layer.d > > LAYER: /usr/share/vulkan/implicit_layer.d > > LAYER: Found the following files: > > LAYER: > > /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json > > INFO: Found manifest file > > /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json > > (file > > version "1.0.0") > > LAYER: Searching for layer manifest files > > LAYER: In following locations: > > LAYER: > /var/home/person/.config/vulkan/explicit_layer.d > > LAYER: /etc/xdg/vulkan/explicit_layer.d > > LAYER: /etc/vulkan/explicit_layer.d > > LAYER: > > /var/home/person/.local/share/vulkan/explicit_layer.d > > LAYER: > > > /var/home/person/.local/share/flatpak/exports/share/vulkan/explicit_layer.d > > LAYER: > > /var/lib/flatpak/exports/share/vulkan/explicit_layer.d > > LAYER: /usr/local/share/vulkan/explicit_layer.d > > LAYER: /usr/share/vulkan/explicit_layer.d > > LAYER: Found no files > > DRIVER: Searching for driver manifest files > > DRIVER: In following locations: > > DRIVER: /var/home/person/.config/vulkan/icd.d > > DRIVER: /etc/xdg/vulkan/icd.d > > DRIVER: /etc/vulkan/icd.d > > DRIVER: /var/home/person/.local/share/vulkan/icd.d > > DRIVER: > > /var/home/person/.local/share/flatpak/exports/share/vulkan/icd.d > > DRIVER: /var/lib/flatpak/exports/share/vulkan/icd.d > > DRIVER: /usr/local/share/vulkan/icd.d > > DRIVER: /usr/share/vulkan/icd.d > > DRIVER: Found the following files: > > DRIVER: > > /usr/local/share/vulkan/icd.d/cereal_icd.aarch64.json > > DRIVER: > > /usr/share/vulkan/icd.d/broadcom_icd.aarch64.json > > DRIVER: > > /usr/share/vulkan/icd.d/freedreno_icd.aarch64.json > > DRIVER: /usr/share/vulkan/icd.d/lvp_icd.aarch64.json > > DRIVER: > > /usr/share/vulkan/icd.d/panfrost_icd.aarch64.json > > DRIVER: > /usr/share/vulkan/icd.d/radeon_icd.aarch64.json > > DRIVER: Found ICD manifest file > > /usr/local/share/vulkan/icd.d/cereal_icd.aarch64.json, version > "1.0.0" > > DEBUG | DRIVER: Searching for ICD drivers named > > /usr/local/lib64/libvulkan_cereal.so > > [VirtGpuDevice.cpp(71)] > > [prio 6] virtgpu backend not enabling > > VIRTGPU_PARAM_CREATE_GUEST_HANDLE[AndroidHealthMonitor.cpp(275)] > > [prio 4] HealthMonitor disabled. Returning nullptrI0818 > 21:00:07.980257 > > 154451 IntelDrmDecoder.cpp:38] IntelDrmDecoder created for context 2 > > DRIVER: Found ICD manifest file > > /usr/share/vulkan/icd.d/broadcom_icd.aarch64.json, version "1.0.0" > > DEBUG | DRIVER: Searching for ICD drivers named > > /usr/lib64/libvulkan_broadcom.so > > DRIVER: Found ICD manifest file > > /usr/share/vulkan/icd.d/freedreno_icd.aarch64.json, version "1.0.0" > > DEBUG | DRIVER: Searching for ICD drivers named > > /usr/lib64/libvulkan_freedreno.so > > DRIVER: Found ICD manifest file > > /usr/share/vulkan/icd.d/lvp_icd.aarch64.json, version "1.0.0" > > DEBUG | DRIVER: Searching for ICD drivers named > > /usr/lib64/libvulkan_lvp.so > > DRIVER: Found ICD manifest file > > /usr/share/vulkan/icd.d/panfrost_icd.aarch64.json, version "1.0.0" > > DEBUG | DRIVER: Searching for ICD drivers named > > /usr/lib64/libvulkan_panfrost.so > > DRIVER: Found ICD manifest file > > /usr/share/vulkan/icd.d/radeon_icd.aarch64.json, version "1.0.0" > > DEBUG | DRIVER: Searching for ICD drivers named > > /usr/lib64/libvulkan_radeon.so > > DEBUG | LAYER: Loading layer library > libVkLayer_MESA_device_select.so > > INFO | LAYER: Insert instance layer "VK_LAYER_MESA_device_select" > > (libVkLayer_MESA_device_select.so) > > LAYER: vkCreateInstance layer callstack setup to: > > LAYER: <Application> > > LAYER: || > > LAYER: <Loader> > > LAYER: || > > LAYER: VK_LAYER_MESA_device_select > > LAYER: Type: Implicit > > LAYER: Disable Env Var: NODEVICE_SELECT > > LAYER: Manifest: > > /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json > > LAYER: Library: > libVkLayer_MESA_device_select.so > > LAYER: || > > LAYER: <Drivers> > > I0818 21:00:08.014896 154451 VkDecoderGlobalState.cpp:443] Creating > > Vulkan instance for app: vkgears > > INFO | DRIVER: linux_read_sorted_physical_devices: > > INFO | DRIVER: Original order: > > INFO | DRIVER: [0] llvmpipe (LLVM 16.0.6, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: Sorted order: > > INFO | DRIVER: [0] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 16.0.6, 128 bits) > > INFO | DRIVER: linux_read_sorted_physical_devices: > > INFO | DRIVER: Original order: > > INFO | DRIVER: [0] llvmpipe (LLVM 16.0.6, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: Sorted order: > > INFO | DRIVER: [0] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 16.0.6, 128 bits) > > DEBUG | DRIVER: Copying old device 0 into new device 0 > > DEBUG | DRIVER: Copying old device 1 into new device 1 > > INFO | DRIVER: linux_read_sorted_physical_devices: > > INFO | DRIVER: Original order: > > INFO | DRIVER: [0] llvmpipe (LLVM 16.0.6, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: Sorted order: > > INFO | DRIVER: [0] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 16.0.6, 128 bits) > > DEBUG | DRIVER: Copying old device 0 into new device 0 > > DEBUG | DRIVER: Copying old device 1 into new device 1 > > INFO | DRIVER: linux_read_sorted_physical_devices: > > INFO | DRIVER: Original order: > > INFO | DRIVER: [0] llvmpipe (LLVM 16.0.6, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: Sorted order: > > INFO | DRIVER: [0] llvmpipe (LLVM 15.0.7, 128 bits) > > INFO | DRIVER: [1] llvmpipe (LLVM 16.0.6, 128 bits) > > DEBUG | DRIVER: Copying old device 0 into new device 0 > > DEBUG | DRIVER: Copying old device 1 into new device 1 > > ERROR: loader_validate_device_extensions: Device extension > > VK_KHR_swapchain not supported by selected physical device or enabled > > > > > > Yeah, any non-headless Linux tests are unlikely to work. Maybe in a > > future gfxstream release, since our focus is of course on Android and > > getting Vulkan in QEMU in general. > > I have just tried "vulkan-samples sample hello_triangle --headless" but > no luck. Below is the output of QEMU with -trace virtio_gpu_cmd_* > I have slightly different behavior on my setup, the app fails to find the proper surface extensions and exits. In headless mode, the app relies on VK_EXT_headless_surface, which gfxstream does not currently support (see on_vkEnumerateInstanceExtensionProperties). For some reason, perhaps due the presence of other VK drivers on the system, vulkaninfo does report several X11/Wayland surface extensions with gfxstream. This may confuse some headless apps. Either way, the crosvm docs will be clarified to mention what's been tested regarding gfxstream guest Linux (crrev.com/c/4800334). I suggest you run deqp-vk if your goal is to test this patch series. > > virtio_gpu_cmd_ctx_create ctx 0x2, name vulkan_samples > virtio_gpu_cmd_res_create_blob res 0x24, size 1064960 > virtio_gpu_cmd_ctx_res_attach ctx 0x2, res 0x24 > virtio_gpu_cmd_ctx_submit ctx 0x2, size 8 > I0819 15:10:06.916033 21850 IntelDrmDecoder.cpp:38] IntelDrmDecoder > created for context 2 > virtio_gpu_cmd_ctx_submit ctx 0x2, size 8 > virtio_gpu_cmd_ctx_submit ctx 0x2, size 8 > W0819 15:10:06.916443 21850 VkDecoder.cpp:137] Bad packet length 0 > detected, decode may fail > virtio_gpu_cmd_ctx_submit ctx 0x2, size 8 > W0819 15:10:06.916465 21850 VkDecoder.cpp:137] Bad packet length 0 > detected, decode may fail > W0819 15:10:06.916473 21850 VkDecoder.cpp:137] Bad packet length 0 > detected, decode may fail > W0819 15:10:06.916478 21850 VkDecoder.cpp:137] Bad packet length 0 > detected, decode may fail > W0819 15:10:06.916482 21850 VkDecoder.cpp:137] Bad packet length 0 > detected, decode may fail > > And it endlessly outputs "Bad packet length" error messages. >