diff options
author | Stan Iliev <stani@google.com> | 2017-05-24 13:28:36 -0400 |
---|---|---|
committer | Stan Iliev <stani@google.com> | 2017-06-02 15:59:42 -0400 |
commit | 7bc3bc6028d0c7b16fec72c3922fc627c8657951 (patch) | |
tree | 11e2869037fb89183e2a857b10b0aa76267edc34 /libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp | |
parent | a9861756b5a79e23b317ef7a89a504a68ac61e34 (diff) |
Implement HW Bitmap for Skia pipeline
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
Diffstat (limited to 'libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp index d28e605a051f..9e25514d73f0 100644 --- a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp @@ -158,6 +158,25 @@ void SkiaVulkanPipeline::invokeFunctor(const RenderThread& thread, Functor* func (*functor)(mode, nullptr); } +sk_sp<Bitmap> SkiaVulkanPipeline::allocateHardwareBitmap(renderthread::RenderThread& renderThread, + SkBitmap& skBitmap) { + //TODO: implement this function for Vulkan pipeline + //code below is a hack to avoid crashing because of missing HW Bitmap support + sp<GraphicBuffer> buffer = new GraphicBuffer(skBitmap.info().width(), skBitmap.info().height(), + PIXEL_FORMAT_RGBA_8888, + GraphicBuffer::USAGE_HW_TEXTURE | + GraphicBuffer::USAGE_SW_WRITE_NEVER | + GraphicBuffer::USAGE_SW_READ_NEVER, + std::string("SkiaVulkanPipeline::allocateHardwareBitmap pid [") + + std::to_string(getpid()) + "]"); + status_t error = buffer->initCheck(); + if (error < 0) { + ALOGW("SkiaVulkanPipeline::allocateHardwareBitmap() failed in GraphicBuffer.create()"); + return nullptr; + } + return sk_sp<Bitmap>(new Bitmap(buffer.get(), skBitmap.info())); +} + } /* namespace skiapipeline */ } /* namespace uirenderer */ } /* namespace android */ |