summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/VulkanManager.cpp
AgeCommit message (Collapse)Author
2021-07-15In VuklanManager make sure we have a valid semaphore context before ↵Greg Daniel
destroying it. If errors occured during finishFrame that caused us to not have a semaphore or possibly destroy the semaphore early we will end up with a null mDestroySemaphoreContext in swapBuffers which we tried to destroy unconditionally. I haven't repro'd the connected bug, but based on the crash stack this seems like the likely cause. Test: manual code inspection and build. Bug: 191950033 Change-Id: I0fbd33edff3552b91b980da9e3b2c45bc52a2dd0
2021-06-09Make sure to close vulkan fd's in error casesGreg Daniel
In one set of the fixed cases we actually were never closing the fd. In the other set we would crash with a fatal error. Now both have been updated to handle the failures and correctly close the fd to make sure it all works. However, I don't think this is the route case of the leaking fds from the bug since I don't believe we are seeing any of the corresponding error messages in the logs. Test: Manual running on phone and watching logs. Bug: 187240173 Change-Id: I18babe91b0ec83ca63199f06d3d02ec10e8aea85
2021-05-22Use TraceUtils.h from gui shared library.rnlee
Test: It makes Bug: 183120308 Change-Id: I331262dd2da59817031f0c708f4c102041dcb5e0
2021-05-14Add a mutex to VulkanManager::initialize.Greg Daniel
The initialize call can be made from both an GrallocUploadThread and the RenderThread. So we need a mutex to make sure both threads don't try to initialize in parallel. Bug: 187218890 Test: manual running of device, guessing this could fix bug. Change-Id: I203afd91fad5eacc131c839dff1a1065864b76f8
2021-03-09Use VK_ANDROID_frame_boundary in HWUIHugues Evrard
This extension paves the way to profiling HWUI apps with AGI. Bug: 181645761 Test: manual Change-Id: I03ee66832a9013016dc91904962ce54809b198e6
2021-03-01Remove flushAndSubit from SkiaPipeline renderFrame.Greg Daniel
Previously we would submit a command buffer for the frames draws and then immediately submit a second command buffer that had no commands and just an attached semaphore. This merges those two submit calls into Skia into one call. Test: manual running of system of benches Bug: 175913056 Change-Id: If0d054960de8b459814cbfa9289756f8ee9d4a93 (cherry picked from commit f16ba6019400ec7eb6ac7a2adc05ec06ad5661a1)
2021-01-13Turn on vk unit testsAlec Mouri
* Degrade error when changing the rendering backend from Properties to no longer be fatal. * Support using a single graphics queue for the Vulkan backend. Cloud devices only support a single queue and some Vulkan implementations such as Swiftshader expose only one queue for simplying their implementation, so we'll need to support one. Bug: 175618060 Bug: 162628999 Test: hwui_unit_tests Test: experiment on Pixel 4 enforcing a single queue (settings app, maps, sysui) Change-Id: I495fcabc3c89bd62bbb833998eab4944c6660f6f
2020-09-15Use SkSurface::recordingContext instead of deprecated getContextAdlai Holler
The difference between recording & direct contexts does not matter to Android right now because they don't use DDLs, so there's no functional change here. Change-Id: Iedcdf5c3ce0ccd3c7e1724d8fb45b7882d8c2129
2020-09-03HWUI: remove the redundant present queueYiwei Zhang
This change also fixed that the graphics queue should be the one to wait on upon surface destruction. Bug: 162628999 Bug: 167693610 Test: no new regressions in CtsUiRenderingTestCases with Vulkan backend Change-Id: I919748b85b2194bb4f13e1af6950d6493a17921d
2020-08-20Remove VulkanManager::mCommandPoolLeon Scroggins III
Test: make This is unused. Splitting out from I0289938333e2c3dafcc2ce18e72dca3acf4d5b79. Change-Id: I33eaaa2db86c5d8e3c98c63ba0f6f938e8456cc3
2020-08-17Share Vulkan resources between RenderThread and HardwareBitmapUploaderDerek Sollenberger
The VkInstance and VkDevice are constructs that can be shared between threads and avoid the extra driver allocations associated with them. This CL also fixes a bug where Vulkan uploads were occuring on the thread that invoked the upload and not occuring on the upload thread. Bug: b/162628999 Test: atest CtsUiRenderingTestCases Change-Id: I0289938333e2c3dafcc2ce18e72dca3acf4d5b79
2020-07-28Migrate from GrContext to GrDirectContextAdlai Holler
This is part of an effort to distinguish between different types of contexts in GPU Skia. When using a DeferredDisplayList (DDL) recorder, the context you get is not a direct context and cannot be used for operations like uploading or reading textures. Since Android does not use DDLs, it is not directly affected by this change but other APIs, such as SkImage::MakeFromTexture are being migrated to require a GrDirectContext to increase sanity. Change-Id: I9afbdf3c026a9f9cb6ad2aad904915e189e584d6
2020-05-14Update skia flush call APIs.Greg Daniel
Test: manual Change-Id: I72fa57b04f1b4ea594063ddb4ce6af9507b1fcdb
2020-05-01Revert^2 "hwui: remove FatVector"Jagadeesh Pakaravoor
Revert submission 10449863-revert-fatvector Reason for revert: b/149254345 Original change (of introducing FatVector) was reverted as a stop-gap solution to fix the aforementioned bug. The bug was caused by an ABI lock between Surface's definition (that changed with Region) and lib-imsvt prebuilt. Enabling this change now as we have re-compiled the prebuilt with the change enabled. Doing that via a revert of the revert. Reverted Changes: I8ac66acb8:Revert "hwui: remove FatVector" Ib60dbf3ef:Revert "libui: rewrite Region with FatVector" Original changes: I09dc2fddd:hwui: remove FatVector I265c6c831:libui: rewrite Region with FatVector bug: 149254345 Change-Id: I9fb5e8908434abb9a763992e922445a2dc37e865
2020-03-05Revert "hwui: remove FatVector"Tim Murray
Revert "libui: rewrite Region with FatVector" Revert submission 10248126-fatvector-region Reason for revert: b/149254345 Reverted Changes: I09dc2fddd:hwui: remove FatVector I265c6c831:libui: rewrite Region with FatVector also fix wrong license in FatVector.h Test: boots Bug: 149254345 Change-Id: I8ac66acb8b635324051edd41c5d4092c223157ff
2020-02-07hwui: remove FatVectorTim Murray
FatVector now lives in fw/native/libs/ui. Test: builds, boots, works Bug: 149096186 Change-Id: I09dc2fddd2a238ef47d7853b64b0bfbf74d3f71f
2019-11-08Decouple SurfaceTexture from HWUIStan Iliev
Remove all Skia and HWUI types from SurfaceTexture implementation. Move SurfaceTexture to libgui (ag/9578265). Define private C++ API for SurfaceTexture, which is consumed by DeferredLayerUpdater. Move AutoBackendTextureRelease/Skia code from SurfaceTexture to HWUI. Test: pass CtsUiRenderingTestCases and CtsViewTestCases Bug: 136263580 Change-Id: I3f971bb490f64a3ac0b2a66a89ba935bf7f08213
2019-08-15HWUI-VK: remove duplicate GET_DEV_PROCYiwei Zhang
Test: build, flash and boot Change-Id: Ia3b62c5d31952f85664f1926584fc9438d48dec3
2019-08-02[HWUI] clean up libgui include directivesAlec Mouri
As a first pass removing some stale includes. Bug: 138819035 Change-Id: I7aef319aa8f1b13b6482ef61fda151560e570558 Test: builds
2019-06-26HWUI-VK: Decouple hwui Vulkan backend from Vulkan WSI APIsYiwei Zhang
1. Android support all transforms as exposed by client composition. 2. Properly exposing min/max image size is tracked in http://b/134182502. 3. Current image size and max buffer count are cached in Surface already. 4. Remove surface support check since hwui does not have YUV + CPU consumer. 5. Since HWUI must require those image usage flags, just use them directly, and those are always supported by Vulkan driver and enforced by cts. Bug: 136110987 Test: CtsUiRenderingTestCases and CtsGraphicsTestCases Change-Id: I89bd9afb69a46e3deca09890ce6348c6b61edddf
2019-05-18Merge "Make sure we don't delete VkSemaphores before exporting in VulkanManager"Greg Daniel
2019-05-15Make sure we don't delete VkSemaphores before exporting in VulkanManagerGreg Daniel
Test: Manual building and testing on device to confirm error messages are gone. Bug: b/132358913 Change-Id: I0e22df5eb3bc61a7dd84d87db9a4f67756ecd5ae
2019-05-14Merge "Remove workaround in VulkanSurface for missing vendor flag." into qt-devGreg Daniel
2019-05-14Remove workaround in VulkanSurface for missing vendor flag.Greg Daniel
Test: manual building and testing Bug: b/128923272 Change-Id: I6be67fddbbf06d4eb7efe316f7e6fd12157e2852
2019-04-23Fix deletion of VkSemaphores in VulkanManager.Greg Daniel
We were deleting the VkSemaphore objects too quickly when importing/exporting the semaphores. Even though the semaphore payload gets reset on these operations the VkSemaphore still needs to be finished its use in Vulkan before being deleted. Test: manual build and testing of vulkan apps and vulakn ImageConsumer Bug: b/130643604 Change-Id: I7f03087e477d812c0174ede3a10f12dc1df72ee1
2019-04-12Support render-ahead in vulkanJohn Reck
Bug: 127822449 Test: verified render_ahead working with skiavk Change-Id: Iae1b227a763f6def035057f38cca4b0ab65c7e82
2019-04-02Add workaround for qualcomm vulkan AHDARDWAREBUFFER_USAGE_VENDER_0Greg Daniel
Test: manual building and testing on device. Bugs related to lack of flag go away. Bug: 128923272 Change-Id: I2457988c097d73020162947c346a8716d373185e
2019-04-01Merge "Invalidate Skia shader cache if Vulkan driver has changed"TreeHugger Robot
2019-03-29Invalidate Skia shader cache if Vulkan driver has changedStan Iliev
Test: Ran apps several time and observed shader cache validation Change-Id: I7c2620b9a0eefcb7acedc86647ecf44805518b2f
2019-03-26Fix crash after dequeueNativeBuffer failsStan Iliev
Anytime dequeueNativeBuffer fails, it sets mDequeuedIndex to -1. This is causing a crash latter, when getCurrentSkSurface tries to index mNativeBuffers[mDequeuedIndex]. This CL removes mDequeuedIndex and improves Vulkan swapchain error handling. Test: Ran Camera app Bug: 129024275 Change-Id: Ieeb685c3a1b33f23ce2334d286199a44ace53165
2019-03-21Block GPU on dequeue fence only if it has not signalled alreadyStan Iliev
When Vulkan pipeline dequeues next frame at the beginning of DrawFrame, the dequeue fence has been signalled in most cases. This CL avoids additional work and saves about 0.3ms per frame. There is no need to create VkSemaphore and commit an empty command buffer to the queue if the fence has already signalled. Bug: 128998567 Test: Ran systrace on SelfieCity and observed better performance Change-Id: I3532b785fae90308d922a29f1698f5dbcbd79079
2019-03-21Block GPU on release fence from dequeueBuffer earlierStan Iliev
If dequeueBuffer fence has not fired yet, then submit to the queue and block GPU on VkSemaphore immediatelly. It is not clear why this CL makes a difference, because semaphore was already waited on. Fixes: 128805387 Fixes: 128806388 Fixes: 128807485 Fixes: 128879779 Fixes: 128417453 Bug: 128998567 Test: Ran SelfieCity, Camera360, Settings app Change-Id: I880ba6fa65509ba4c6faca0dc933551efcee423b
2019-03-18Merge "Remove old TaskManager system"John Reck
2019-03-18Remove old TaskManager systemJohn Reck
Replace it with a newer, fancier, WorkQueue-inspired one that's just a global common thread pool. Test: hwuiunit passes Change-Id: Ib5d03104a08bbac9a4ec67a1bfc0db2b35d6700f
2019-03-12Merge "Copy extension names to an owning container to prevent use-after-free"TreeHugger Robot
2019-03-11Copy extension names to an owning container to prevent use-after-freeRoman Kiryanov
Bug: 127660235 Test: make -j Change-Id: I3748b7b4b51f99acf59748675223cef02c22bee2 Signed-off-by: Roman Kiryanov <rkir@google.com>
2019-03-08Directly manage buffer presentation in Vulkan using AHardwareBuffers.Derek Sollenberger
Instead of relying on Vulkan swapchains this CL enables HWUI to directly manage the native window. This allows us to preallocate buffers using our own strategy as well as having no longer having to jump through an unecessary translation layer that resulted in code that was hard to reason about and also introduced inefficiencies. Bug: 123541940 Bug: 119687951 Test: CtsUiRenderingTestCases and CtsGraphicsTestCases Change-Id: I7e5930748795e7ca4a998ab2c608c3c9b6363037
2019-02-28Add ability to change context priority of RT Vulkan queuesStan Iliev
Test: Pixel 3 does not support VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME Bug: 126595186 Change-Id: I4b2e9c6d5f92665fd2274d0aabf4b012a7a29f46
2019-02-20Start RenderThread earlier to preload Vulkan/EGL driversStan Iliev
This CL should fix application startup regression for Vulkan detected by "Hermetic Startup: EmptyActivity" test. EGL drivers are loaded in a temp thread to leave more time in RenderThread for other work. Loading EGL drivers on the RenderThread may cause a perf regression. Test: Ran cold-dropcache-test test. Bug: 122659224 Bug: 123361175 Change-Id: I8ca818e98fac196a41d079be15594caca5cb1bab
2019-02-13Decouple VulkanManager from RenderThreadStan Iliev
This CL allows for more than one VulkanManager to exist. VulkanManager ctor are public allowing for classes other than RenderThread to instantiate it. Secondary VulkanManager can be used to render on a thread other than RT. Test: Ran HWUI unit tests and several apps Change-Id: Ibfd76c86ff67e01617a500902bba7431b928f5c0
2019-02-04Fix crash when VulkanSurface is no longer validStan Iliev
SkiaVulkanPipeline::mVkSurface can become obsolete if RenderThread destroys Vulkan context. This CL enables RenderThread to notify active Vulkan pipelines that their surface is invalid. Improve error handling, when trying to draw a frame with null VulkanSurface. Bug: 123640274 Bug: 123541940 Test: Ran several apps Change-Id: If7fba00713d097192c96179df36e90b54f4f8090
2019-01-29Update Vulkan skia creation to use apiVersion instead of instanceVersionGreg Daniel
This updates to use Skia's new api which takes the vulkan apiVersion instead of the instance version. This is technically more correct since the application apiVersion is really the only client modifiable version value in vulkan. This change also updates the webview structs to use the apiVersion as well. Test: manual build and testing. Change-Id: I6ce7c20949eb7242f7bbe69955b54c0785696891
2019-01-24Remove use of SkColorSpace::Gamut enumBrian Osman
Get the gamut matrix from the color space, compare against sRGB/P3. Test: Refactoring CL. Change-Id: I9f5bcae8c1f637919ee9da892266ea882f16208c
2019-01-18Add support for preTransform in Vulkan swapchain.Greg Daniel
Test: manual building and running of apps. Bug: 110985606 Bug: 122662274 Change-Id: Id53aa1ce028b448b1f12558eec78a60e09512166
2019-01-15VkFunctorDrawable implementationBo Liu
Bug: 115613038 Test: Turning on vulkan with appropriate webview apk does not crash and sort of works. Change-Id: If1504da7a35e4bd74a994ab2c2a351e6bc415a18
2018-12-15[HWUI] Remove hardcoding around wide color gamut.Peiyong Lin
Previously we hardcode wide color gamut in HWUI as scRGB color space with FP16 pixel format. However, the hardware composer doesn't support this combination. This patch plumbs wide color gamut composition preference from composer API to HWUI such that HWUI can now pick the combination of color space and pixel format for the surface. BUG: 111436479 Test: Build, flash and boot, verify with a demo app. Change-Id: I7a8b4d8deca72ef40069dba9d23a3f5e90dbfe5a
2018-12-10Fix temporary stretching when Surface is resized with VulkanStan Iliev
Set NATIVE_WINDOW_SCALING_MODE_FREEZE scaling mode on the surface after Vulkan swapchain is created. This is the scaling mode used by GL as well. Window resize flow depends on preserving this behavior, because SurfaceComposerClient::Transaction::setSize calls are not postponed until a new buffer is enqueued. Test: StatusBar is resized correctly without any glitch. Bug: 118501234 Change-Id: Icfb6805bc362a742e14b993a0b825e5447d6eeb4
2018-12-05Merge "Prefer using 3 buffers in vulkan swapchain."TreeHugger Robot
2018-12-04Prefer using 3 buffers in vulkan swapchain.Greg Daniel
Test: manual build and running. Bug: 119687951 Change-Id: I799955d8e035d01acb991417e95e424848fe711f
2018-12-04Set color space on Vulkan render target surfaceStan Iliev
Test: Pass UiRendering tests with Vulkan pipeline Bug: 116117654 Bug: 111436479 Change-Id: Id58a8a93c6f311402273b1a9e3606c9732f55aec