On Tegra the only supported combinations for VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT are
* VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
* VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
* VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT
This article agrees that we do not need host cached memory here:
https://zeux.io/2020/02/27/writing-an-efficient-vulkan-renderer/
It literally does not work to find python 3.
https://cmake.org/cmake/help/latest/module/FindPythonInterp.html
> Note
> A call to find_package(PythonInterp ${V}) for python version V may find a python executable
> with no version suffix. In this case no attempt is made to avoid python executables from other
> versions. Use FindPython3, FindPython2 or FindPython instead.
Fixes build on Ubuntu 18.04
The problem:
* xrCreateVulkanDeviceKHR is passed a VkPhysicalDevice, but not a VkInstance.
* xrGetVulkanGraphicsDevice2KHR is passed a VkInstance and returns a VkPhysicalDevice
that is a child of that instance.
* xrCreateVulkanDeviceKHR must verify that the xrGetVulkanGraphicsDevice2KHR
has been called and that the passed VkPhysicalDevice matches the one returned
by xrGetVulkanGraphicsDevice2KHR.
We have to consider:
* xrCreateVulkanDeviceKHR has to work on the "correct" VkInstance, which the passed
VkPhysicalDevice is a child of.
The reqirement
> If the vulkanPhysicalDevice parameter does not match the output of
> xrGetVulkanGraphicsDeviceKHR, then the runtime must return XR_ERROR_HANDLE_INVALID.
is not 100% clear whether calling xrCreateVulkanInstance multiple times is allowed
and how a second call to xrGetVulkanGraphicsDevice2KHR with a dfferent VkInstance
should be handled.
For this implementation xrCreateVulkanDeviceKHR will only consider the most recent call
to xrGetVulkanGraphicsDevice2KHR and the VkInstance that was used for this call.
This enforces at least that VkPhysicalDevice is a child of the cached VkInstance when
xrCreateVulkanDeviceKHR is called, because using a different VkPhysicalDevice would be
an error.