[Mesa-dev] [PATCH 20/20 v4]] anv: Implement VK_ANDROID_native_buffer (v4)
Tapani Pälli
tapani.palli at intel.com
Fri Sep 15 07:43:56 UTC 2017
On 09/15/2017 01:06 AM, Chad Versace wrote:
> This implementation is correct (afaict), but takes two shortcuts
> regarding the import/export of Android sync fds.
>
> Shortcut 1. When Android calls vkAcquireImageANDROID to import a sync
> fd into a VkSemaphore or VkFence, the driver instead simply blocks on
> the sync fd, then puts the VkSemaphore or VkFence into the signalled
> state. Thanks to implicit sync, this produces correct behavior (with
> extra latency overhead, perhaps) despite its ugliness.
>
> Shortcut 2. When Android calls vkQueueSignalReleaseImageANDROID to export
> a collection of wait semaphores as a sync fd, the driver instead
> submits the semaphores to the queue, then returns sync fd -1, which
> informs the caller that no additional synchronization is needed.
> Again, thanks to implicit sync, this produces correct behavior (with
> extra batch submission overhead) despite its ugliness.
>
> I chose to take the shortcuts instead of properly importing/exporting
> the sync fds for two reasons:
>
> Reason 1. I've already tested this patch with dEQP and with demos
> apps. It works. I wanted to get the tested patches into the tree now,
> and polish the implementation afterwards.
>
> Reason 2. I want to run this on a 3.18 kernel (gasp!). In 3.18, i915
> supports neither Android's sync_fence, nor upstream's sync_file, nor
> drm_syncobj. Again, I tested these patches on Android with a 3.18
> kernel and they work.
>
> I plan to quickly follow-up with patches that remove the shortcuts and
> properly import/export the sync fds.
>
> Non-Testing
> ===========
> I did not test at all using the Android.mk buildsystem. I probably
> broke it. Please test and review that.
>
> Testing
> =======
> I tested with 64-bit ARC++ on a Skylake Chromebook and a 3.18 kernel.
> The following pass:
>
> a little spinning cube demo APK
> dEQP-VK.info.*
> dEQP-VK.api.smoke.*
> dEQP-VK.api.info.instance.*
> dEQP-VK.api.info.device.*
> dEQP-VK.api.wsi.android.*
>
> v2:
> - Reject VkNativeBufferANDROID if the dma-buf's size is too small for
> the VkImage.
> - Stop abusing VkNativeBufferANDROID by passing it to vkAllocateMemory
> during vkCreateImage. Instead, directly import its dma-buf during
> vkCreateImage with anv_bo_cache_import(). [for jekstrand]
> - Rebase onto Tapani's VK_EXT_debug_report changes.
> - Drop `CPPFLAGS += $(top_srcdir)/include/android`. The dir does not
> exist.
>
> v3:
> - Delete duplicate #include "anv_private.h". [per Tapani]
> - Try to fix the Android-IA build in Android.vulkan.mk by following
> Tapani's example in
> <https://lists.freedesktop.org/archives/mesa-dev/2017-September/169602.html>.
> But I truncated the added include path from
> "frameworks/native/vulkan/include/hardware" to
> "frameworks/native/vulkan/include", and inserted it *after*
> $(MESA_TOP)/include/vulkan, so that #include <hardware/hwvulkan.h>
> hopefully works in both the Autotools and Android.mk build.
Unfortunately this does not seem to do the trick, I can see Mesa include
is before the frameworks one but I still get the errors. I'll try to
figure out some cure.
build log: http://tpalli.kapsi.fi/vulkan.log
// Tapani
More information about the mesa-dev
mailing list