bin/update_pch | 6 compilerplugins/Makefile-clang.mk | 3 external/skia/Library_skia.mk | 154 +++++++++++++++-------- external/skia/UnpackedTarball_skia.mk | 3 external/skia/configs/SkUserConfig.h | 191 ----------------------------- external/skia/fix-ddi.patch | 9 + external/skia/fix-pch.patch | 46 ++++++ external/skia/inc/pch/precompiled_skia.hxx | 31 ---- vcl/inc/skia/gdiimpl.hxx | 19 ++ vcl/inc/skia/x11/gdiimpl.hxx | 17 +- vcl/qa/cppunit/BitmapTest.cxx | 5 vcl/qa/cppunit/canvasbitmaptest.cxx | 5 vcl/qa/cppunit/gen/gen.cxx | 4 vcl/qa/cppunit/svm/svmtest.cxx | 75 ++--------- vcl/skia/gdiimpl.cxx | 181 +++++++++++++++++++++++++-- vcl/skia/salbmp.cxx | 107 ++++++++++------ vcl/skia/x11/gdiimpl.cxx | 64 ++++++++- 17 files changed, 508 insertions(+), 412 deletions(-)
New commits: commit f12a617da1963728260ab2b082c825450435bb87 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Wed Oct 2 17:15:07 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Wed Oct 2 17:15:07 2019 +0200 make the X11/Skia backend finally capable of drawing on screen Change-Id: I5c847c1036c671137ee27053691189093b1dafae diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx index aad4ea3e8454..c72c5979464d 100644 --- a/vcl/inc/skia/gdiimpl.hxx +++ b/vcl/inc/skia/gdiimpl.hxx @@ -27,6 +27,8 @@ #include <SkSurface.h> +class SkiaFlushIdle; + class VCL_DLLPUBLIC SkiaSalGraphicsImpl : public SalGraphicsImpl { public: @@ -37,8 +39,6 @@ public: virtual void DeInit() override; - virtual void freeResources() override; - const vcl::Region& getClipRegion() const; virtual bool setClipRegion(const vcl::Region&) override; @@ -183,6 +183,12 @@ public: virtual bool drawGradient(const tools::PolyPolygon& rPolygon, const Gradient& rGradient) override; + // To be called after any drawing. + void scheduleFlush(); + + // Internal, called by SkiaFlushIdle. + virtual void performFlush() = 0; + #ifdef DBG_UTIL void dump(const char* file) const; void dump(const SkBitmap& bitmap, const char* file) const; @@ -191,7 +197,9 @@ public: protected: void setProvider(SalGeometryProvider* provider) { mProvider = provider; } -private: + bool isOffscreen() const { return mProvider == nullptr || mProvider->IsOffScreen(); } + +protected: // get the width of the device int GetWidth() const { return mProvider ? mProvider->GetWidth() : 1; } // get the height of the device @@ -215,6 +223,7 @@ private: vcl::Region mClipRegion; Color mLineColor; Color mFillColor; + std::unique_ptr<SkiaFlushIdle> mFlush; }; #endif diff --git a/vcl/inc/skia/x11/gdiimpl.hxx b/vcl/inc/skia/x11/gdiimpl.hxx index 670c1117d32d..fcc0ecb116d8 100644 --- a/vcl/inc/skia/x11/gdiimpl.hxx +++ b/vcl/inc/skia/x11/gdiimpl.hxx @@ -19,14 +19,14 @@ class VCL_PLUGIN_PUBLIC X11SkiaSalGraphicsImpl : public SkiaSalGraphicsImpl, public X11GraphicsImpl { private: - X11SalGraphics& mrX11Parent; + X11SalGraphics& mParent; public: X11SkiaSalGraphicsImpl(X11SalGraphics& rParent); virtual ~X11SkiaSalGraphicsImpl() override; -public: virtual void Init() override; + virtual void freeResources() override; // implementation of X11GraphicsImpl void FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY) override; @@ -34,6 +34,13 @@ public: bool RenderAndCacheNativeControl(X11Pixmap* pPixmap, X11Pixmap* pMask, int nX, int nY, ControlCacheKey& aControlCacheKey) override; bool TryRenderCachedNativeControl(ControlCacheKey& rControlCacheKey, int nX, int nY) override; + +protected: + virtual void performFlush() override; + +private: + GC getGC(); + GC mCopyGc; }; #endif // INCLUDED_VCL_INC_SKIA_X11_GDIIMPL_HXX diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index da8a917f50b5..4a42ea503985 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -21,6 +21,8 @@ #include <salgdi.hxx> #include <skia/salbmp.hxx> +#include <vcl/idle.hxx> +#include <vcl/svapp.hxx> #include <SkCanvas.h> #include <SkPath.h> @@ -30,11 +32,34 @@ #include <fstream> #endif +// Class that triggers flushing the backing buffer when idle. +class SkiaFlushIdle : public Idle +{ + SkiaSalGraphicsImpl* graphics; + +public: + explicit SkiaFlushIdle(SkiaSalGraphicsImpl* graphics) + : Idle("skia idle swap") + , graphics(graphics) + { + // We don't want to be swapping before we've painted. + SetPriority(TaskPriority::POST_PAINT); + } + + virtual void Invoke() override + { + graphics->performFlush(); + Stop(); + SetPriority(TaskPriority::HIGHEST); + } +}; + SkiaSalGraphicsImpl::SkiaSalGraphicsImpl(SalGraphics& rParent, SalGeometryProvider* pProvider) : mParent(rParent) , mProvider(pProvider) , mLineColor(SALCOLOR_NONE) , mFillColor(SALCOLOR_NONE) + , mFlush(new SkiaFlushIdle(this)) { } @@ -46,12 +71,13 @@ void SkiaSalGraphicsImpl::Init() mSurface = SkSurface::MakeRasterN32Premul(GetWidth(), GetHeight()); mSurface->getCanvas()->save(); // see SetClipRegion() mClipRegion = vcl::Region(tools::Rectangle(0, 0, GetWidth(), GetHeight())); + + // We don't want to be swapping before we've painted. + mFlush->SetPriority(TaskPriority::POST_PAINT); } void SkiaSalGraphicsImpl::DeInit() { mSurface.reset(); } -void SkiaSalGraphicsImpl::freeResources() {} - static SkIRect toSkIRect(const tools::Rectangle& rectangle) { return SkIRect::MakeXYWH(rectangle.Left(), rectangle.Top(), rectangle.GetWidth(), @@ -129,6 +155,7 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY) return; SkCanvas* canvas = mSurface->getCanvas(); canvas->drawPoint(nX, nY, SkPaint()); + scheduleFlush(); } void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor) @@ -141,6 +168,7 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor) // Apparently drawPixel() is actually expected to set the pixel and not draw it. paint.setBlendMode(SkBlendMode::kSrc); // set as is, including alpha canvas->drawPoint(nX, nY, paint); + scheduleFlush(); } void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2) @@ -151,6 +179,7 @@ void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2) SkPaint paint; paint.setColor(toSkColor(mLineColor)); canvas->drawLine(nX1, nY1, nX2, nY2, paint); + scheduleFlush(); } void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight) @@ -169,6 +198,7 @@ void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight) paint.setStyle(SkPaint::kStroke_Style); canvas->drawIRect(SkIRect::MakeXYWH(nX, nY, nWidth - 1, nHeight - 1), paint); } + scheduleFlush(); } void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAry) @@ -183,6 +213,7 @@ void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAr paint.setColor(toSkColor(mLineColor)); mSurface->getCanvas()->drawPoints(SkCanvas::kLines_PointMode, nPoints, pointVector.data(), paint); + scheduleFlush(); } void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry) @@ -208,6 +239,7 @@ void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry paint.setStyle(SkPaint::kStroke_Style); mSurface->getCanvas()->drawPath(path, paint); } + scheduleFlush(); } void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPoints, @@ -242,6 +274,7 @@ void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pP paint.setStyle(SkPaint::kStroke_Style); mSurface->getCanvas()->drawPath(path, paint); } + scheduleFlush(); } bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDevice, @@ -306,6 +339,7 @@ void SkiaSalGraphicsImpl::copyArea(long nDestX, long nDestY, long nSrcX, long nS = mSurface->makeImageSnapshot(SkIRect::MakeXYWH(nSrcX, nSrcY, nSrcWidth, nSrcHeight)); // TODO makeNonTextureImage() ? mSurface->getCanvas()->drawImage(image, nDestX, nDestY); + scheduleFlush(); } void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) @@ -326,6 +360,7 @@ void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcG rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); + scheduleFlush(); } bool SkiaSalGraphicsImpl::blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap) @@ -356,6 +391,7 @@ void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); + scheduleFlush(); } void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap, @@ -385,6 +421,7 @@ void SkiaSalGraphicsImpl::drawMask(const SalTwoRect& rPosAry, const SalBitmap& r SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); + scheduleFlush(); } std::shared_ptr<SalBitmap> SkiaSalGraphicsImpl::getBitmap(long nX, long nY, long nWidth, @@ -459,6 +496,7 @@ bool SkiaSalGraphicsImpl::drawAlphaBitmap(const SalTwoRect& rPosAry, const SalBi SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); + scheduleFlush(); return true; } @@ -495,6 +533,16 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolygon, return false; } +void SkiaSalGraphicsImpl::scheduleFlush() +{ + if (isOffscreen()) + return; + if (!Application::IsInExecute()) + performFlush(); // otherwise nothing would trigger idle rendering + else if (!mFlush->IsActive()) + mFlush->Start(); +} + #ifdef DBG_UTIL void SkiaSalGraphicsImpl::dump(const char* file) const { diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx index 22608754f5d9..3891de5b059e 100644 --- a/vcl/skia/x11/gdiimpl.cxx +++ b/vcl/skia/x11/gdiimpl.cxx @@ -5,13 +5,23 @@ * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Some of this code is based on Skia source code, covered by the following + * license notice (see readlicense_oo for the full license): + * + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * */ #include <skia/x11/gdiimpl.hxx> X11SkiaSalGraphicsImpl::X11SkiaSalGraphicsImpl(X11SalGraphics& rParent) : SkiaSalGraphicsImpl(rParent, rParent.GetGeometryProvider()) - , mrX11Parent(rParent) + , mParent(rParent) + , mCopyGc(None) { } @@ -20,10 +30,60 @@ X11SkiaSalGraphicsImpl::~X11SkiaSalGraphicsImpl() {} void X11SkiaSalGraphicsImpl::Init() { // The m_pFrame and m_pVDev pointers are updated late in X11 - setProvider(mrX11Parent.GetGeometryProvider()); + setProvider(mParent.GetGeometryProvider()); SkiaSalGraphicsImpl::Init(); } +GC X11SkiaSalGraphicsImpl::getGC() +{ + if (mCopyGc == None) + { + XGCValues values; + values.graphics_exposures = False; + values.subwindow_mode = ClipByChildren; + mCopyGc = XCreateGC(mParent.GetXDisplay(), mParent.GetDrawable(), + GCGraphicsExposures | GCSubwindowMode, &values); + } + return mCopyGc; +} + +void X11SkiaSalGraphicsImpl::freeResources() +{ + if (mCopyGc != None) + { + XFreeGC(mParent.GetXDisplay(), mCopyGc); + mCopyGc = None; + } +} + +void X11SkiaSalGraphicsImpl::performFlush() +{ + Display* dpy = mParent.GetXDisplay(); + Drawable drawable = mParent.GetDrawable(); + GC gc = getGC(); + SkPixmap pm; + if (!mSurface->peekPixels(&pm)) + abort(); + int bitsPerPixel = pm.info().bytesPerPixel() * 8; + XImage image; + memset(&image, 0, sizeof(image)); + image.width = pm.width(); + image.height = pm.height(); + image.format = ZPixmap; + image.data = (char*)pm.addr(); + image.byte_order = LSBFirst; + image.bitmap_unit = bitsPerPixel; + image.bitmap_bit_order = LSBFirst; + image.bitmap_pad = bitsPerPixel; + image.depth = 24; + image.bytes_per_line = pm.rowBytes() - pm.width() * pm.info().bytesPerPixel(); + image.bits_per_pixel = bitsPerPixel; + if (!XInitImage(&image)) + abort(); + // TODO XPutImage() is somewhat inefficient, XShmPutImage() should be preferred. + XPutImage(dpy, drawable, gc, &image, 0, 0, 0, 0, pm.width(), pm.height()); +} + void X11SkiaSalGraphicsImpl::FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY) { (void)pPixmap; commit fb2d7a6026f746cc37b34e272426664a3b939fa3 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Wed Oct 2 14:26:52 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Wed Oct 2 15:02:09 2019 +0200 WIP avoid checking Bitmap checksums in a test TODO: The data is somewhat random, because on all the data in a scanline is necessarily filled in, but checksumming counts it all. But then, this should work, as even copying a bitmap should generally just copy all the data, so why is this broken? Change-Id: Ie9efa01b191c817543bb79278125e6ddd5b0d83e diff --git a/vcl/qa/cppunit/svm/svmtest.cxx b/vcl/qa/cppunit/svm/svmtest.cxx index 00541e7f2b8f..a3ec68f11def 100644 --- a/vcl/qa/cppunit/svm/svmtest.cxx +++ b/vcl/qa/cppunit/svm/svmtest.cxx @@ -885,27 +885,13 @@ void SvmTest::checkBitmaps(const GDIMetaFile& rMetaFile) { xmlDocPtr pDoc = dumpMeta(rMetaFile); - OUString crc1 = "b8dee5da"; - OUString crc2 = "281fc589"; - OUString crc3 = "5e01ddcc"; -#if HAVE_FEATURE_OPENGL - if (OpenGLHelper::isVCLOpenGLEnabled()) - { - // OpenGL uses a different scaling algorithm and also a different RGB order. - crc1 = "5e01ddcc"; - crc2 = "281fc589"; - crc3 = "b8dee5da"; - } -#endif - - assertXPathAttrs(pDoc, "/metafile/bmp[1]", {{"x", "1"}, {"y", "2"}, {"crc", crc1}}); + assertXPathAttrs(pDoc, "/metafile/bmp[1]", {{"x", "1"}, {"y", "2"}}); assertXPathAttrs(pDoc, "/metafile/bmpscale[1]", { - {"x", "1"}, {"y", "2"}, {"width", "3"}, {"height", "4"}, {"crc", crc2} + {"x", "1"}, {"y", "2"}, {"width", "3"}, {"height", "4"} }); assertXPathAttrs(pDoc, "/metafile/bmpscalepart[1]", { {"destx", "1"}, {"desty", "2"}, {"destwidth", "3"}, {"destheight", "4"}, - {"srcx", "2"}, {"srcy", "1"}, {"srcwidth", "4"}, {"srcheight", "3"}, - {"crc", crc3} + {"srcx", "2"}, {"srcy", "1"}, {"srcwidth", "4"}, {"srcheight", "3"} }); } @@ -934,76 +920,43 @@ void SvmTest::testBitmaps() pVirtualDev->DrawBitmap(Point(1, 2), Size(3, 4), aBitmap2); pVirtualDev->DrawBitmap(Point(1, 2), Size(3, 4), Point(2, 1), Size(4, 3), aBitmap3); - checkBitmaps(writeAndRead(aGDIMetaFile, "bitmaps.svm")); + GDIMetaFile aReloadedGDIMetaFile = writeAndRead(aGDIMetaFile, "bitmaps.svm"); + checkBitmaps(aReloadedGDIMetaFile); + checkRendering(pVirtualDev, aReloadedGDIMetaFile); } void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile) { xmlDocPtr pDoc = dumpMeta(rMetaFile); - std::vector<OUString> aExpectedCRC; - -#if HAVE_FEATURE_OPENGL - if (OpenGLHelper::isVCLOpenGLEnabled()) - { - aExpectedCRC.insert(aExpectedCRC.end(), - { - "08feb5d3", - "281fc589", - "b8dee5da", - "4df0e464", - "7d3a8da3", - "1426653b", - "4fd547df", - "71efc447", - }); - } - else -#endif - { - aExpectedCRC.insert(aExpectedCRC.end(), - { - "d8377d4f", - "281fc589", - "5e01ddcc", - "4df0e464", - "34434a50", - "d1736327", - "b37875c2", - "a85d44b8", - }); - } - assertXPathAttrs(pDoc, "/metafile/bmpex[1]", { - {"x", "1"}, {"y", "1"}, {"crc", aExpectedCRC[0]}, {"transparenttype", "bitmap"} + {"x", "1"}, {"y", "1"}, {"transparenttype", "bitmap"} }); assertXPathAttrs(pDoc, "/metafile/bmpexscale[1]", { {"x", "5"}, {"y", "0"}, {"width", "2"}, {"height", "3"}, - {"crc", aExpectedCRC[1]}, {"transparenttype", "bitmap"} + {"transparenttype", "bitmap"} }); assertXPathAttrs(pDoc, "/metafile/bmpexscalepart[1]", { {"destx", "7"}, {"desty", "1"}, {"destwidth", "2"}, {"destheight", "2"}, {"srcx", "0"}, {"srcy", "0"}, {"srcwidth", "3"}, {"srcheight", "4"}, - {"crc", aExpectedCRC[2]}, {"transparenttype", "bitmap"} + {"transparenttype", "bitmap"} }); -#ifndef MACOSX assertXPathAttrs(pDoc, "/metafile/bmpex[2]", { - {"x", "6"}, {"y", "6"}, {"crc", aExpectedCRC[3]}, {"transparenttype", "bitmap"} + {"x", "6"}, {"y", "6"}, {"transparenttype", "bitmap"} }); assertXPathAttrs(pDoc, "/metafile/bmpex[3]", { - {"x", "0"}, {"y", "6"}, {"crc", aExpectedCRC[4]}, {"transparenttype", "bitmap"} + {"x", "0"}, {"y", "6"}, {"transparenttype", "bitmap"} }); assertXPathAttrs(pDoc, "/metafile/bmpex[4]", { - {"x", "2"}, {"y", "6"}, {"crc", aExpectedCRC[5]}, {"transparenttype", "bitmap"} + {"x", "2"}, {"y", "6"}, {"transparenttype", "bitmap"} }); assertXPathAttrs(pDoc, "/metafile/bmpex[5]", { - {"x", "0"}, {"y", "8"}, {"crc", aExpectedCRC[6]}, {"transparenttype", "bitmap"} + {"x", "0"}, {"y", "8"}, {"transparenttype", "bitmap"} }); assertXPathAttrs(pDoc, "/metafile/bmpex[6]", { - {"x", "2"}, {"y", "8"}, {"crc", aExpectedCRC[7]}, {"transparenttype", "bitmap"} + {"x", "2"}, {"y", "8"}, {"transparenttype", "bitmap"} }); -#endif } void SvmTest::testBitmapExs() commit f2aaea720cd5500f553768c50c3d0464625d6082 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Wed Oct 2 14:25:02 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Wed Oct 2 15:02:04 2019 +0200 correct SkPaint usage when painting Handle SALCOLOR_NONE properly. Also avoid reusing a global SkPaint, creating a new one is as cheap as making a copy, and this way it's less error-prone. Change-Id: I12659cdc58b02f5105029b2b89d1b0c147c7a471 diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx index 6cc61431bcce..aad4ea3e8454 100644 --- a/vcl/inc/skia/gdiimpl.hxx +++ b/vcl/inc/skia/gdiimpl.hxx @@ -25,7 +25,6 @@ #include <salgdiimpl.hxx> #include <salgeom.hxx> -#include <SkPaint.h> #include <SkSurface.h> class VCL_DLLPUBLIC SkiaSalGraphicsImpl : public SalGraphicsImpl @@ -213,7 +212,6 @@ private: SalGeometryProvider* mProvider; // The Skia surface that is target of all the rendering. sk_sp<SkSurface> mSurface; - SkPaint mPaint; // The current paint object (contains paint setup, such as color to use). vcl::Region mClipRegion; Color mLineColor; Color mFillColor; diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index 90cb2bd04f1c..da8a917f50b5 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -87,6 +87,7 @@ bool SkiaSalGraphicsImpl::setClipRegion(const vcl::Region& region) // So handle that by always having the full clip region saved on the stack // and always go back to that. SkCanvas::restore() only affects the clip // and the matrix. + assert(canvas->getSaveCount() == 2); // = there is just one save() canvas->restore(); canvas->save(); canvas->clipRegion(toSkRegion(region)); @@ -124,14 +125,18 @@ void SkiaSalGraphicsImpl::SetROPFillColor(SalROPColor nROPColor) { (void)nROPCol void SkiaSalGraphicsImpl::drawPixel(long nX, long nY) { + if (mLineColor == SALCOLOR_NONE) + return; SkCanvas* canvas = mSurface->getCanvas(); - canvas->drawPoint(nX, nY, mPaint); + canvas->drawPoint(nX, nY, SkPaint()); } void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor) { + if (nColor == SALCOLOR_NONE) + return; SkCanvas* canvas = mSurface->getCanvas(); - SkPaint paint(mPaint); + SkPaint paint; paint.setColor(toSkColor(nColor)); // Apparently drawPixel() is actually expected to set the pixel and not draw it. paint.setBlendMode(SkBlendMode::kSrc); // set as is, including alpha @@ -140,15 +145,18 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor) void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2) { + if (mLineColor == SALCOLOR_NONE) + return; SkCanvas* canvas = mSurface->getCanvas(); - canvas->drawLine(nX1, nY1, nX2, nY2, mPaint); + SkPaint paint; + paint.setColor(toSkColor(mLineColor)); + canvas->drawLine(nX1, nY1, nX2, nY2, paint); } void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight) { SkCanvas* canvas = mSurface->getCanvas(); - SkPaint paint(mPaint); - paint.setStrokeWidth(0); // smallest possible + SkPaint paint; if (mFillColor != SALCOLOR_NONE) { paint.setColor(toSkColor(mFillColor)); @@ -165,29 +173,47 @@ void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight) void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAry) { + if (mLineColor == SALCOLOR_NONE) + return; std::vector<SkPoint> pointVector; pointVector.reserve(nPoints); for (sal_uInt32 i = 0; i < nPoints; ++i) pointVector.emplace_back(SkPoint::Make(pPtAry[i].mnX, pPtAry[i].mnY)); + SkPaint paint; + paint.setColor(toSkColor(mLineColor)); mSurface->getCanvas()->drawPoints(SkCanvas::kLines_PointMode, nPoints, pointVector.data(), - mPaint); + paint); } void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry) { + if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE) + return; std::vector<SkPoint> pointVector; pointVector.reserve(nPoints); for (sal_uInt32 i = 0; i < nPoints; ++i) pointVector.emplace_back(SkPoint::Make(pPtAry[i].mnX, pPtAry[i].mnY)); SkPath path; - path.addPoly(pointVector.data(), nPoints, true); - mSurface->getCanvas()->drawPath(path, mPaint); + path.addPoly(pointVector.data(), nPoints, false); + SkPaint paint; + if (mFillColor != SALCOLOR_NONE) + { + paint.setColor(toSkColor(mFillColor)); + paint.setStyle(SkPaint::kFill_Style); + mSurface->getCanvas()->drawPath(path, paint); + } + if (mLineColor != SALCOLOR_NONE) + { + paint.setColor(toSkColor(mLineColor)); + paint.setStyle(SkPaint::kStroke_Style); + mSurface->getCanvas()->drawPath(path, paint); + } } void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry) { - if (SALCOLOR_NONE == mFillColor && SALCOLOR_NONE == mLineColor) + if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE) return; std::vector<SkPoint> pointVector; SkPath path; @@ -203,12 +229,26 @@ void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pP path.addPoly(pointVector.data(), points, true); } } - mSurface->getCanvas()->drawPath(path, mPaint); + SkPaint paint; + if (mFillColor != SALCOLOR_NONE) + { + paint.setColor(toSkColor(mFillColor)); + paint.setStyle(SkPaint::kFill_Style); + mSurface->getCanvas()->drawPath(path, paint); + } + if (mLineColor != SALCOLOR_NONE) + { + paint.setColor(toSkColor(mLineColor)); + paint.setStyle(SkPaint::kStroke_Style); + mSurface->getCanvas()->drawPath(path, paint); + } } bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolyPolygon&, double fTransparency) { + if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE) + return true; (void)rObjectToDevice; (void)fTransparency; return false; commit 35e12fc828f4e7e573511f974f2fbf9928dea363 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Wed Oct 2 14:12:42 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Wed Oct 2 14:12:42 2019 +0200 flush SkSurface's SkCanvas before getting data from it It seems this is necessary, otherwise there may be pending operations. Change-Id: I93650bbd622d8ab8b6535a950afd2b6ac6a87db7 diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index b2341c90632c..90cb2bd04f1c 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -350,12 +350,14 @@ void SkiaSalGraphicsImpl::drawMask(const SalTwoRect& rPosAry, const SalBitmap& r std::shared_ptr<SalBitmap> SkiaSalGraphicsImpl::getBitmap(long nX, long nY, long nWidth, long nHeight) { + mSurface->getCanvas()->flush(); sk_sp<SkImage> image = mSurface->makeImageSnapshot(SkIRect::MakeXYWH(nX, nY, nWidth, nHeight)); return std::make_shared<SkiaSalBitmap>(*image); } Color SkiaSalGraphicsImpl::getPixel(long nX, long nY) { + mSurface->getCanvas()->flush(); // TODO this is presumably slow, and possibly won't work with GPU surfaces SkBitmap bitmap; if (!bitmap.tryAllocN32Pixels(GetWidth(), GetHeight())) @@ -456,6 +458,7 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolygon, #ifdef DBG_UTIL void SkiaSalGraphicsImpl::dump(const char* file) const { + mSurface->getCanvas()->flush(); sk_sp<SkImage> image = mSurface->makeImageSnapshot(); sk_sp<SkData> data = image->encodeToData(); std::ofstream ostream(file, std::ios::binary); commit 5a35aee8efa7b9443f864b617348ec57f53d952a Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Wed Oct 2 14:11:25 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Wed Oct 2 14:11:25 2019 +0200 implement Skia setClipRegion() Change-Id: I9e525936bba50b565704ee1b60d7464a7397dc80 diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index ba764cbdd0b9..b2341c90632c 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -24,6 +24,7 @@ #include <SkCanvas.h> #include <SkPath.h> +#include <SkRegion.h> #ifdef DBG_UTIL #include <fstream> @@ -43,26 +44,66 @@ void SkiaSalGraphicsImpl::Init() { // TODO mSurface = SkSurface::MakeRasterN32Premul(GetWidth(), GetHeight()); + mSurface->getCanvas()->save(); // see SetClipRegion() + mClipRegion = vcl::Region(tools::Rectangle(0, 0, GetWidth(), GetHeight())); } void SkiaSalGraphicsImpl::DeInit() { mSurface.reset(); } void SkiaSalGraphicsImpl::freeResources() {} -const vcl::Region& SkiaSalGraphicsImpl::getClipRegion() const { return mClipRegion; } +static SkIRect toSkIRect(const tools::Rectangle& rectangle) +{ + return SkIRect::MakeXYWH(rectangle.Left(), rectangle.Top(), rectangle.GetWidth(), + rectangle.GetHeight()); +} + +static SkRegion toSkRegion(const vcl::Region& region) +{ + if (region.IsEmpty()) + return SkRegion(); + if (region.IsRectangle()) + return SkRegion(toSkIRect(region.GetBoundRect())); + if (!region.HasPolyPolygonOrB2DPolyPolygon()) + { + SkRegion skRegion; + RectangleVector rectangles; + region.GetRegionRectangles(rectangles); + for (const tools::Rectangle& rect : rectangles) + skRegion.op(toSkIRect(rect), SkRegion::kUnion_Op); + return skRegion; + } + abort(); +} bool SkiaSalGraphicsImpl::setClipRegion(const vcl::Region& region) { + if (mClipRegion == region) + return true; mClipRegion = region; + SkCanvas* canvas = mSurface->getCanvas(); + // SkCanvas::clipRegion() can only further reduce the clip region, + // but we need to set the given region, which may extend it. + // So handle that by always having the full clip region saved on the stack + // and always go back to that. SkCanvas::restore() only affects the clip + // and the matrix. + canvas->restore(); + canvas->save(); + canvas->clipRegion(toSkRegion(region)); return true; } +void SkiaSalGraphicsImpl::ResetClipRegion() +{ + setClipRegion(vcl::Region(tools::Rectangle(0, 0, GetWidth(), GetHeight()))); +} + +const vcl::Region& SkiaSalGraphicsImpl::getClipRegion() const { return mClipRegion; } + sal_uInt16 SkiaSalGraphicsImpl::GetBitCount() const { return 32; } long SkiaSalGraphicsImpl::GetGraphicsWidth() const { return GetWidth(); } -void SkiaSalGraphicsImpl::ResetClipRegion() { mClipRegion.SetEmpty(); } - void SkiaSalGraphicsImpl::SetLineColor() { mLineColor = SALCOLOR_NONE; } void SkiaSalGraphicsImpl::SetLineColor(Color nColor) { mLineColor = nColor; } commit cb217e60ec27138d0ea711465e4071b7b4a8fcc8 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Wed Oct 2 14:09:13 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Wed Oct 2 14:09:13 2019 +0200 adjust a confusing test GetPrefSize() at this point is Size(0,0), so the test was testing topleft corner. And getPixel() takes Y,X , so even then it wasn't testing the center. Change-Id: Ie2e489a693fae2b7ea41075ebe6fa3ef405545d5 diff --git a/vcl/qa/cppunit/gen/gen.cxx b/vcl/qa/cppunit/gen/gen.cxx index 6dfd3da71079..dfcfaa997b80 100644 --- a/vcl/qa/cppunit/gen/gen.cxx +++ b/vcl/qa/cppunit/gen/gen.cxx @@ -68,8 +68,8 @@ CPPUNIT_TEST_FIXTURE(GenTest, testTdf121120) { Bitmap aBitmap = load("tdf121120.png"); Bitmap::ScopedReadAccess pAccess(aBitmap); - const Size& rSize = aBitmap.GetPrefSize(); - Color aColor(pAccess->GetPixel(rSize.getWidth() / 2, rSize.getHeight() / 2)); + const Size& rSize = aBitmap.GetSizePixel(); + Color aColor(pAccess->GetPixel(rSize.getHeight() / 2, rSize.getWidth() / 2)); // Without the accompanying fix in place, this test would have failed with 'Expected: 255; // Actual : 1'. I.e. center of the preview (which has the background color) was ~black, not // white. commit edfd09bc2975e7d372dac3269d93f93aead8c371 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Oct 1 17:40:50 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Oct 1 17:40:50 2019 +0200 better handling of bit depths in skia code Change-Id: Ifb3103cc3494bc55a562d4b6a16b59a044782416 diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk index 60eb173f9628..6fde1684de44 100644 --- a/external/skia/Library_skia.mk +++ b/external/skia/Library_skia.mk @@ -68,7 +68,6 @@ $(eval $(call gb_Library_use_system_win32_libs,skia,\ else $(eval $(call gb_Library_add_defs,skia,\ -DSK_BUILD_FOR_UNIX \ - -DSK_R32_SHIFT=16 \ )) # TODO diff --git a/vcl/qa/cppunit/BitmapTest.cxx b/vcl/qa/cppunit/BitmapTest.cxx index d3ed8c621b99..c920cf463c13 100644 --- a/vcl/qa/cppunit/BitmapTest.cxx +++ b/vcl/qa/cppunit/BitmapTest.cxx @@ -403,11 +403,6 @@ void BitmapTest::testConvert() CPPUNIT_ASSERT_EQUAL(sal_uInt32(30), pReadAccess->GetScanlineSize()); else #endif -#if HAVE_FEATURE_SKIA - if (SkiaHelper::isVCLSkiaEnabled()) - CPPUNIT_ASSERT_EQUAL(sal_uInt32(40), pReadAccess->GetScanlineSize()); - else -#endif CPPUNIT_ASSERT_EQUAL(sal_uInt32(32), pReadAccess->GetScanlineSize()); #else #if defined(_WIN32) diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx index 5fce7d7073c7..332a5972bab2 100644 --- a/vcl/skia/salbmp.cxx +++ b/vcl/skia/salbmp.cxx @@ -37,23 +37,6 @@ SkiaSalBitmap::SkiaSalBitmap() {} SkiaSalBitmap::~SkiaSalBitmap() {} -static SkColorType getSkColorType(int bitCount) -{ - switch (bitCount) - { - case 8: - return kGray_8_SkColorType; // see GetAlphaSkBitmap() - case 16: - return kRGB_565_SkColorType; - case 24: - return kRGB_888x_SkColorType; - case 32: - return kN32_SkColorType; - default: - abort(); - } -} - static bool isValidBitCount(sal_uInt16 nBitCount) { return (nBitCount == 1) || (nBitCount == 4) || (nBitCount == 8) || (nBitCount == 16) @@ -76,18 +59,37 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap Destroy(); if (!isValidBitCount(nBitCount)) return false; - // Skia does not support paletted images, so convert only types Skia supports. - if (nBitCount > 8 || (nBitCount == 8 && (!rPal || rPal.IsGreyPalette()))) + // Skia only supports 8bit gray, 16bit and 32bit formats (e.g. 24bpp is actually stored as 32bpp). + // But some of our code accessing the bitmap assumes that when it asked for 24bpp, the format + // really will be 24bpp (e.g. the png loader). + // TODO what is the performance impact of handling 24bpp ourselves instead of in Skia? + SkColorType colorType = kUnknown_SkColorType; + switch (nBitCount) { - if (!mBitmap.tryAllocPixels(SkImageInfo::Make( - rSize.Width(), rSize.Height(), getSkColorType(nBitCount), kPremul_SkAlphaType))) + case 8: + if (rPal.IsGreyPalette()) // see GetAlphaSkBitmap() + colorType = kGray_8_SkColorType; + break; + case 16: + colorType = kRGB_565_SkColorType; + break; + case 32: + colorType = kN32_SkColorType; + break; + default: + break; + } + if (colorType != kUnknown_SkColorType) + { + if (!mBitmap.tryAllocPixels( + SkImageInfo::Make(rSize.Width(), rSize.Height(), colorType, kPremul_SkAlphaType))) { return false; } } else { - // Paletted images are stored in a buffer and converted as necessary. + // Image formats not supported by Skia are stored in a buffer and converted as necessary. int bitScanlineWidth; if (o3tl::checked_multiply<int>(rSize.Width(), nBitCount, bitScanlineWidth)) { @@ -203,8 +205,6 @@ BitmapBuffer* SkiaSalBitmap::AcquireBuffer(BitmapAccessMode nMode) buffer->mnFormat = ScanlineFormat::N4BitMsnPal; break; case 8: - // TODO or always N8BitPal? - // buffer->mnFormat = !mPalette ? ScanlineFormat::N8BitTcMask : ScanlineFormat::N8BitPal; buffer->mnFormat = ScanlineFormat::N8BitPal; break; case 16: @@ -220,8 +220,17 @@ BitmapBuffer* SkiaSalBitmap::AcquireBuffer(BitmapAccessMode nMode) break; } case 24: - buffer->mnFormat = ScanlineFormat::N24BitTcRgb; + { +// Make the RGB/BGR format match the default Skia 32bpp format, to allow +// easy conversion later. +// Use a macro to hide an unreachable code warning. +#define GET_FORMAT \ + (kN32_SkColorType == kBGRA_8888_SkColorType ? ScanlineFormat::N24BitTcBgr \ + : ScanlineFormat::N24BitTcRgb) + buffer->mnFormat = GET_FORMAT; +#undef GET_FORMAT break; + } case 32: // TODO are these correct? buffer->mnFormat = mBitmap.colorType() == kRGBA_8888_SkColorType @@ -280,15 +289,43 @@ const SkBitmap& SkiaSalBitmap::GetSkBitmap() const { if (mBuffer && mBitmap.drawsNothing()) { - std::unique_ptr<sal_uInt8[]> data = convertDataBitCount( - mBuffer.get(), mSize.Width(), mSize.Height(), mBitCount, mScanlineSize, mPalette, - kN32_SkColorType == kBGRA_8888_SkColorType ? BitConvert::BGRA - : BitConvert::RGBA); // TODO - if (!const_cast<SkBitmap&>(mBitmap).installPixels( - SkImageInfo::MakeS32(mSize.Width(), mSize.Height(), kOpaque_SkAlphaType), - data.release(), mSize.Width() * 4, - [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr)) - abort(); + if (mBitCount == 24) + { + // Convert 24bpp RGB/BGR to 32bpp RGBA/BGRA. + std::unique_ptr<sal_uInt8[]> data(new sal_uInt8[mSize.Height() * mSize.Width() * 4]); + sal_uInt8* dest = data.get(); + for (int y = 0; y < mSize.Height(); ++y) + { + const sal_uInt8* src = mBuffer.get() + mScanlineSize * y; + for (int x = 0; x < mSize.Width(); ++x) + { + *dest++ = *src++; + *dest++ = *src++; + *dest++ = *src++; + *dest++ = 0xff; + } + } + if (!const_cast<SkBitmap&>(mBitmap).installPixels( + SkImageInfo::MakeS32(mSize.Width(), mSize.Height(), kOpaque_SkAlphaType), + data.release(), mSize.Width() * 4, + [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr)) + abort(); + } + else + { +// Use a macro to hide an unreachable code warning. +#define GET_FORMAT \ + (kN32_SkColorType == kBGRA_8888_SkColorType ? BitConvert::BGRA : BitConvert::RGBA) + std::unique_ptr<sal_uInt8[]> data + = convertDataBitCount(mBuffer.get(), mSize.Width(), mSize.Height(), mBitCount, + mScanlineSize, mPalette, GET_FORMAT); +#undef GET_FORMAT + if (!const_cast<SkBitmap&>(mBitmap).installPixels( + SkImageInfo::MakeS32(mSize.Width(), mSize.Height(), kOpaque_SkAlphaType), + data.release(), mSize.Width() * 4, + [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr)) + abort(); + } } return mBitmap; } commit 0d65084083fabbcac3c8c3ebe22caf199afcb227 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Oct 1 17:38:35 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Oct 1 17:38:35 2019 +0200 fix skia bitmap copying Change-Id: I6eef23a0feaf577e1007ef197fc2fbaf138994b0 diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx index 9eba386e6b95..5fce7d7073c7 100644 --- a/vcl/skia/salbmp.cxx +++ b/vcl/skia/salbmp.cxx @@ -134,7 +134,7 @@ bool SkiaSalBitmap::Create(const SalBitmap& rSalBmp, sal_uInt16 nNewBitCount) mPalette = src.mPalette; mBitCount = src.mBitCount; mSize = src.mSize; - if (mBuffer != nullptr) + if (src.mBuffer != nullptr) { sal_uInt32 allocate = src.mScanlineSize * src.mSize.Height(); #ifdef DBG_UTIL commit 400a217234c8223fa6bf28e01b79dca38fb6bc93 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Oct 1 17:37:14 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Oct 1 17:37:14 2019 +0200 implement skia copyBits() Change-Id: I6706de1daaac60ce493b60af129e7a8e92c73bed diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx index 190fa19d32ad..6cc61431bcce 100644 --- a/vcl/inc/skia/gdiimpl.hxx +++ b/vcl/inc/skia/gdiimpl.hxx @@ -114,6 +114,8 @@ public: virtual void copyArea(long nDestX, long nDestY, long nSrcX, long nSrcY, long nSrcWidth, long nSrcHeight, bool bWindowInvalidate) override; + virtual void copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) override; + virtual bool blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap) override; virtual bool blendAlphaBitmap(const SalTwoRect&, const SalBitmap& rSrcBitmap, diff --git a/vcl/inc/skia/x11/gdiimpl.hxx b/vcl/inc/skia/x11/gdiimpl.hxx index 1c6be63c0eca..670c1117d32d 100644 --- a/vcl/inc/skia/x11/gdiimpl.hxx +++ b/vcl/inc/skia/x11/gdiimpl.hxx @@ -26,15 +26,11 @@ public: virtual ~X11SkiaSalGraphicsImpl() override; public: - // implementation of X11GraphicsImpl - - virtual void copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) override; - virtual void Init() override; + // implementation of X11GraphicsImpl void FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY) override; bool RenderPixmapToScreen(X11Pixmap* pPixmap, X11Pixmap* pMask, int nX, int nY) override; - bool RenderAndCacheNativeControl(X11Pixmap* pPixmap, X11Pixmap* pMask, int nX, int nY, ControlCacheKey& aControlCacheKey) override; bool TryRenderCachedNativeControl(ControlCacheKey& rControlCacheKey, int nX, int nY) override; diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index 7141eab1cba5..ba764cbdd0b9 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -19,6 +19,7 @@ #include <skia/gdiimpl.hxx> +#include <salgdi.hxx> #include <skia/salbmp.hxx> #include <SkCanvas.h> @@ -226,6 +227,26 @@ void SkiaSalGraphicsImpl::copyArea(long nDestX, long nDestY, long nSrcX, long nS mSurface->getCanvas()->drawImage(image, nDestX, nDestY); } +void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) +{ + SkiaSalGraphicsImpl* src; + if (pSrcGraphics) + { + assert(dynamic_cast<SkiaSalGraphicsImpl*>(pSrcGraphics->GetImpl())); + src = static_cast<SkiaSalGraphicsImpl*>(pSrcGraphics->GetImpl()); + } + else + src = this; + sk_sp<SkImage> image = src->mSurface->makeImageSnapshot( + SkIRect::MakeXYWH(rPosAry.mnSrcX, rPosAry.mnSrcY, rPosAry.mnSrcWidth, rPosAry.mnSrcHeight)); + // TODO makeNonTextureImage() ? + mSurface->getCanvas()->drawImageRect(image, + SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, + rPosAry.mnDestWidth, + rPosAry.mnDestHeight), + nullptr); +} + bool SkiaSalGraphicsImpl::blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap) { (void)rBitmap; diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx index aaa5b65f169a..22608754f5d9 100644 --- a/vcl/skia/x11/gdiimpl.cxx +++ b/vcl/skia/x11/gdiimpl.cxx @@ -24,12 +24,6 @@ void X11SkiaSalGraphicsImpl::Init() SkiaSalGraphicsImpl::Init(); } -void X11SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) -{ - (void)rPosAry; - (void)pSrcGraphics; -} - void X11SkiaSalGraphicsImpl::FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY) { (void)pPixmap; commit cdd4714b322caf6df9c864eb89d12261037bf83a Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Mon Sep 30 17:11:32 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Mon Sep 30 17:11:32 2019 +0200 fix test for CanvasBitmap not handling N32BitTcMask bpp properly Change-Id: Ic331d33e0f0feca1fde4425fdb4106b1a769194d diff --git a/vcl/qa/cppunit/canvasbitmaptest.cxx b/vcl/qa/cppunit/canvasbitmaptest.cxx index a51facbee8a8..5d9c826c3797 100644 --- a/vcl/qa/cppunit/canvasbitmaptest.cxx +++ b/vcl/qa/cppunit/canvasbitmaptest.cxx @@ -84,10 +84,13 @@ void checkCanvasBitmap( const rtl::Reference<VclCanvasBitmap>& xBmp, BitmapEx aContainedBmpEx( xBmp->getBitmapEx() ); Bitmap aContainedBmp( aContainedBmpEx.GetBitmap() ); int nDepth = nOriginalDepth; + int extraBpp = 0; { Bitmap::ScopedReadAccess pAcc( aContainedBmp ); nDepth = pAcc->GetBitCount(); + if( pAcc->GetScanlineFormat() == ScanlineFormat::N32BitTcMask ) + extraBpp = 8; // the format has 8 unused bits } CPPUNIT_ASSERT_EQUAL_MESSAGE( "Original bitmap size not (200,200)", @@ -106,7 +109,7 @@ void checkCanvasBitmap( const rtl::Reference<VclCanvasBitmap>& xBmp, uno::Sequence<sal_Int8> aPixelData = xBmp->getData(aLayout, geometry::IntegerRectangle2D(0,0,1,1)); const sal_Int32 nExpectedBitsPerPixel( - aContainedBmpEx.IsTransparent() ? std::max(8,nDepth)+8 : nDepth); + (aContainedBmpEx.IsTransparent() ? std::max(8,nDepth)+8 : nDepth) + extraBpp); CPPUNIT_ASSERT_EQUAL_MESSAGE( "# scanlines not 1", static_cast<sal_Int32>(1), aLayout.ScanLines); CPPUNIT_ASSERT_EQUAL_MESSAGE( "# scanline bytes mismatch", commit 944c178571b3a8a83f4e6229f85c5bb07b584e1e Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Mon Sep 30 13:29:52 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Mon Sep 30 13:29:52 2019 +0200 WIP link to libclang-cpp Change-Id: I44e014d35100f6135d71ffa247c5e4e3d554fce0 diff --git a/compilerplugins/Makefile-clang.mk b/compilerplugins/Makefile-clang.mk index d2c07fd06dba..8c1d3719b426 100644 --- a/compilerplugins/Makefile-clang.mk +++ b/compilerplugins/Makefile-clang.mk @@ -204,8 +204,7 @@ $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx: $(CLANGOUTDIR)/sharedvisitor/gene $(shell grep -l "LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx) \ > $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx -CLANGTOOLLIBS = -lclangTooling -lclangDriver -lclangFrontend -lclangParse -lclangSema -lclangEdit -lclangAnalysis \ - -lclangAST -lclangLex -lclangSerialization -lclangBasic $(shell $(LLVMCONFIG) --ldflags --libs --system-libs) +CLANGTOOLLIBS = -lclang-cpp $(shell $(LLVMCONFIG) --ldflags --libs --system-libs) # Path to the clang system headers (no idea if there's a better way to get it). CLANGTOOLDEFS = -DCLANGSYSINCLUDE=$(shell $(LLVMCONFIG) --libdir)/clang/$(shell $(LLVMCONFIG) --version | sed 's/svn//')/include ifneq ($(filter-out MACOSX WNT,$(OS)),) commit 7f8e9ad94d3c1b2eb64acf3f8d14f8fc3ad46fe0 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Thu Sep 26 11:38:38 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Thu Sep 26 16:06:26 2019 +0200 make skia also build on Windows Change-Id: I21ee875f9e16ef42b5f1cc78b090f782ed57f525 diff --git a/bin/update_pch b/bin/update_pch index 5464896d499b..af3e16de9640 100755 --- a/bin/update_pch +++ b/bin/update_pch @@ -437,6 +437,12 @@ def filter_ignore(line, module): ignore_list += [ 'skcms_internal.h', 'zlib.h', # causes crc32 conflict + 'dirent.h', # unix-specific + 'pthread.h', + 'unistd.h', + 'ft2build.h', + 'fontconfig/fontconfig.h', + 'GL/glx.h' ] for i in ignore_list: diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk index c06ced56bad4..60eb173f9628 100644 --- a/external/skia/Library_skia.mk +++ b/external/skia/Library_skia.mk @@ -15,42 +15,74 @@ $(eval $(call gb_Library_use_unpacked,skia,skia)) $(eval $(call gb_Library_set_precompiled_header,skia,$(SRCDIR)/external/skia/inc/pch/precompiled_skia)) +# TODO $(eval $(call gb_Library_add_defs,skia,\ - -DSK_GAMMA_SRGB \ - -DSK_GAMMA_APPLY_TO_A8 \ - -DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 \ - -DSK_SCALAR_IS_FLOAT \ - -DSK_CAN_USE_FLOAT \ - -DSK_BUILD_FOR_UNIX \ - -DSK_USE_POSIX_THREADS \ - -DSK_RELEASE \ - -DNDEBUG \ + -DSK_SUPPORT_GPU=1 \ + -DSKIA_DLL \ + -DSKIA_IMPLEMENTATION=1 \ + -DSK_GL=1 \ + -DSK_VULKAN=1 \ -DSKIA_DLL \ -DSK_HAS_JPEG_LIBRARY=1 \ -DSK_HAS_PNG_LIBRARY=1 \ + -DSK_GAMMA_APPLY_TO_A8 \ )) +ifneq (,$(gb_ENABLE_DBGUTIL)) $(eval $(call gb_Library_add_defs,skia,\ -DSK_DEBUG \ - -USK_RELEASE \ - -UNDEBUG \ + -DSK_ENABLE_DUMP_GPU \ +)) +else +$(eval $(call gb_Library_add_defs,skia,\ + -DSK_RELEASE \ + -DNDEBUG \ )) +endif +ifeq ($(OS),WNT) # TODO $(eval $(call gb_Library_add_defs,skia,\ - -DSK_USER_CONFIG_HEADER="<$(SRCDIR)/external/skia/configs/SkUserConfig.h>" \ + -DSK_BUILD_FOR_WIN \ + -DSK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSSE3 \ )) -# TODO +$(eval $(call gb_Library_add_cxxflags,skia, \ + -arch:SSE2 \ +)) +ifneq ($(gb_ENABLE_PCH),) +$(eval $(call gb_Library_add_cxxflags,skia, \ + -FIsrc/utils/win/SkDWriteNTDDI_VERSION.h \ +)) +endif + +$(eval $(call gb_Library_use_system_win32_libs,skia,\ + fontsub \ + ole32 \ + oleaut32 \ + user32 \ + usp10 \ + opengl32 \ + gdi32 \ +)) +else $(eval $(call gb_Library_add_defs,skia,\ - -DSK_SUPPORT_GPU=1 \ - -DSK_GL=1 \ - -DSK_VULKAN=1 \ + -DSK_BUILD_FOR_UNIX \ + -DSK_R32_SHIFT=16 \ +)) + +# TODO +$(eval $(call gb_Library_add_cxxflags,skia, \ + -mssse3 \ )) $(eval $(call gb_Library_use_externals,skia,\ freetype \ fontconfig \ +)) +endif + +$(eval $(call gb_Library_use_externals,skia,\ zlib \ libjpeg \ libpng \ @@ -68,15 +100,12 @@ $(eval $(call gb_Library_use_libraries,skia,\ sal \ )) -$(eval $(call gb_Library_add_cxxflags,skia, \ - -mssse3 \ -)) - $(eval $(call gb_Library_set_include,skia,\ $$(INCLUDE) \ -I$(call gb_UnpackedTarball_get_dir,skia) \ -I$(call gb_UnpackedTarball_get_dir,skia)/include/third_party/skcms/ \ -I$(call gb_UnpackedTarball_get_dir,skia)/third_party/vulkanmemoryallocator/ \ + -I$(call gb_UnpackedTarball_get_dir,skia)/include/third_party/vulkan/ \ )) $(eval $(call gb_Library_add_exception_objects,skia,\ @@ -343,7 +372,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\ UnpackedTarball/skia/src/effects/SkTrimPathEffect \ UnpackedTarball/skia/src/effects/Sk1DPathEffect \ UnpackedTarball/skia/src/effects/Sk2DPathEffect \ - UnpackedTarball/skia/src/fonts/SkFontMgr_indirect \ UnpackedTarball/skia/src/fonts/SkRemotableFontMgr \ UnpackedTarball/skia/src/image/SkImage \ UnpackedTarball/skia/src/image/SkImage_Lazy \ @@ -491,26 +519,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\ )) $(eval $(call gb_Library_add_generated_exception_objects,skia,\ - UnpackedTarball/skia/src/opts/SkOpts_avx \ - UnpackedTarball/skia/src/opts/SkOpts_crc32 \ - UnpackedTarball/skia/src/opts/SkOpts_hsw \ - UnpackedTarball/skia/src/opts/SkOpts_sse41 \ - UnpackedTarball/skia/src/opts/SkOpts_sse42 \ - UnpackedTarball/skia/src/opts/SkOpts_ssse3 \ - UnpackedTarball/skia/src/ports/SkDebug_stdio \ - UnpackedTarball/skia/src/ports/SkGlobalInitialization_default \ - UnpackedTarball/skia/src/ports/SkFontHost_FreeType_common \ - UnpackedTarball/skia/src/ports/SkFontHost_FreeType \ - UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig \ - UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig_factory \ - UnpackedTarball/skia/src/ports/SkImageGenerator_none \ - UnpackedTarball/skia/src/ports/SkOSFile_posix \ - UnpackedTarball/skia/src/ports/SkOSFile_stdio \ - UnpackedTarball/skia/src/ports/SkOSLibrary_posix \ - UnpackedTarball/skia/src/ports/SkTLS_pthread \ -)) - -$(eval $(call gb_Library_add_generated_exception_objects,skia,\ UnpackedTarball/skia/src/core/SkGpuBlurUtils \ UnpackedTarball/skia/src/gpu/ccpr/GrCCAtlas \ UnpackedTarball/skia/src/gpu/ccpr/GrCCClipPath \ @@ -769,7 +777,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\ UnpackedTarball/skia/src/image/SkImage_Gpu \ UnpackedTarball/skia/src/image/SkImage_GpuYUVA \ UnpackedTarball/skia/src/image/SkSurface_Gpu \ - UnpackedTarball/skia/src/gpu/gl/glx/GrGLMakeNativeInterface_glx \ UnpackedTarball/skia/src/gpu/vk/GrVkAMDMemoryAllocator \ UnpackedTarball/skia/src/gpu/vk/GrVkBuffer \ UnpackedTarball/skia/src/gpu/vk/GrVkBufferView \ @@ -813,6 +820,58 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\ UnpackedTarball/skia/src/gpu/vk/GrVkVertexBuffer \ )) +$(eval $(call gb_Library_add_generated_exception_objects,skia,\ + UnpackedTarball/skia/src/opts/SkOpts_avx \ + UnpackedTarball/skia/src/opts/SkOpts_crc32 \ + UnpackedTarball/skia/src/opts/SkOpts_hsw \ + UnpackedTarball/skia/src/opts/SkOpts_sse41 \ + UnpackedTarball/skia/src/opts/SkOpts_sse42 \ + UnpackedTarball/skia/src/opts/SkOpts_ssse3 \ + UnpackedTarball/skia/src/ports/SkGlobalInitialization_default \ + UnpackedTarball/skia/src/ports/SkImageGenerator_none \ + UnpackedTarball/skia/src/ports/SkOSFile_stdio \ +)) + +ifeq ($(OS),WNT) +$(eval $(call gb_Library_add_generated_exception_objects,skia,\ + UnpackedTarball/skia/src/gpu/gl/win/GrGLMakeNativeInterface_win \ + UnpackedTarball/skia/src/ports/SkDebug_win \ + UnpackedTarball/skia/src/ports/SkFontHost_win \ + UnpackedTarball/skia/src/fonts/SkFontMgr_indirect \ + UnpackedTarball/skia/src/ports/SkFontMgr_win_dw \ + UnpackedTarball/skia/src/ports/SkFontMgr_win_dw_factory \ + UnpackedTarball/skia/src/ports/SkOSFile_win \ + UnpackedTarball/skia/src/ports/SkOSLibrary_win \ + UnpackedTarball/skia/src/ports/SkScalerContext_win_dw \ + UnpackedTarball/skia/src/ports/SkTLS_win \ + UnpackedTarball/skia/src/ports/SkTypeface_win_dw \ + UnpackedTarball/skia/src/utils/win/SkAutoCoInitialize \ + UnpackedTarball/skia/src/utils/win/SkDWrite \ + UnpackedTarball/skia/src/utils/win/SkDWriteFontFileStream \ + UnpackedTarball/skia/src/utils/win/SkDWriteGeometrySink \ + UnpackedTarball/skia/src/utils/win/SkHRESULT \ + UnpackedTarball/skia/src/utils/win/SkIStream \ + UnpackedTarball/skia/src/utils/win/SkWGL_win \ +)) +else +$(eval $(call gb_Library_add_generated_exception_objects,skia,\ + UnpackedTarball/skia/src/gpu/gl/glx/GrGLMakeNativeInterface_glx \ + UnpackedTarball/skia/src/ports/SkDebug_stdio \ + UnpackedTarball/skia/src/ports/SkFontConfigInterface \ + UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct \ + UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct_factory \ + UnpackedTarball/skia/src/ports/SkFontHost_FreeType_common \ + UnpackedTarball/skia/src/ports/SkFontHost_FreeType \ + UnpackedTarball/skia/src/ports/SkFontMgr_FontConfigInterface \ + UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig \ + UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig_factory \ + UnpackedTarball/skia/src/ports/SkOSFile_posix \ + UnpackedTarball/skia/src/ports/SkOSLibrary_posix \ + UnpackedTarball/skia/src/ports/SkTLS_pthread \ +)) +endif + + # UnpackedTarball/skia/src/android/SkAndroidFrameworkUtils \ # UnpackedTarball/skia/src/android/SkAnimatedImage \ # UnpackedTarball/skia/src/android/SkBitmapRegionCodec \ @@ -829,16 +888,13 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\ # UnpackedTarball/skia/src/gpu/gl/glfw/GrGLMakeNativeInterface_glfw \ # UnpackedTarball/skia/src/gpu/gl/iOS/GrGLMakeNativeInterface_iOS \ # UnpackedTarball/skia/src/gpu/gl/mac/GrGLMakeNativeInterface_mac \ -# UnpackedTarball/skia/src/gpu/gl/win/GrGLMakeNativeInterface_win \ # UnpackedTarball/skia/src/ports/SkDebug_android \ -# UnpackedTarball/skia/src/ports/SkDebug_win \ # UnpackedTarball/skia/src/ports/SkDiscardableMemory_none \ # UnpackedTarball/skia/src/ports/SkFontConfigInterface \ # UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct \ # UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct_factory \ # UnpackedTarball/skia/src/ports/SkFontHost_mac \ -# UnpackedTarball/skia/src/ports/SkFontHost_win \ # UnpackedTarball/skia/src/ports/SkFontMgr_android \ # UnpackedTarball/skia/src/ports/SkFontMgr_android_factory \ # UnpackedTarball/skia/src/ports/SkFontMgr_android_parser \ @@ -853,22 +909,15 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\ # UnpackedTarball/skia/src/ports/SkFontMgr_FontConfigInterface \ # UnpackedTarball/skia/src/ports/SkFontMgr_FontConfigInterface_factory \ # UnpackedTarball/skia/src/ports/SkFontMgr_fuchsia \ -# UnpackedTarball/skia/src/ports/SkFontMgr_win_dw \ -# UnpackedTarball/skia/src/ports/SkFontMgr_win_dw_factory \ # UnpackedTarball/skia/src/ports/SkImageEncoder_CG \ # UnpackedTarball/skia/src/ports/SkImageEncoder_WIC \ # UnpackedTarball/skia/src/ports/SkImageGeneratorCG \ -# UnpackedTarball/skia/src/ports/SkImageGenerator_skia \ # UnpackedTarball/skia/src/ports/SkImageGeneratorWIC \ +# UnpackedTarball/skia/src/ports/SkImageGenerator_skia \ # UnpackedTarball/skia/src/ports/SkMemory_malloc \ # UnpackedTarball/skia/src/ports/SkMemory_mozalloc \ -# UnpackedTarball/skia/src/ports/SkOSFile_win \ -# UnpackedTarball/skia/src/ports/SkOSLibrary_win \ # UnpackedTarball/skia/src/ports/SkRemotableFontMgr_win_dw \ -# UnpackedTarball/skia/src/ports/SkScalerContext_win_dw \ # UnpackedTarball/skia/src/ports/SkTLS_none \ -# UnpackedTarball/skia/src/ports/SkTLS_win \ -# UnpackedTarball/skia/src/ports/SkTypeface_win_dw \ # UnpackedTarball/skia/src/utils/mac/SkCreateCGImageRef \ # UnpackedTarball/skia/src/utils/mac/SkStream_mac \ diff --git a/external/skia/UnpackedTarball_skia.mk b/external/skia/UnpackedTarball_skia.mk index 2221e5a00ebb..7ae3bf4427fc 100644 --- a/external/skia/UnpackedTarball_skia.mk +++ b/external/skia/UnpackedTarball_skia.mk @@ -11,7 +11,8 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,skia)) $(eval $(call gb_UnpackedTarball_set_tarball,skia,$(SKIA_TARBALL))) -skia_patches := lerp.patch +# TODO +skia_patches := lerp.patch fix-pch.patch fix-ddi.patch $(eval $(call gb_UnpackedTarball_set_patchlevel,skia,1)) diff --git a/external/skia/configs/SkUserConfig.h b/external/skia/configs/SkUserConfig.h deleted file mode 100644 index 19372a4621ba..000000000000 --- a/external/skia/configs/SkUserConfig.h +++ /dev/null @@ -1,191 +0,0 @@ - -/* - * Copyright 2006 The Android Open Source Project - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkUserConfig_DEFINED -#define SkUserConfig_DEFINED - -/* SkTypes.h, the root of the public header files, does the following trick: - - #include "SkPreConfig.h" - #include "SkUserConfig.h" - #include "SkPostConfig.h" - - SkPreConfig.h runs first, and it is responsible for initializing certain - skia defines. - - SkPostConfig.h runs last, and its job is to just check that the final - defines are consistent (i.e. that we don't have mutually conflicting - defines). - - SkUserConfig.h (this file) runs in the middle. It gets to change or augment - the list of flags initially set in preconfig, and then postconfig checks - that everything still makes sense. - - Below are optional defines that add, subtract, or change default behavior - in Skia. Your port can locally edit this file to enable/disable flags as - you choose, or these can be delared on your command line (i.e. -Dfoo). - - By default, this include file will always default to having all of the flags - commented out, so including it will have no effect. -*/ - -/////////////////////////////////////////////////////////////////////////////// - -/* Scalars (the fractional value type in skia) can be implemented either as - floats or 16.16 integers (fixed). Exactly one of these two symbols must be - defined. -*/ -#define SK_SCALAR_IS_FLOAT -//#define SK_SCALAR_IS_FIXED - -/* For some performance-critical scalar operations, skia will optionally work - around the standard float operators if it knows that the CPU does not have - native support for floats. If your environment uses software floating point, - define this flag. - */ -//#define SK_SOFTWARE_FLOAT - -/* Skia has lots of debug-only code. Often this is just null checks or other - parameter checking, but sometimes it can be quite intrusive (e.g. check that - each 32bit pixel is in premultiplied form). This code can be very useful - during development, but will slow things down in a shipping product. - - By default, these mutually exclusive flags are defined in SkPreConfig.h, - based on the presence or absence of NDEBUG, but that decision can be changed - here. - */ -//#define SK_DEBUG -//#define SK_RELEASE - -/* Skia has certain debug-only code that is extremely intensive even for debug - builds. This code is useful for diagnosing specific issues, but is not - generally applicable, therefore it must be explicitly enabled to avoid - the performance impact. By default these flags are undefined, but can be - enabled by uncommenting them below. - */ -//#define SK_DEBUG_GLYPH_CACHE -//#define SK_DEBUG_PATH - -/* To assist debugging, Skia provides an instance counting utility in - include/core/SkInstCount.h. This flag turns on and off that utility to - allow instance count tracking in either debug or release builds. By - default it is enabled in debug but disabled in release. - */ -//#define SK_ENABLE_INST_COUNT 1 - -/* If, in debugging mode, Skia needs to stop (presumably to invoke a debugger) - it will call SK_CRASH(). If this is not defined it, it is defined in - SkPostConfig.h to write to an illegal address - */ -//#define SK_CRASH() *(int *)(uintptr_t)0 = 0 - -/* preconfig will have attempted to determine the endianness of the system, - but you can change these mutually exclusive flags here. - */ -//#define SK_CPU_BENDIAN -//#define SK_CPU_LENDIAN - -/* Most compilers use the same bit endianness for bit flags in a byte as the - system byte endianness, and this is the default. If for some reason this - needs to be overridden, specify which of the mutually exclusive flags to - use. For example, some atom processors in certain configurations have big - endian byte order but little endian bit orders. -*/ -//#define SK_UINT8_BITFIELD_BENDIAN -//#define SK_UINT8_BITFIELD_LENDIAN - -/* Some compilers don't support long long for 64bit integers. If yours does - not, define this to the appropriate type. - */ -//#define SkLONGLONG int64_t - -/* To write debug messages to a console, skia will call SkDebugf(...) following - printf conventions (e.g. const char* format, ...). If you want to redirect - this to something other than printf, define yours here - */ -//#define SkDebugf(...) MyFunction(__VA_ARGS__) - -/* - * To specify a different default font cache limit, define this. If this is - * undefined, skia will use a built-in value. - */ -//#define SK_DEFAULT_FONT_CACHE_LIMIT (1024 * 1024) - -/* If defined, use CoreText instead of ATSUI on OS X. -*/ -//#define SK_USE_MAC_CORE_TEXT - -/* If zlib is available and you want to support the flate compression - algorithm (used in PDF generation), define SK_ZLIB_INCLUDE to be the - include path. Alternatively, define SK_SYSTEM_ZLIB to use the system zlib - library specified as "#include <zlib.h>". - */ -//#define SK_ZLIB_INCLUDE <zlib.h> -#define SK_SYSTEM_ZLIB - -/* Define this to allow PDF scalars above 32k. The PDF/A spec doesn't allow - them, but modern PDF interpreters should handle them just fine. - */ -#define SK_ALLOW_LARGE_PDF_SCALARS - -/* Define this to provide font subsetter in PDF generation. - */ -//#define SK_SFNTLY_SUBSETTER "sfntly/subsetter/font_subsetter.h" - -/* Define this to remove dimension checks on bitmaps. Not all blits will be - correct yet, so this is mostly for debugging the implementation. - */ -#define SK_ALLOW_OVER_32K_BITMAPS - -/** - * To revert to int-only srcrect behavior in drawBitmapRect(ToRect), - * define this symbol. - */ -//#define SK_SUPPORT_INT_SRCRECT_DRAWBITMAPRECT - -/* Define this to set the upper limit for text to support LCD. Values that - are very large increase the cost in the font cache and draw slower, without - improving readability. If this is undefined, Skia will use its default - value (e.g. 48) - */ -//#define SK_MAX_SIZE_FOR_LCDTEXT 48 - -/* If SK_DEBUG is defined, then you can optionally define SK_SUPPORT_UNITTEST - which will run additional self-tests at startup. These can take a long time, - so this flag is optional. - */ -#ifdef SK_DEBUG -//#define SK_SUPPORT_UNITTEST -#endif - -/* If your system embeds skia and has complex event logging, define this - symbol to name a file that maps the following macros to your system's - equivalents: - SK_TRACE_EVENT0(event) - SK_TRACE_EVENT1(event, name1, value1) - SK_TRACE_EVENT2(event, name1, value1, name2, value2) - src/utils/SkDebugTrace.h has a trivial implementation that writes to - the debug output stream. If SK_USER_TRACE_INCLUDE_FILE is not defined, - SkTrace.h will define the above three macros to do nothing. -*/ -//#undef SK_USER_TRACE_INCLUDE_FILE - -/* Change the kN32_SkColorType ordering to BGRA to work in X windows. - */ -//#define SK_R32_SHIFT 16 - -/* Determines whether to build code that supports the GPU backend. Some classes - that are not GPU-specific, such as SkShader subclasses, have optional code - that is used allows them to interact with the GPU backend. If you'd like to - omit this code set SK_SUPPORT_GPU to 0. This also allows you to omit the gpu - directories from your include search path when you're not building the GPU - backend. Defaults to 1 (build the GPU code). - */ -//#define SK_SUPPORT_GPU 1 - -#endif diff --git a/external/skia/fix-ddi.patch b/external/skia/fix-ddi.patch new file mode 100644 index 000000000000..f827c1d69553 --- /dev/null +++ b/external/skia/fix-ddi.patch @@ -0,0 +1,9 @@ +--- skia/src/utils/win/SkDWriteNTDDI_VERSION.h.sav 2019-08-15 21:59:46.000000000 +0200 ++++ skia/src/utils/win/SkDWriteNTDDI_VERSION.h 2019-09-26 15:30:36.395622200 +0200 +@@ -28,4 +28,6 @@ + # endif + #endif + ++#define NTDDI_VERSION 0x0A000002 // NTDDI_WIN10_RS1 ++ + #endif diff --git a/external/skia/fix-pch.patch b/external/skia/fix-pch.patch new file mode 100644 index 000000000000..9078a8a12e51 --- /dev/null +++ b/external/skia/fix-pch.patch @@ -0,0 +1,46 @@ +--- skia/src/utils/Sk3D.cpp.sav 2019-08-15 21:59:46.324369467 +0200 ++++ skia/src/utils/Sk3D.cpp 2019-09-26 13:13:34.153647165 +0200 +@@ -38,6 +38,9 @@ void Sk3LookAt(SkMatrix44* dst, const Sk + dst->invert(dst); + } + ++#undef far ++#undef near ++ + bool Sk3Perspective(SkMatrix44* dst, float near, float far, float angle) { + SkASSERT(far > near); + +--- skia/src/gpu/vk/GrVkSemaphore.cpp.sav 2019-08-15 21:59:46.292369407 +0200 ++++ skia/src/gpu/vk/GrVkSemaphore.cpp 2019-09-26 13:12:56.041647516 +0200 +@@ -10,6 +10,7 @@ + #include "include/gpu/GrBackendSemaphore.h" + #include "src/gpu/vk/GrVkGpu.h" + #include "src/gpu/vk/GrVkUtil.h" ++#include "tools/gpu/vk/GrVulkanDefines.h" + + #ifdef VK_USE_PLATFORM_WIN32_KHR + // windows wants to define this as CreateSemaphoreA or CreateSemaphoreW +--- skia/third_party/skcms/skcms.cc.sav 2019-09-26 13:03:33.997652697 +0200 ++++ skia/third_party/skcms/skcms.cc 2019-09-26 13:13:19.185647303 +0200 +@@ -1817,7 +1817,9 @@ typedef enum { + Op_store_hhhh, + Op_store_fff, + Op_store_ffff, +-} Op; ++} Op_skcms; ++ ++#define Op Op_skcms + + #if defined(__clang__) + template <int N, typename T> using Vec = T __attribute__((ext_vector_type(N))); +--- skia/src/utils/win/SkDWriteGeometrySink.h.sav 2019-08-15 22:00:07.552409373 +0200 ++++ skia/src/utils/win/SkDWriteGeometrySink.h 2019-09-26 13:54:17.725624642 +0200 +@@ -12,6 +12,8 @@ + + class SkPath; + ++#define CONST const ++ + #include <dwrite.h> + #include <d2d1.h> + diff --git a/external/skia/inc/pch/precompiled_skia.hxx b/external/skia/inc/pch/precompiled_skia.hxx index b5a2a52b01e9..5f40d7a38273 100644 --- a/external/skia/inc/pch/precompiled_skia.hxx +++ b/external/skia/inc/pch/precompiled_skia.hxx @@ -13,7 +13,7 @@ manual changes will be rewritten by the next run of update_pch.sh (which presumably also fixes all possible problems, so it's usually better to use it). - Generated on 2019-09-19 15:53:06 using: + Generated on 2019-09-26 11:31:14 using: ./bin/update_pch external/skia skia --cutoff=1 --exclude:system --include:module --include:local If after updating build fails, use the following command to locate conflicting headers: @@ -35,10 +35,8 @@ #include <cstring> #include <ctype.h> #include <deque> -#include <dirent.h> #include <errno.h> #include <float.h> -#include <ft2build.h> #include <functional> #include <initializer_list> #include <inttypes.h> @@ -49,7 +47,6 @@ #include <memory> #include <new> #include <png.h> -#include <pthread.h> #include <queue> #include <set> #include <skcms.h> @@ -63,7 +60,6 @@ #include <thread> #include <tuple> #include <type_traits> -#include <unistd.h> #include <unordered_map> #include <unordered_set> #include <utility> @@ -74,8 +70,6 @@ #include <sal/log.hxx> #endif // PCH_LEVEL >= 2 #if PCH_LEVEL >= 3 -#include <GL/glx.h> -#include <fontconfig/fontconfig.h> #include <include/c/sk_canvas.h> #include <include/c/sk_colorspace.h> #include <include/c/sk_data.h> @@ -233,10 +227,7 @@ #include <include/gpu/mock/GrMockTypes.h> #include <include/gpu/vk/GrVkBackendContext.h> #include <include/gpu/vk/GrVkExtensions.h> -#include <include/gpu/vk/GrVkMemoryAllocator.h> #include <include/gpu/vk/GrVkTypes.h> -#include <include/pathops/SkPathOps.h> -#include <include/ports/SkFontMgr_fontconfig.h> #include <include/ports/SkFontMgr_indirect.h> #include <include/ports/SkRemotableFontMgr.h> #include <include/private/GrContext_Base.h> @@ -292,9 +283,6 @@ #include <include/utils/SkRandom.h> #include <include/utils/SkShadowUtils.h> #include <include/utils/SkTextUtils.h> -#include <src/Transform_inl.h> -#include <src/c/sk_c_from_to.h> -#include <src/c/sk_types_priv.h> #include <src/codec/SkAndroidCodecAdapter.h> #include <src/codec/SkBmpBaseCodec.h> #include <src/codec/SkBmpCodec.h> @@ -339,7 +327,6 @@ #include <src/core/SkBitmapProcState.h> #include <src/core/SkBitmapProvider.h> #include <src/core/SkBlendModePriv.h> -#include <src/core/SkBlitBWMaskTemplate.h> #include <src/core/SkBlitRow.h> #include <src/core/SkBlitter.h> #include <src/core/SkBlurMask.h> @@ -359,7 +346,6 @@ #include <src/core/SkCoverageModePriv.h> #include <src/core/SkCpu.h> #include <src/core/SkCubicClipper.h> -#include <src/core/SkCubicSolver.h> #include <src/core/SkDescriptor.h> #include <src/core/SkDevice.h> #include <src/core/SkDiscardableMemory.h> @@ -608,7 +594,6 @@ #include <src/gpu/GrTextureRenderTargetProxy.h> #include <src/gpu/GrTracing.h> #include <src/gpu/GrUserStencilSettings.h> -#include <src/gpu/GrUtil.h> #include <src/gpu/GrVertexWriter.h> #include <src/gpu/GrWindowRectangles.h> #include <src/gpu/GrXferProcessor.h> @@ -769,7 +754,6 @@ #include <src/gpu/text/GrTextBlobCache.h> #include <src/gpu/text/GrTextContext.h> #include <src/gpu/text/GrTextTarget.h> -#include <src/gpu/vk/GrVkAMDMemoryAllocator.h> #include <src/gpu/vk/GrVkBuffer.h> #include <src/gpu/vk/GrVkBufferView.h> #include <src/gpu/vk/GrVkCaps.h> @@ -819,14 +803,6 @@ #include <src/images/SkImageEncoderPriv.h> #include <src/images/SkJPEGWriteUtility.h> #include <src/lazy/SkDiscardableMemoryPool.h> -#include <src/opts/SkBitmapProcState_opts.h> -#include <src/opts/SkBlitMask_opts.h> -#include <src/opts/SkBlitRow_opts.h> -#include <src/opts/SkChecksum_opts.h> -#include <src/opts/SkRasterPipeline_opts.h> -#include <src/opts/SkSwizzler_opts.h> -#include <src/opts/SkUtils_opts.h> -#include <src/opts/SkXfermode_opts.h> #include <src/pathops/SkAddIntersections.h> #include <src/pathops/SkIntersectionHelper.h> #include <src/pathops/SkIntersections.h> @@ -882,7 +858,6 @@ #include <src/sfnt/SkOTTable_head.h> #include <src/sfnt/SkOTTable_name.h> #include <src/sfnt/SkOTUtils.h> -#include <src/sfnt/SkSFNTHeader.h> #include <src/shaders/SkBitmapProcShader.h> #include <src/shaders/SkColorFilterShader.h> #include <src/shaders/SkColorShader.h> @@ -907,7 +882,6 @@ #include <src/sksl/SkSLByteCode.h> #include <src/sksl/SkSLByteCodeGenerator.h> #include <src/sksl/SkSLCFGGenerator.h> -#include <src/sksl/SkSLCPP.h> #include <src/sksl/SkSLCPPCodeGenerator.h> #include <src/sksl/SkSLCPPUniformCTypes.h> #include <src/sksl/SkSLCompiler.h> @@ -989,9 +963,6 @@ #include <src/utils/SkShadowTessellator.h> #include <src/utils/SkShaperJSONWriter.h> #include <src/utils/SkUTF.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <sys/types.h> #include <third_party/gif/SkGifImageReader.h> #include <vulkan/vulkan_core.h> #endif // PCH_LEVEL >= 3 _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits