summaryrefslogtreecommitdiff
path: root/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp
AgeCommit message (Collapse)Author
2022-09-27Fix crash where trim memory resulted in HWUI deleting the surface.Derek Sollenberger
When HWUI is given the TRIM_MEMORY_COMPLETE signal it deletes all of the associated GPU resources. In doing so it also deleted the GL/Vk handle to the the ANativeWindow. So if the app attempted to recover and draw new content it would crash because we no longer had a surface to reinitialize and render into. Test: atest hwui_unit_tests Bug: 233388563 Change-Id: I54f3f0dadc3dfc89d2b1f567d36611f6a966c4f0 (cherry picked from commit b830772f7861207924b2a255a6ab9178befa664f)
2022-06-01Make GPU duration metrics more accurate for VulkanAlec Mouri
In the Vulkan pipeline, the GPU start time was measured to be when swapBuffers starts. But the command queue has already been submitted at this point, which means that the GPU work would already have begun. This means that it's possible to measure a negative time since for very light GPU workloads, the GPU fence can fire prior to CPU making it to swapBuffers(). To compensate, instead measure from after skia completed submitting GPU commands, until the GPU fence fires. Since it is theoretically possible for GPU work to complete if the render thread gets descheduled immediately after submitting the GPU, we also add some clamping to ensure that the duration from command submission -> completion of GPU work is nonnegative. Bug: 230713131 Test: atest android.view.cts.FrameMetricsListenerTest Change-Id: Ia30b7732eaab71e4e29766f788d5cd94ec63c38a
2022-03-28Update the global light position based on the rotation of the surface.Derek Sollenberger
Vulkan enables clients like HWUI to manage buffer rotation directly, but in doing so HWUI must transform any point lights so that they end up in the correct place relative to the display. Bug: 195934485 Bug: 205493984 Test: atest CtsUiRenderingTestCases Change-Id: I84b43ad5f422b042c40e89477c31685b7726ce3f
2021-05-22Use TraceUtils.h from gui shared library.rnlee
Test: It makes Bug: 183120308 Change-Id: I331262dd2da59817031f0c708f4c102041dcb5e0
2021-04-08Make SkiaVulkanPipeline go through RenderThread to get VulkanManger.Greg Daniel
Previously the pipeline held a referance to the VulkanManager on the RenderThread. However if the RenderThread ever deleted or recreated its VulkanManager the pipline would not update its reference and cause crashes when accessed. This change makes it so the pipeline always goes through the RenderThread to get the VulkanManager. Test: Manual build and running on phone Bug: b/184287126, b/183289296 Change-Id: I52b37d0aa85b553e358285fa3654c2169971ffde
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)
2020-10-15Update SkiaVulkanPipeline include to GrDirectContextAdlai Holler
Just a name change, no functional effect. Change-Id: I28c799e942e3c745ce54a5bb793a1a71df8adbef
2020-05-07Avoid excessive KGSL mapsJohn Reck
Hook MIN_UNDEQUEUED_BUFFERS if possible to avoid thrashing kgsl maps when render_ahead is being used Bug: 143555869 Test: verified kgsl maps only happened once per buffer Change-Id: I985fae0a9a7635be3a1cf6177186e5541a1169df
2020-02-06Ensure SkiaPipeline always has a valid colorspace.Derek Sollenberger
Previously we didn't assign a colorspace to the pipeline until it was provided a surface to render into. This resulted in undefined behavior if the application attempted to render an offscreen layer before the OS provided the main window with its surface. Now instead of deferring setting whether or not the application is wide gamut we do initialize it to a default setting when the pipeline is created. Bug: 148042673 Test: apct/device_boot_health_check_extra_postsubmit Change-Id: I84d743511e949ac977486470bb14eec936de7f88
2019-06-19Split lighting out of SkiaPipelineFedor Kudasov
ReorderBarierDrawables includes SkiaPipeline just for the sake of lighting, however SkiaPipeline brings much more unnecessary dependencies. Splitting lighting our of SkiaPipeline should make dependency resolution simpler. Bug: 117921091 Test: all tests should pass Change-Id: I6adf7c43555cfa3ff7090a1197fc11160d3a85ec
2019-04-12Support render-ahead in vulkanJohn Reck
Bug: 127822449 Test: verified render_ahead working with skiavk Change-Id: Iae1b227a763f6def035057f38cca4b0ab65c7e82
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-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-24Merge "Don't assume all FP16 bitmaps are linearly encoded."Derek Sollenberger
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-23Don't assume all FP16 bitmaps are linearly encoded.Derek Sollenberger
The bitmap.create() function that does not take a colorspace does not enforce that the bitmap is linearly encoded and as such it is possible for us to end up with FP16 bitmaps that are sRGB encoded. Given that we want to remove that restriction (see b/120870651) we update getColorSpace to report the actual colorSpace of the underlying bitmap. This pulls a thread that causes a chain of updates to various classes to ensure proper handling of the native colorspace. Bug: 120904891 Test: CtsUiRenderingTestCases Change-Id: I27780aa603138b0e48f9320c2837bc53e22cdf95
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-14Store VkPipelineCache to ShaderCacheStan Iliev
Store vulkan pipeline cache in ShaderCache. Avoid writing to disk unless pipeline cache size has changed or there was a new shader compilation. Test: Ran app startup test. Ran Calc app. Bug: 122659224 Change-Id: Ie54ea8f0ee9c87387c310b369b2350310e20fa13
2018-12-18Cleanup of Bitmap.h entry points.Derek Sollenberger
All Bitmap constructors have been made private and the only way to create one is through the allocate or createFrom factories. SkColorSpace is now explicitly passed in to all the factories and is no longer assumed to be sRGB. Test: atest CtsGraphicsTestCases Change-Id: I92c1c5c59df6de7fdd90e9504a2c2717cb854588
2018-12-18Merge "New WebViewFunctor API"John Reck
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-14New WebViewFunctor APIJohn Reck
Should function alongside existing functor API. Bug: 120997728 Test: hwuiunit passes Change-Id: I8f6143d0be1111431b55016f34de319f6b8c8910
2018-12-07Merge "Revert "Revert "Make HWUI's surface Reliable^TM"""John Reck
2018-12-06Revert "Revert "Make HWUI's surface Reliable^TM""John Reck
This reverts commit dd08224e4d75689c42bf452d44617f84072649a1. Bug: 120097554 Bug: 120342364 Bug: 120421537 Test: verified emulator can boot OK, with no log warnings Test: verified keyboard works in landscape Change-Id: Iae2cd1140d81755b126adfb21ec885181f3bc6b6
2018-12-04Merge "Set color space on Vulkan render target surface"TreeHugger Robot
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-12-03Revert "Make HWUI's surface Reliable^TM"Bo Hu
This reverts commit 650bd9a7b35139354916d2522b59cc57eb5fddc3. Reason for revert: broken emulator b/120342364 Exempt-From-Owner-Approval: Change-Id: If05d9d87325e1d836375d7dc79ff66ef057d228d
2018-11-28Make HWUI's surface Reliable^TMJohn Reck
You won't believe this one weird trick to make EGL_BAD_ALLOC errors never happen again! libgui hates it! Bug: way too many to list Test: none - there probably should be, though Change-Id: I8e7fc3e584f90c01e0fd932497604a1d93710ba6
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-11-06Rename VkFunctorDrawable->VkInteropFunctorDrawableChris Blume
The Vulkan functor is currently doing interop, calling into the real OpenGL functor. We will be adding a real, non-interop Vulkan functor soon. In order to enable that, this patch renames the existing VkFunctorDrawable to VkInteropFunctorDrawable. That allows us to use the name VkFunctorDrawable for the real functor. Test: This is a simple rename. Existing unit tests should work. BUG=115613038 Change-Id: I427ad4d17ee92c3832e7bace55450b41a036f557
2018-10-03Make sure we set the vulkan color type in SkiaVulkanPipeline.Greg Daniel
Test: manual build and testing. Change-Id: I00317569d456646ab3328cab276511327fe39047
2018-09-28Merge "Partially revert "[HWUI] Implement legacy color mode.""TreeHugger Robot
2018-09-27Partially revert "[HWUI] Implement legacy color mode."Peiyong Lin
Reason for partially revert: Step back a little bit to think about how we want to move the view system forward. This patch removes the legacy mode we have added, as well as move color type and color space of the surface to SkiaPipeline. BUG: 111436479 BUG: 113530681 Test: Build, flash, boot and check dumpsys SurfaceFlinger Change-Id: I1ab7b88d41347284d87649618e5a15f5c6bcf8fe
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-18Implement WebView support for Vulkan using temporary bufferStan Iliev
Draw WebView in an offscreen GL buffer, then import and draw the buffer with Vulkan. Bug: 115610873 Test: Passed WebView CTS tests that are part of UiRendering. Change-Id: Ida137fe9b8652d2a936ec2798b909be7e77b3462
2018-09-13[HWUI] Implement legacy color mode.Peiyong Lin
Previously, HWUI always produces SRGB buffers. We introduced new APIs for SurfaceFlinger, a.k.a. the composer service to return to composition preference for data space, and pixel format. This patch makes HWUI query composition preference from composer service, and creates the corresponding EGL surface with the correct attributes. In legacy mode, HWUI will take the pixel value from source color space, and interpret it as pixel value in destination color space. BUG: 111436479 BUG: 113530681 Test: Build, flash, boot and check dumpsys SurfaceFlinger Change-Id: I64562d5ea6f653076c8b448feb56b5e0624bc81c
2018-09-10Refactor HWUI readback code to be backend independentStan Iliev
Implement readback from Surface, TextureView and HW Bitmap for Vulkan pipeline by wrapping the graphics buffer in an SkImage. Refactor both Vulkan and GL readback to use common code. TextureView readback is moved from IRenderPipeline interface to Readback class. Refactor all 3 readback flows to use common implementation. Test: Passed all view, uirendering and graphics CTS tests with GL Test: Passed many CTS test with Vulkan, that require readback Bug: 113673613 Change-Id: Ifbfd8170a5401f87a709b4b1b9fa058e8e11768d
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-04Revert "Revert "Revert "TextureView Vulkan support and optimized OpenGL draw"""Stan Iliev
This reverts commit 85f9096b5272c9a39e592e2e97cbbe6cb0e767ab. Reason for revert: lensblur broken. Change-Id: I83ac163159fc537bc15936a0f8597a7512ca9d6e
2018-08-31Revert "Revert "TextureView Vulkan support and optimized OpenGL draw""Stan Iliev
This reverts commit 867c43de0544217d26c3ee18f4d6603bb2ea97ce. Reason for revert: Fixed issue with unsupported hardware buffer formats by landing https://skia-review.googlesource.com/c/skia/+/150470 "Support more hardware buffer formats" Bug: 113673613 Change-Id: I1f7c528f138e290160e75833c8d989d9535002ee
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
2018-08-29TextureView Vulkan support and optimized OpenGL drawStan Iliev
Render TextureView as hardware bitmaps, instead of GL textures. Cache SkImage for each observed GraphicBuffer, which is faster even for GL. Implement C++ SurfaceTexture, which allows Java SurfaceTexture to be used with Vulkan HWUI render thread and application GL. threads. Delete GLLayer and VkLayer classes and texture code from old HWUI pipeline. Test: Ran skiagl and skiavk pipeline with a TextureView app. Test: TextureView CTS tests pass for GL pipeline. Test: Ran Android NDK Native codec sample app. Change-Id: Idc94f864ce2d34fd6ceff4be4fc7d3327e99879c
2018-05-03Delete a bunch of codeJohn Reck
This removes the duality of DisplayList, removing a small amount of overhead Test: buids & hwuiunit passes Change-Id: I8bb3a20e9ead1caec4b4a8a3e9f2c08f717a7096
2018-04-30Respect a Layer's (e.g. SurfaceTexture) colorSpace when compositingDerek Sollenberger
This CL extracts the android_dataspace from the GLConsumer and converts it to a SkColorSpace. HWUI always expects to composite into an sRGB destination so when we draw the layer we run the draw through a colorFilter that converts the input colorSpace into that of the destination. Test: CtsViewTestCases Bug: 78016220 Change-Id: Ic0446a0d861e86a5a9d0382346b57fcc45c8a61b
2017-11-03Format the world (or just HWUI)John Reck
Test: No code changes, just ran through clang-format Change-Id: Id23aa4ec7eebc0446fe3a30260f33e7fd455bb8c
2017-06-14Use RGBA16F layers when wide color gamut rendering is onRomain Guy
Layers created using View.setLayerType() or Canvas.saveLayer() need to be RGBA16F/scRGB-nl when within a window that requested wide color gamut rendering. Bug: 29940137 Test: CtsUiRenderingTestCases, CtsGraphicsTestCases, hwui_unit_tests Change-Id: I42fd6355448c92041491a7109e3ac8a153d38bf9
2017-06-02Merge "Implement HW Bitmap for Skia pipeline"TreeHugger Robot
2017-06-02Implement HW Bitmap for Skia pipelineStan Iliev
Implement HW Bitmap for Skia pipeline. Use new Skia SkImage::MakeFromAHardwareBuffer API, which will enable to record HW Bitmap into a picture. Move logic that uploads SkBitmap into a GraphicBuffer into pipeline specific classes. Test: All CTS and other tests pass for HWUI pipleine. For Skia pipeline graphics CTS tests pass, 2 UIRendering CTS tests which excise HW bitmaps with color spaces fail, bitmapShaderEglImage macrobench fails (to be fixed by a CL in Skia), HWUI unit tests pass, no EGL leaks found. Change-Id: Id5926d7cccd81af8b55400f44fb524a427543d05
2017-06-02Enable wide color gamut renderingRomain Guy
When wide color gamut rendering is requested, hwui will now use an rgba16f scRGB-nl surface for rendering. This change also fixes the way screenshots are handled in the platform to behave properly with wide gamut rendering. This change does not affect hardware layers. They also need to use rgba16f scRGB-nl; this will be addressed in another CL. Bug: 29940137 Test: CtsUiRenderingTestCases, CtsGraphicsTestCases Change-Id: I68fd96c451652136c566ec48fb0e97c2a7a257c5