diff options
author | John Reck <jreck@google.com> | 2018-05-07 08:14:14 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2018-05-07 08:14:43 -0700 |
commit | 437f6fb15cf66995b66f745254d928205256fdbf (patch) | |
tree | c45fc2c7158e60358f555970b1470b026f5bf324 /libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp | |
parent | 9e29859d2ea19ab9a995375b176dbb2a213ae03e (diff) |
Verify gralloc supports fp16
Bug: 77973662
Test: builds
Change-Id: Id8a53885178d698c7b2fd6fc5ea8d4e36ce2ef15
Diffstat (limited to 'libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp index 188ad78b8c82..766fab61f3db 100644 --- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp @@ -29,8 +29,8 @@ #include "utils/TraceUtils.h" #include <GrBackendSurface.h> -#include <SkImageInfo.h> #include <SkBlendMode.h> +#include <SkImageInfo.h> #include <cutils/properties.h> #include <strings.h> @@ -63,8 +63,7 @@ Frame SkiaOpenGLPipeline::getFrame() { bool SkiaOpenGLPipeline::draw(const Frame& frame, const SkRect& screenDirty, const SkRect& dirty, const LightGeometry& lightGeometry, LayerUpdateQueue* layerUpdateQueue, const Rect& contentDrawBounds, - bool opaque, bool wideColorGamut, - const LightInfo& lightInfo, + bool opaque, bool wideColorGamut, const LightInfo& lightInfo, const std::vector<sp<RenderNode>>& renderNodes, FrameInfoVisualizer* profiler) { mEglManager.damageFrame(frame, dirty); @@ -151,8 +150,8 @@ bool SkiaOpenGLPipeline::copyLayerInto(DeferredLayerUpdater* deferredLayer, SkBi if (!tmpSurface.get()) { surfaceInfo = surfaceInfo.makeColorType(SkColorType::kN32_SkColorType); - tmpSurface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), - SkBudgeted::kYes, surfaceInfo); + tmpSurface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), SkBudgeted::kYes, + surfaceInfo); if (!tmpSurface.get()) { ALOGW("Unable to readback GPU contents into the provided bitmap"); return false; @@ -172,11 +171,10 @@ bool SkiaOpenGLPipeline::copyLayerInto(DeferredLayerUpdater* deferredLayer, SkBi // if we fail to readback from the GPU directly (e.g. 565) then we attempt to read into 8888 // and then draw that into the destination format before giving up. SkBitmap tmpBitmap; - SkImageInfo bitmapInfo = SkImageInfo::MakeN32(bitmap->width(), bitmap->height(), - bitmap->alphaType()); + SkImageInfo bitmapInfo = + SkImageInfo::MakeN32(bitmap->width(), bitmap->height(), bitmap->alphaType()); if (tmpBitmap.tryAllocPixels(bitmapInfo) && - tmpImage->readPixels(bitmapInfo, tmpBitmap.getPixels(), - tmpBitmap.rowBytes(), 0, 0)) { + tmpImage->readPixels(bitmapInfo, tmpBitmap.getPixels(), tmpBitmap.rowBytes(), 0, 0)) { SkCanvas canvas(*bitmap); SkPaint paint; paint.setBlendMode(SkBlendMode::kSrc); @@ -190,7 +188,8 @@ bool SkiaOpenGLPipeline::copyLayerInto(DeferredLayerUpdater* deferredLayer, SkBi } static Layer* createLayer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight, - sk_sp<SkColorFilter> colorFilter, int alpha, SkBlendMode mode, bool blend) { + sk_sp<SkColorFilter> colorFilter, int alpha, SkBlendMode mode, + bool blend) { GlLayer* layer = new GlLayer(renderState, layerWidth, layerHeight, colorFilter, alpha, mode, blend); layer->generateTexture(); @@ -288,7 +287,6 @@ private: }; struct FormatInfo { - PixelFormat pixelFormat; GLint format, type; bool isSupported = false; @@ -299,7 +297,16 @@ static bool gpuSupportsHalfFloatTextures(renderthread::RenderThread& renderThrea static bool isSupported = renderThread.queue().runSync([&renderThread]() -> bool { renderThread.requireGlContext(); sk_sp<GrContext> grContext = sk_ref_sp(renderThread.getGrContext()); - return grContext->colorTypeSupportedAsImage(kRGBA_F16_SkColorType); + if (!grContext->colorTypeSupportedAsImage(kRGBA_F16_SkColorType)) { + return false; + } + sp<GraphicBuffer> buffer = new GraphicBuffer(1, 1, PIXEL_FORMAT_RGBA_FP16, + GraphicBuffer::USAGE_HW_TEXTURE | + GraphicBuffer::USAGE_SW_WRITE_NEVER | + GraphicBuffer::USAGE_SW_READ_NEVER, + "tempFp16Buffer"); + status_t error = buffer->initCheck(); + return error != OK; }); return isSupported; } |