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/renderthread/RenderThread.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/renderthread/RenderThread.cpp')
-rw-r--r-- | libs/hwui/renderthread/RenderThread.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 1450ec98dabf..055458397023 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -16,8 +16,12 @@ #include "RenderThread.h" -#include "../renderstate/RenderState.h" -#include "../pipeline/skia/SkiaOpenGLReadback.h" +#include "hwui/Bitmap.h" +#include "renderstate/RenderState.h" +#include "renderthread/OpenGLPipeline.h" +#include "pipeline/skia/SkiaOpenGLReadback.h" +#include "pipeline/skia/SkiaOpenGLPipeline.h" +#include "pipeline/skia/SkiaVulkanPipeline.h" #include "CanvasContext.h" #include "EglManager.h" #include "OpenGLReadback.h" @@ -433,6 +437,22 @@ RenderTask* RenderThread::nextTask(nsecs_t* nextWakeup) { return next; } +sk_sp<Bitmap> RenderThread::allocateHardwareBitmap(SkBitmap& skBitmap) { + auto renderType = Properties::getRenderPipelineType(); + switch (renderType) { + case RenderPipelineType::OpenGL: + return OpenGLPipeline::allocateHardwareBitmap(*this, skBitmap); + case RenderPipelineType::SkiaGL: + return skiapipeline::SkiaOpenGLPipeline::allocateHardwareBitmap(*this, skBitmap); + case RenderPipelineType::SkiaVulkan: + return skiapipeline::SkiaVulkanPipeline::allocateHardwareBitmap(*this, skBitmap); + default: + LOG_ALWAYS_FATAL("canvas context type %d not supported", (int32_t) renderType); + break; + } + return nullptr; +} + } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */ |