From 25833d29acc1da773e38bc0dd99547d655b2ceaf Mon Sep 17 00:00:00 2001 From: Derek Sollenberger Date: Mon, 14 Jan 2019 13:55:55 -0500 Subject: [PATCH] Standardize the surface origin for each HWUI pipeline. OpenGL prefers a bottom-left origin while Vulkan prefers the top-left. Prior to this change we were inconsistent in Vulkan by creating layers with a bottom-left origin which was different from the primary buffer. Test: CtsUiRenderingTestCases Change-Id: Icfeed4085021cae941aeab58720406e3b3e37923 --- libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp | 2 +- libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h | 1 + libs/hwui/pipeline/skia/SkiaPipeline.cpp | 3 ++- libs/hwui/pipeline/skia/SkiaPipeline.h | 2 +- libs/hwui/pipeline/skia/SkiaVulkanPipeline.h | 1 + libs/hwui/renderthread/IRenderPipeline.h | 1 + 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp index 4338b1cc2a21c..e6e6b0e62305a 100644 --- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp @@ -96,7 +96,7 @@ bool SkiaOpenGLPipeline::draw(const Frame& frame, const SkRect& screenDirty, con SkASSERT(mRenderThread.getGrContext() != nullptr); sk_sp surface(SkSurface::MakeFromBackendRenderTarget( - mRenderThread.getGrContext(), backendRT, kBottomLeft_GrSurfaceOrigin, colorType, + mRenderThread.getGrContext(), backendRT, this->getSurfaceOrigin(), colorType, mSurfaceColorSpace, &props)); SkiaPipeline::updateLighting(lightGeometry, lightInfo); diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h index 4799106978715..66929226a5e27 100644 --- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h +++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h @@ -39,6 +39,7 @@ public: const Rect& contentDrawBounds, bool opaque, const LightInfo& lightInfo, const std::vector >& renderNodes, FrameInfoVisualizer* profiler) override; + GrSurfaceOrigin getSurfaceOrigin() override { return kBottomLeft_GrSurfaceOrigin; } bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; DeferredLayerUpdater* createTextureLayer() override; diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index 2e7850d48e541..d7faaf707aa86 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -174,7 +174,8 @@ bool SkiaPipeline::createOrUpdateLayer(RenderNode* node, const DamageAccumulator SkSurfaceProps props(0, kUnknown_SkPixelGeometry); SkASSERT(mRenderThread.getGrContext() != nullptr); node->setLayerSurface(SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), - SkBudgeted::kYes, info, 0, &props)); + SkBudgeted::kYes, info, 0, + this->getSurfaceOrigin(), &props)); if (node->getLayerSurface()) { // update the transform in window of the layer to reset its origin wrt light source // position diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.h b/libs/hwui/pipeline/skia/SkiaPipeline.h index ff873133c6fb4..94a699bfee317 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.h +++ b/libs/hwui/pipeline/skia/SkiaPipeline.h @@ -48,7 +48,7 @@ public: bool createOrUpdateLayer(RenderNode* node, const DamageAccumulator& damageAccumulator, ErrorHandler* errorHandler) override; - SkColorType getSurfaceColorType() const { return mSurfaceColorType; } + SkColorType getSurfaceColorType() const override { return mSurfaceColorType; } sk_sp getSurfaceColorSpace() override { return mSurfaceColorSpace; } void renderFrame(const LayerUpdateQueue& layers, const SkRect& clip, diff --git a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h index 53ffc4422fd79..9343076369138 100644 --- a/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h +++ b/libs/hwui/pipeline/skia/SkiaVulkanPipeline.h @@ -35,6 +35,7 @@ public: const Rect& contentDrawBounds, bool opaque, const LightInfo& lightInfo, const std::vector >& renderNodes, FrameInfoVisualizer* profiler) override; + GrSurfaceOrigin getSurfaceOrigin() override { return kTopLeft_GrSurfaceOrigin; } bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; DeferredLayerUpdater* createTextureLayer() override; diff --git a/libs/hwui/renderthread/IRenderPipeline.h b/libs/hwui/renderthread/IRenderPipeline.h index 42e17b273beef..d4dd62941440b 100644 --- a/libs/hwui/renderthread/IRenderPipeline.h +++ b/libs/hwui/renderthread/IRenderPipeline.h @@ -84,6 +84,7 @@ public: virtual void onPrepareTree() = 0; virtual SkColorType getSurfaceColorType() const = 0; virtual sk_sp getSurfaceColorSpace() = 0; + virtual GrSurfaceOrigin getSurfaceOrigin() = 0; virtual ~IRenderPipeline() {} };