[vulkan] Improve external semaphore handling

Use vkQueueWaitIdle instead of creating an internal fence and
calling vkQueueSubmit+vkWaitForFences+vkResetFences.

This fixes a problem where we would early out when
post_wait_sync_fds is not empty and improves performance
some by reducing the number of round-trips to the host.

No change in behavior.

Change-Id: I1d9fe96239357d338f132b5d22ea5a74abdd5516
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index f88abde..6a1beb0 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -235,7 +235,6 @@
         std::vector<HostMemBlocks> hostMemBlocks { VK_MAX_MEMORY_TYPES };
         uint32_t apiVersion;
         std::set<std::string> enabledExtensions;
-        VkFence fence = VK_NULL_HANDLE;
     };
 
     struct VkDeviceMemory_Info {
@@ -1069,10 +1068,6 @@
                 destroyHostMemAlloc(enc, device, &block);
             }
         }
-
-        if (info.fence != VK_NULL_HANDLE) {
-            enc->vkDestroyFence(device, info.fence, nullptr);
-        }
     }
 
     VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
@@ -2632,8 +2627,6 @@
         std::vector<VkSemaphore> pre_signal_semaphores;
         std::vector<zx_handle_t> post_wait_events;
         std::vector<int> post_wait_sync_fds;
-        VkDevice device = VK_NULL_HANDLE;
-        VkFence* pFence = nullptr;
 
         VkEncoder* enc = (VkEncoder*)context;
 
@@ -2670,15 +2663,11 @@
 #ifdef VK_USE_PLATFORM_FUCHSIA
                     if (semInfo.eventHandle) {
                         post_wait_events.push_back(semInfo.eventHandle);
-                        device = semInfo.device;
-                        pFence = &info_VkDevice[device].fence;
                     }
 #endif
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
                     if (semInfo.syncFd >= 0) {
                         post_wait_sync_fds.push_back(semInfo.syncFd);
-                        device = semInfo.device;
-                        pFence = &info_VkDevice[device].fence;
                     }
 #endif
                 }
@@ -2701,20 +2690,9 @@
 
         if (input_result != VK_SUCCESS) return input_result;
 
-        if (post_wait_events.empty())
-            return VK_SUCCESS;
-
-        if (*pFence == VK_NULL_HANDLE) {
-            VkFenceCreateInfo fence_create_info = {
-                VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, 0, 0,
-            };
-            enc->vkCreateFence(device, &fence_create_info, nullptr, pFence);
+        if (!post_wait_events.empty() || !post_wait_sync_fds.empty()) {
+            enc->vkQueueWaitIdle(queue);
         }
-        enc->vkQueueSubmit(queue, 0, nullptr, *pFence);
-        static constexpr uint64_t MAX_WAIT_NS =
-            5ULL * 1000ULL * 1000ULL * 1000ULL;
-        enc->vkWaitForFences(device, 1, pFence, VK_TRUE, MAX_WAIT_NS);
-        enc->vkResetFences(device, 1, pFence);
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
         for (auto& event : post_wait_events) {