diff options
author | Scott Lobdell <slobdell@google.com> | 2021-03-29 16:12:49 +0000 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2021-04-02 22:35:29 +0000 |
commit | 21cdef883cc867db55340b25d5c95e19b12ab383 (patch) | |
tree | 93d1444ebe783f53f5f0ae2647592723b27b3fb8 /libs/hwui/renderthread/VulkanManager.cpp | |
parent | 7deab3736bb5f3a92be8ac820096926dce2366ad (diff) | |
parent | d1d45f856fdf68835f5b42eacecab44e6dfa8545 (diff) |
Merge SP1A.210329.001
Change-Id: I1e21c5890b5b2e2f2855f09960bc8eec8aa922bf
Diffstat (limited to 'libs/hwui/renderthread/VulkanManager.cpp')
-rw-r--r-- | libs/hwui/renderthread/VulkanManager.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp index e93824dfbd30..01126860b3ba 100644 --- a/libs/hwui/renderthread/VulkanManager.cpp +++ b/libs/hwui/renderthread/VulkanManager.cpp @@ -336,6 +336,7 @@ void VulkanManager::setupDevice(GrVkExtensions& grExtensions, VkPhysicalDeviceFe GET_DEV_PROC(ResetCommandBuffer); GET_DEV_PROC(ResetFences); GET_DEV_PROC(WaitForFences); + GET_DEV_PROC(FrameBoundaryANDROID); } void VulkanManager::initialize() { @@ -516,6 +517,25 @@ void VulkanManager::finishFrame(SkSurface* surface) { if (semaphore != VK_NULL_HANDLE) { if (submitted == GrSemaphoresSubmitted::kYes) { mSwapSemaphore = semaphore; + if (mFrameBoundaryANDROID) { + // retrieve VkImage used as render target + VkImage image = VK_NULL_HANDLE; + GrBackendRenderTarget backendRenderTarget = + surface->getBackendRenderTarget(SkSurface::kFlushRead_BackendHandleAccess); + if (backendRenderTarget.isValid()) { + GrVkImageInfo info; + if (backendRenderTarget.getVkImageInfo(&info)) { + image = info.fImage; + } else { + ALOGE("Frame boundary: backend is not vulkan"); + } + } else { + ALOGE("Frame boundary: invalid backend render target"); + } + // frameBoundaryANDROID needs to know about mSwapSemaphore, but + // it won't wait on it. + mFrameBoundaryANDROID(mDevice, mSwapSemaphore, image); + } } else { destroy_semaphore(mDestroySemaphoreContext); mDestroySemaphoreContext = nullptr; |