Vulkan bring-up on custom AGL distro

I am in the process of trying to bring-up Vulkan based application on a new distro of linux based on Automotive Grade Linux (AGL) with Xserver running on a Raspberry Pi 4, but receiving memory based errors. I can run the applications and Vulkan demos on Raspbian on the same hardware so I know this is purely a software issue. I believe I’m missing either a library, or some initialization/config. I’m using Yocto to build the distro and have it setup to compile mesa with native Vulkan support (-Dvulkan-drivers=broadcom)

When I attempt to run vkcube, I get this error:

# vkcube
Selected GPU 0: V3D 4.2, type: 1
memory wait for map failed
failed to map command list buffer
memory wait for map failed
failed to map command list buffer
memory wait for map failed
failed to map command list buffer
vkcube: /usr/src/debug/vulkan-tools/ demo_prepare_buffers: Assertion `!err' failed.

That line number points back to this in cube.c:

    err = demo->fpCreateSwapchainKHR(demo->device, &swapchain_ci, NULL, &demo->swapchain);
// note: fpCreateSwapchainKHR is a pointer to vkCreateSwapchainKHR

So this issue appears to be with creating the swapchain. Swapchain as an extension appears to be included/enabled:

Device Extensions: count = 6
        VK_KHR_swapchain               : extension revision 68

What could be missing that would prevent the creation of the swapchain?

I initially followed this tutorial for the testing applications on Raspbian:

And I believe I pulled all the requirements/dependencies (libdrm, libxcb, etc) from that tutorial into my new AGL distro and their versions match or exceed those in Raspbian.

Another data point: When I run my custom application I get this error:
memory wait for map failed

[2020.06.29-03.11.55:019][  0]LogVulkanRHI: Error: VulkanRHI::vkCreateDescriptorPool(Device->GetInstanceHandle(), &PoolInfo, VULKAN_CPU_ALLOCATOR, &DescriptorPool) failed, VkResult=-2
 at /home/ken/source/UnrealEngine/Engine/Source/Runtime/VulkanRHI/Private/VulkanPendingState.cpp:723 
The "memory wait for map failed" aligns with the vkcube error, but this also throws VK_ERROR_OUT_OF_DEVICE_MEMORY which seems misleading because this is an 8GB Pi and the same application can run on Raspbian. 

From vulkaninfo:

# vulkaninfo 
Vulkan Instance Version: 1.2.168
Instance Extensions: count = 9
        VK_EXT_debug_report                    : extension revision 9
        VK_EXT_debug_utils                     : extension revision 2
        VK_KHR_display                         : extension revision 23
        VK_KHR_external_memory_capabilities    : extension revision 1
        VK_KHR_get_physical_device_properties2 : extension revision 1
        VK_KHR_get_surface_capabilities2       : extension revision 1
        VK_KHR_surface                         : extension revision 25
        VK_KHR_xcb_surface                     : extension revision 6
        VK_KHR_xlib_surface                    : extension revision 6

The solution to this was a kernel update. Development was being done on Linux kernel 4.19, but upgrading to 5.4 resolved the issue entirely.

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.