summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/VulkanManager.cpp
AgeCommit message (Collapse)Author
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
2018-11-29In VulkanManager enable ycbcr feature on VkDevice.Greg Daniel
Test: manual build and test Change-Id: I820670ee7566e1dd5c86cfa473725b91e4eb6154
2018-11-13Handle ANativeWindow resize with Vulkan swapchainStan Iliev
Recreate VulkanSurface, if ANativeWindow has been resized. This new code is hit when wallpaper is resized from 64x64 to real size. Bug: 119111018 Test: Wallpaper is shawn correctly with Vulkan rendering Change-Id: I5e43310e5ee8597a7f326d51b1773e2cf68b603a
2018-10-26Remove SyncFeatures usage from VulkanManagerStan Iliev
SyncFeatures is implemented by quering available EGL extensions. For Vulkan we assume these features are present. SyncFeatures is crashing for Vulkan, because EGL is not initialized. Test: TextureViewCameraTest#testTextureViewActivity is passing Bug: 116117654 Change-Id: I57e6ce1c0f00c1b073d0a2ab2695d9fbecfd2b33
2018-10-04Cleanup of barriers used in swapching aquiring and presenting.Greg Daniel
Test: manual building and running on pixel 2 Change-Id: I72cc95ad7d11634e8d0627737d699a611e8d1d5f
2018-10-02Minor clean up/fixes of VulkanManager api version checks.Greg Daniel
Test: manual build and run Change-Id: I04b0ed0b6c344cc8aac662b1a2a277d1aea0cd2c
2018-09-26Add support for wide gamut render targets in VulkanStan Iliev
Support rendering into FP16 render targets. Enforce correct color space for both ARGB and F16 color formats. Test: About 30 additional CTS tests pass with Vulkan Bug: 116117654 Change-Id: I61941a2d79a0e69837d20816c90d3e936fd7acb0
2018-09-24Implemenet fenceWait and createReleaseFence in VulkanManager.Greg Daniel
Test: Manual building and testing on walleye device. Change-Id: I9f5fa259d6457805b546d2b6b11ce4b0800621eb
2018-09-20Fix crash when EGLSurface is no longer valid.Derek Sollenberger
The EGLSurface stored in the pipeline can become obsolete if the EglManager/RenderThread has to destroy the context. This CL enables the RenderThread to notify all active pipelines that their surface is invalid. Bug: 115290937 Test: hwui_unit_tests Change-Id: Ib3054822273bc35406630b7442229a81b39a2c91
2018-09-18Refactor DeviceInfo in HWUIDerek Sollenberger
Remove the need for both Vulkan and EGL managers to initialize it. Also remove unused code paths. Test: hwui_unit_tests Change-Id: I33ad881468eddbf91ec63207f0d82bed8d97f5ad
2018-09-05Reland "TextureView Vulkan support and optimized OpenGL draw"Stan Iliev
Fix an issue with incorrect texture matrix, when there is 90/270 rotation. This happened, because after refactoring SkImage has buffer width/height, instead of layer width/height. This reverts commit a683eb3945320f592f58705c3c31b3c044f4bd72. Bug: 113673613 Test: Ran TextureView CTS and lensblur in camera app Change-Id: If3bcf9cd5195de09fd67a753708568a8e3ca3a9a
2018-09-04Add cache validation to ensure the validityYichi Chen
Create cache identity from GL_VERSION and store in ShaderCache. In the next time ShaderCache is restored from disk, compare the cache identity to ensure its validity. If GL_VERSION changes in between, flush out entire FileBlobCache and start from an empty one. Bug: b/71800782 Test: Wrote a new unit test to save and restore ShaderCache Test: hwui_unit_tests Change-Id: Ie573dc4f18733eee090725be30445d879765231b
2018-08-30Merge "Revert "TextureView Vulkan support and optimized OpenGL draw""Stan Iliev
2018-08-30Revert "TextureView Vulkan support and optimized OpenGL draw"John Reck
This reverts commit c8e22a653297837da9a80b0ba65f6854c8986c96. Reason for revert: broke camera, b/113555199 Bug: 113555199 Change-Id: Iae9b462694d5de0cd99427afead63b567fb4d71d