[vulkan] Improve QueueSubmit handling
Change-Id: Id4036c9fe5113c0c193efed31c5328e8ab33475b
diff --git a/system/vulkan/func_table.cpp b/system/vulkan/func_table.cpp
index ff12cfe..3ce65a1 100644
--- a/system/vulkan/func_table.cpp
+++ b/system/vulkan/func_table.cpp
@@ -235,7 +235,8 @@
AEMU_SCOPED_TRACE("vkQueueSubmit");
auto vkEnc = HostConnection::get()->vkEncoder();
VkResult vkQueueSubmit_VkResult_return = (VkResult)0;
- vkQueueSubmit_VkResult_return = vkEnc->vkQueueSubmit(queue, submitCount, pSubmits, fence);
+ auto resources = ResourceTracker::get();
+ vkQueueSubmit_VkResult_return = resources->on_vkQueueSubmit(vkEnc, VK_SUCCESS, queue, submitCount, pSubmits, fence);
return vkQueueSubmit_VkResult_return;
}
static VkResult entry_vkQueueWaitIdle(
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 614a39e..fb99ce3 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -1482,6 +1482,13 @@
enc->vkDestroySemaphore(device, semaphore, pAllocator);
}
+ VkResult on_vkQueueSubmit(
+ void* context, VkResult,
+ VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) {
+ VkEncoder* enc = (VkEncoder*)context;
+ return enc->vkQueueSubmit(queue, submitCount, pSubmits, fence);
+ }
+
void unwrap_VkNativeBufferANDROID(
const VkImageCreateInfo* pCreateInfo,
VkImageCreateInfo* local_pCreateInfo) {
@@ -1519,9 +1526,6 @@
}
}
- void unwrap_vkQueueSubmit(uint32_t, const VkSubmitInfo*, VkSubmitInfo*) {
- }
-
// Action of vkMapMemoryIntoAddressSpaceGOOGLE:
// 1. preprocess (on_vkMapMemoryIntoAddressSpaceGOOGLE_pre):
// uses address space device to reserve the right size of
@@ -2001,6 +2005,13 @@
mImpl->on_vkDestroySemaphore(context, device, semaphore, pAllocator);
}
+VkResult ResourceTracker::on_vkQueueSubmit(
+ void* context, VkResult input_result,
+ VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) {
+ return mImpl->on_vkQueueSubmit(
+ context, input_result, queue, submitCount, pSubmits, fence);
+}
+
void ResourceTracker::unwrap_VkNativeBufferANDROID(
const VkImageCreateInfo* pCreateInfo,
VkImageCreateInfo* local_pCreateInfo) {
@@ -2011,11 +2022,6 @@
mImpl->unwrap_vkAcquireImageANDROID_nativeFenceFd(fd, fd_out);
}
-void ResourceTracker::unwrap_vkQueueSubmit(
- uint32_t submitCount, const VkSubmitInfo* pSubmits, VkSubmitInfo* local_pSubmits) {
- mImpl->unwrap_vkQueueSubmit(submitCount, pSubmits, local_pSubmits);
-}
-
VkResult ResourceTracker::on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(
void* context,
VkResult input_result,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 4cfebba..4da1292 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -195,14 +195,15 @@
void* context,
VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks *pAllocator);
+ VkResult on_vkQueueSubmit(
+ void* context, VkResult input_result,
+ VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+
void unwrap_VkNativeBufferANDROID(
const VkImageCreateInfo* pCreateInfo,
VkImageCreateInfo* local_pCreateInfo);
void unwrap_vkAcquireImageANDROID_nativeFenceFd(int fd, int* fd_out);
- void unwrap_vkQueueSubmit(
- uint32_t submitCount, const VkSubmitInfo* pSubmits, VkSubmitInfo* local_pSubmits);
-
VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(
void* context,
VkResult input_result,
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 10bbeab..8eb589d 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -1428,7 +1428,6 @@
}
}
local_fence = fence;
- mImpl->resources()->unwrap_vkQueueSubmit(submitCount, pSubmits, local_pSubmits);
if (local_pSubmits)
{
for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)