bin/update_pch                                         |    2 
 config_host/config_skia.h.in                           |    5 
 configure.ac                                           |    4 
 download.lst                                           |    4 
 external/skia/Library_skia.mk                          |  140 +++++----
 external/skia/UnpackedTarball_skia.mk                  |    3 
 external/skia/constexpr-template.patch.0               |   65 ----
 external/skia/fast-png-write.patch.1                   |   15 -
 external/skia/fix-SkDebugf-link-error.patch.1          |   20 +
 external/skia/fix-alpha-difference-copy.patch.1        |    2 
 external/skia/fix-pch.patch.1                          |    2 
 external/skia/inc/pch/precompiled_skia.hxx             |  255 ++++++++---------
 external/skia/make-api-visible.patch.1                 |    6 
 external/skia/share-grcontext.patch.1                  |   39 +-
 external/skia/source/SkMemory_malloc.cxx               |    2 
 external/skia/swap-buffers-rect.patch.1                |  216 +++++++-------
 external/skia/ubsan.patch.1                            |    8 
 external/skia/windows-do-not-modify-logfont.patch.0    |    4 
 external/skia/windows-force-unicode-api.patch.0        |    4 
 external/skia/windows-raster-surface-no-copies.patch.1 |   16 -
 vcl/inc/skia/gdiimpl.hxx                               |    1 
 vcl/skia/SkiaHelper.cxx                                |   72 +++-
 vcl/skia/gdiimpl.cxx                                   |    2 
 vcl/skia/osx/bitmap.cxx                                |    1 
 vcl/skia/salbmp.cxx                                    |    4 
 vcl/skia/win/gdiimpl.cxx                               |    3 
 vcl/skia/x11/textrender.cxx                            |   16 +
 27 files changed, 473 insertions(+), 438 deletions(-)

New commits:
commit f8c15850dbfaa46605e1e353ae1f49e69184e8a1
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Sat Jul 8 20:28:29 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Jul 10 12:44:38 2023 +0200

    update skia to m116
    
    (from m111)
    
    SK_SUPPORT_GPU is now SK_GANESH
    
    GR_OP_ALLOCATE_USE_NEW was removed in skia m111
        commit dd8f8ed3848cbe2032edc7ec08ef648a23e28ad9
        Author: Mike Klein <mtkl...@google.com>
        Date:   Thu Apr 22 12:17:33 2021 -0500
        clean up defines that do nothing
    
    the fast-png-write patch was removed. The underlying helper
    function we need was removed in
        commit 0ec4c84abd0b578a5c792b04b56653cbc325530e
        Author: Kevin Lubick <kjlub...@google.com>
        Date:   Thu Apr 20 14:46:28 2023 -0400
        Remove SkImageEncoder and SkImage::encodeToData
    So I updated our dump() function in SkiaHelper.cxx to
    use the new Skia API.
    
    The constexpr-template patch seems to be superceded by skia
    changes.
    
    SkOpts: :hash_fn has been replaced with SkChecksum::Hash32
        commit 657ed9cf2379a950b925cb2aba7c85d6e1dd36ed
        Author: Brian Osman <brianos...@google.com>
        Date:   Tue May 23 12:40:12 2023 +0000
        Reland "Replace SkOpts::hash/hash_fn with SkChecksum::Hash32"
    
    The SkDebugf function needs to be exported from the library since
    it leaks out to calling code via some of the headers.
    
    Change-Id: I80ace8f25e660fa7889d22ef90676f47264d866c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154223
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/bin/update_pch b/bin/update_pch
index 63a39ce51b0b..4719e5f9269f 100755
--- a/bin/update_pch
+++ b/bin/update_pch
@@ -706,7 +706,7 @@ def is_allowed_if(line, module):
         return True
     if module == "external/skia":
         # We always set these.
-        if line == "#ifdef SK_VULKAN" or line == "#if SK_SUPPORT_GPU":
+        if line == "#ifdef SK_VULKAN" or line == "#if SK_GANESH":
             return True
     return False
 
diff --git a/config_host/config_skia.h.in b/config_host/config_skia.h.in
index 85711486984f..602e18a3f67b 100644
--- a/config_host/config_skia.h.in
+++ b/config_host/config_skia.h.in
@@ -31,7 +31,7 @@ are the same.
 
 
 // GPU support (set by configure).
-#undef SK_SUPPORT_GPU
+#undef SK_GANESH
 // Vulkan support enabled (set by configure).
 #undef SK_VULKAN
 // Metal support enabled (set by configure).
@@ -40,9 +40,6 @@ are the same.
 // Memory allocator for Vulkan.
 #define SK_USE_VMA 1
 
-// Set by Skia's BUILD.gn.
-#define GR_OP_ALLOCATE_USE_NEW
-
 #define SK_CODEC_DECODES_PNG 1
 #define SK_ENCODE_PNG 1
 
diff --git a/configure.ac b/configure.ac
index 80f2e5aa54f9..8c4977bfd3e5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -12180,12 +12180,12 @@ if test "$enable_skia" != "no" -a "$build_skia" = 
"yes" -a -z "$DISABLE_GUI"; th
         BUILD_TYPE="$BUILD_TYPE SKIA"
 
         if test "$OS" = "MACOSX"; then
-            AC_DEFINE(SK_SUPPORT_GPU,1)
+            AC_DEFINE(SK_GANESH,1)
             AC_DEFINE(SK_METAL,1)
             SKIA_GPU=METAL
             AC_SUBST(SKIA_GPU)
         else
-            AC_DEFINE(SK_SUPPORT_GPU,1)
+            AC_DEFINE(SK_GANESH,1)
             AC_DEFINE(SK_VULKAN,1)
             SKIA_GPU=VULKAN
             AC_SUBST(SKIA_GPU)
diff --git a/download.lst b/download.lst
index 87821c543946..90d2341fefa7 100644
--- a/download.lst
+++ b/download.lst
@@ -506,8 +506,8 @@ RHINO_TARBALL := 
798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
-SKIA_SHA256SUM := 
0d08a99ed46cde43b5ad2672b5d8770c8eb85d0d26cb8f1f85fd9befe1e9ceb9
-SKIA_TARBALL := skia-m111-a31e897fb3dcbc96b2b40999751611d029bf5404.tar.xz
+SKIA_SHA256SUM := 
2223ebce534458a37826e8fe4f24635b0712cde7ed1bd3208f089f6fdd796e01
+SKIA_TARBALL := skia-m116-2ddcf183eb260f63698aa74d1bb380f247ad7ccd.tar.xz 
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk
index 7a7f59eccdb3..77e674a0b5e2 100644
--- a/external/skia/Library_skia.mk
+++ b/external/skia/Library_skia.mk
@@ -14,7 +14,8 @@ $(eval $(call gb_Library_set_warnings_disabled,skia))
 $(eval $(call gb_Library_use_unpacked,skia,skia))
 
 $(eval $(call gb_Library_use_clang,skia))
-$(eval $(call 
gb_Library_set_clang_precompiled_header,skia,external/skia/inc/pch/precompiled_skia))
+#This currently results in all sorts of compile complaints
+#$(eval $(call 
gb_Library_set_clang_precompiled_header,skia,external/skia/inc/pch/precompiled_skia))
 
 $(eval $(call gb_Library_add_defs,skia,\
     -DSKIA_IMPLEMENTATION=1 \
@@ -130,14 +131,21 @@ $(eval $(call 
gb_Library_set_generated_cxx_suffix,skia,cpp))
 
 $(eval $(call gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/base/SkArenaAlloc \
+    UnpackedTarball/skia/src/base/SkBezierCurves \
     UnpackedTarball/skia/src/base/SkBlockAllocator \
     UnpackedTarball/skia/src/base/SkBuffer \
     UnpackedTarball/skia/src/base/SkContainers \
+    UnpackedTarball/skia/src/base/SkCubics \
     UnpackedTarball/skia/src/base/SkDeque \
+    UnpackedTarball/skia/src/base/SkFloatingPoint \
+    UnpackedTarball/skia/src/base/SkHalf \
     UnpackedTarball/skia/src/base/SkMalloc \
     UnpackedTarball/skia/src/base/SkMathPriv \
+    UnpackedTarball/skia/src/base/SkQuads \
     UnpackedTarball/skia/src/base/SkSafeMath \
     UnpackedTarball/skia/src/base/SkSemaphore \
+    UnpackedTarball/skia/src/base/SkSharedMutex \
+    UnpackedTarball/skia/src/base/SkSpinlock \
     UnpackedTarball/skia/src/base/SkTDArray \
     UnpackedTarball/skia/src/base/SkThreadID \
     UnpackedTarball/skia/src/base/SkTSearch \
@@ -152,12 +160,13 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/codec/SkBmpStandardCodec \
     UnpackedTarball/skia/src/codec/SkCodec \
     UnpackedTarball/skia/src/codec/SkCodecImageGenerator \
-    UnpackedTarball/skia/src/codec/SkColorTable \
+    UnpackedTarball/skia/src/codec/SkColorPalette \
     UnpackedTarball/skia/src/codec/SkEncodedInfo \
     UnpackedTarball/skia/src/codec/SkIcoCodec \
     UnpackedTarball/skia/src/codec/SkMasks \
     UnpackedTarball/skia/src/codec/SkMaskSwizzler \
     UnpackedTarball/skia/src/codec/SkParseEncodedOrigin \
+    UnpackedTarball/skia/src/codec/SkPixmapUtils \
     UnpackedTarball/skia/src/codec/SkPngCodec \
     UnpackedTarball/skia/src/codec/SkSampledCodec \
     UnpackedTarball/skia/src/codec/SkSampler \
@@ -184,19 +193,21 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkBlitter \
     UnpackedTarball/skia/src/core/SkBlitter_Sprite \
     UnpackedTarball/skia/src/core/SkBlurMask \
-    UnpackedTarball/skia/src/core/SkBlurMF \
+    UnpackedTarball/skia/src/core/SkBlurMaskFilterImpl \
     UnpackedTarball/skia/src/core/SkCachedData \
     UnpackedTarball/skia/src/core/SkCanvas \
+    UnpackedTarball/skia/src/core/SkCanvas_Raster \
     UnpackedTarball/skia/src/core/SkCanvasPriv \
     UnpackedTarball/skia/src/core/SkCapabilities \
+    UnpackedTarball/skia/src/core/SkChecksum \
     UnpackedTarball/skia/src/core/SkChromeRemoteGlyphCache \
     UnpackedTarball/skia/src/core/SkClipStack \
     UnpackedTarball/skia/src/core/SkClipStackDevice \
     UnpackedTarball/skia/src/core/SkColor \
     UnpackedTarball/skia/src/core/SkColorFilter \
-    UnpackedTarball/skia/src/core/SkColorFilter_Matrix \
     UnpackedTarball/skia/src/core/SkColorSpace \
     UnpackedTarball/skia/src/core/SkColorSpaceXformSteps \
+    UnpackedTarball/skia/src/core/SkColorTable \
     UnpackedTarball/skia/src/core/SkCompressedDataUtils \
     UnpackedTarball/skia/src/core/SkContourMeasure \
     UnpackedTarball/skia/src/core/SkConvertPixels \
@@ -206,14 +217,13 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkData \
     UnpackedTarball/skia/src/core/SkDataTable \
     UnpackedTarball/skia/src/core/SkDebug \
-    UnpackedTarball/skia/src/core/SkDeferredDisplayList \
-    UnpackedTarball/skia/src/core/SkDeferredDisplayListRecorder \
     UnpackedTarball/skia/src/core/SkDescriptor \
     UnpackedTarball/skia/src/core/SkDevice \
     UnpackedTarball/skia/src/core/SkDistanceFieldGen \
     UnpackedTarball/skia/src/core/SkDocument \
     UnpackedTarball/skia/src/core/SkDrawable \
     UnpackedTarball/skia/src/core/SkDraw \
+    UnpackedTarball/skia/src/core/SkDrawBase \
     UnpackedTarball/skia/src/core/SkDrawLooper \
     UnpackedTarball/skia/src/core/SkDrawShadowInfo \
     UnpackedTarball/skia/src/core/SkDraw_atlas \
@@ -227,6 +237,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkFont \
     UnpackedTarball/skia/src/core/SkFont_serial \
     UnpackedTarball/skia/src/core/SkFontDescriptor \
+    UnpackedTarball/skia/src/core/SkFontMetricsPriv \
     UnpackedTarball/skia/src/core/SkFontMgr \
     UnpackedTarball/skia/src/core/SkFontStream \
     UnpackedTarball/skia/src/core/SkGaussFilter \
@@ -234,11 +245,8 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkIDChangeListener \
     UnpackedTarball/skia/src/core/SkGlobalInitialization_core \
     UnpackedTarball/skia/src/core/SkGlyph \
-    UnpackedTarball/skia/src/core/SkGlyphBuffer \
     UnpackedTarball/skia/src/core/SkGlyphRunPainter \
     UnpackedTarball/skia/src/core/SkGraphics \
-    UnpackedTarball/skia/src/core/SkHalf \
-    UnpackedTarball/skia/src/core/SkICC \
     UnpackedTarball/skia/src/core/SkImageFilterCache \
     UnpackedTarball/skia/src/core/SkImageFilterTypes \
     UnpackedTarball/skia/src/core/SkImageFilter \
@@ -260,7 +268,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkMesh \
     UnpackedTarball/skia/src/core/SkMipmap \
     UnpackedTarball/skia/src/core/SkMipmapAccessor \
-    UnpackedTarball/skia/src/core/SkModeColorFilter \
+    UnpackedTarball/skia/src/core/SkMipmapBuilder \
     UnpackedTarball/skia/src/core/SkOpts \
     UnpackedTarball/skia/src/core/SkOpts_erms \
     UnpackedTarball/skia/src/core/SkOverdrawCanvas \
@@ -276,15 +284,14 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkPicture \
     UnpackedTarball/skia/src/core/SkPictureData \
     UnpackedTarball/skia/src/core/SkPictureFlat \
-    UnpackedTarball/skia/src/core/SkPictureImageGenerator \
     UnpackedTarball/skia/src/core/SkPicturePlayback \
     UnpackedTarball/skia/src/core/SkPictureRecord \
     UnpackedTarball/skia/src/core/SkPictureRecorder \
     UnpackedTarball/skia/src/core/SkPixelRef \
     UnpackedTarball/skia/src/core/SkPixmap \
+    UnpackedTarball/skia/src/core/SkPixmapDraw \
     UnpackedTarball/skia/src/core/SkPoint \
     UnpackedTarball/skia/src/core/SkPoint3 \
-    UnpackedTarball/skia/src/core/SkPromiseImageTexture \
     UnpackedTarball/skia/src/core/SkPtrRecorder \
     UnpackedTarball/skia/src/core/SkQuadClipper \
     UnpackedTarball/skia/src/core/SkRasterClip \
@@ -292,6 +299,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkRasterPipeline \
     UnpackedTarball/skia/src/core/SkReadBuffer \
     UnpackedTarball/skia/src/core/SkRecord \
+    UnpackedTarball/skia/src/core/SkReadPixelsRec \
     UnpackedTarball/skia/src/core/SkRecordDraw \
     UnpackedTarball/skia/src/core/SkRecordedDrawable \
     UnpackedTarball/skia/src/core/SkRecorder \
@@ -302,7 +310,9 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkRegion_path \
     UnpackedTarball/skia/src/core/SkResourceCache \
     UnpackedTarball/skia/src/core/SkRRect \
+    UnpackedTarball/skia/src/core/SkRSXform \
     UnpackedTarball/skia/src/core/SkRTree \
+    UnpackedTarball/skia/src/core/SkRuntimeBlender \
     UnpackedTarball/skia/src/core/SkRuntimeEffect \
     UnpackedTarball/skia/src/core/SkScalar \
     UnpackedTarball/skia/src/core/SkScalerContext \
@@ -312,11 +322,10 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkScan \
     UnpackedTarball/skia/src/core/SkScan_Hairline \
     UnpackedTarball/skia/src/core/SkScan_Path \
-    UnpackedTarball/skia/src/core/SkSharedMutex \
+    UnpackedTarball/skia/src/core/SkScan_SAAPath \
     UnpackedTarball/skia/src/core/SkSLTypeShared \
     UnpackedTarball/skia/src/core/SkSpecialImage \
     UnpackedTarball/skia/src/core/SkSpecialSurface \
-    UnpackedTarball/skia/src/core/SkSpinlock \
     UnpackedTarball/skia/src/core/SkSpriteBlitter_ARGB32 \
     UnpackedTarball/skia/src/core/SkStream \
     UnpackedTarball/skia/src/core/SkStrike \
@@ -327,7 +336,6 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkStroke \
     UnpackedTarball/skia/src/core/SkStrokeRec \
     UnpackedTarball/skia/src/core/SkStrokerPriv \
-    UnpackedTarball/skia/src/core/SkSurfaceCharacterization \
     UnpackedTarball/skia/src/core/SkSwizzle \
     UnpackedTarball/skia/src/core/SkTaskGroup \
     UnpackedTarball/skia/src/core/SkTextBlob \
@@ -342,15 +350,24 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkVM \
     UnpackedTarball/skia/src/core/SkVMBlitter \
     UnpackedTarball/skia/src/core/SkWriteBuffer \
+    UnpackedTarball/skia/src/core/SkWritePixelsRec \
     UnpackedTarball/skia/src/core/SkWriter32 \
-    UnpackedTarball/skia/src/core/SkXfermode \
-    UnpackedTarball/skia/src/core/SkXfermodeInterpretation \
     UnpackedTarball/skia/src/core/SkYUVAInfo \
     UnpackedTarball/skia/src/core/SkYUVAPixmaps \
     UnpackedTarball/skia/src/core/SkYUVMath \
     UnpackedTarball/skia/src/core/SkYUVPlanesCache \
-    UnpackedTarball/skia/src/effects/imagefilters/SkAlphaThresholdImageFilter \
-    UnpackedTarball/skia/src/effects/imagefilters/SkArithmeticImageFilter \
+    UnpackedTarball/skia/src/encode/SkICC \
+    UnpackedTarball/skia/src/encode/SkPngEncoderImpl \
+    UnpackedTarball/skia/src/encode/SkEncoder \
+    UnpackedTarball/skia/src/effects/colorfilters/SkBlendModeColorFilter \
+    UnpackedTarball/skia/src/effects/colorfilters/SkColorFilterBase \
+    UnpackedTarball/skia/src/effects/colorfilters/SkColorSpaceXformColorFilter 
\
+    UnpackedTarball/skia/src/effects/colorfilters/SkComposeColorFilter \
+    UnpackedTarball/skia/src/effects/colorfilters/SkGaussianColorFilter \
+    UnpackedTarball/skia/src/effects/colorfilters/SkMatrixColorFilter \
+    UnpackedTarball/skia/src/effects/colorfilters/SkRuntimeColorFilter \
+    UnpackedTarball/skia/src/effects/colorfilters/SkTableColorFilter \
+    UnpackedTarball/skia/src/effects/colorfilters/SkWorkingFormatColorFilter \
     UnpackedTarball/skia/src/effects/imagefilters/SkBlendImageFilter \
     UnpackedTarball/skia/src/effects/imagefilters/SkBlurImageFilter \
     UnpackedTarball/skia/src/effects/imagefilters/SkColorFilterImageFilter \
@@ -379,25 +396,27 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/effects/SkEmbossMaskFilter \
     UnpackedTarball/skia/src/effects/SkHighContrastFilter \
     UnpackedTarball/skia/src/effects/SkLayerDrawLooper \
-    UnpackedTarball/skia/src/effects/SkLumaColorFilter \
     UnpackedTarball/skia/src/effects/SkOpPathEffect \
-    UnpackedTarball/skia/src/effects/SkOverdrawColorFilter \
-    UnpackedTarball/skia/src/effects/SkShaderMaskFilter \
-    UnpackedTarball/skia/src/effects/SkTableColorFilter \
+    UnpackedTarball/skia/src/effects/SkShaderMaskFilterImpl \
     UnpackedTarball/skia/src/effects/SkTableMaskFilter \
     UnpackedTarball/skia/src/effects/SkTrimPathEffect \
     UnpackedTarball/skia/src/effects/Sk1DPathEffect \
     UnpackedTarball/skia/src/effects/Sk2DPathEffect \
     UnpackedTarball/skia/src/fonts/SkRemotableFontMgr \
     UnpackedTarball/skia/src/image/SkImage \
+    UnpackedTarball/skia/src/image/SkImage_Base \
     UnpackedTarball/skia/src/image/SkImage_Lazy \
+    UnpackedTarball/skia/src/image/SkImage_LazyFactories \
+    UnpackedTarball/skia/src/image/SkImage_Picture \
     UnpackedTarball/skia/src/image/SkImage_Raster \
+    UnpackedTarball/skia/src/image/SkImage_RasterFactories \
+    UnpackedTarball/skia/src/image/SkPictureImageGenerator \
     UnpackedTarball/skia/src/image/SkRescaleAndReadPixels \
     UnpackedTarball/skia/src/image/SkSurface \
+    UnpackedTarball/skia/src/image/SkSurface_Base\
+    UnpackedTarball/skia/src/image/SkSurface_Null \
     UnpackedTarball/skia/src/image/SkSurface_Raster \
-    UnpackedTarball/skia/src/images/SkImageEncoder \
-    UnpackedTarball/skia/src/images/SkPngEncoder \
-    UnpackedTarball/skia/src/images/SkWebpEncoder \
+    UnpackedTarball/skia/src/image/SkTiledImageUtils \
     UnpackedTarball/skia/src/lazy/SkDiscardableMemoryPool \
     UnpackedTarball/skia/src/pathops/SkAddIntersections \
     UnpackedTarball/skia/src/pathops/SkDConicLineIntersection \
@@ -433,33 +452,29 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/pathops/SkReduceOrder \
     UnpackedTarball/skia/src/sfnt/SkOTTable_name \
     UnpackedTarball/skia/src/sfnt/SkOTUtils \
-    UnpackedTarball/skia/src/shaders/gradients/SkGradientShader \
-    UnpackedTarball/skia/src/shaders/gradients/SkGradientShaderBase \
+    UnpackedTarball/skia/src/shaders/gradients/SkConicalGradient \
+    UnpackedTarball/skia/src/shaders/gradients/SkGradientBaseShader \
     UnpackedTarball/skia/src/shaders/gradients/SkLinearGradient \
     UnpackedTarball/skia/src/shaders/gradients/SkRadialGradient \
     UnpackedTarball/skia/src/shaders/gradients/SkSweepGradient \
-    UnpackedTarball/skia/src/shaders/gradients/SkTwoPointConicalGradient \
+    UnpackedTarball/skia/src/shaders/SkBlendShader \
     UnpackedTarball/skia/src/shaders/SkBitmapProcShader \
     UnpackedTarball/skia/src/shaders/SkColorFilterShader \
     UnpackedTarball/skia/src/shaders/SkColorShader \
-    UnpackedTarball/skia/src/shaders/SkComposeShader \
+    UnpackedTarball/skia/src/shaders/SkCoordClampShader \
     UnpackedTarball/skia/src/shaders/SkEmptyShader \
     UnpackedTarball/skia/src/shaders/SkImageShader \
     UnpackedTarball/skia/src/shaders/SkLocalMatrixShader \
-    UnpackedTarball/skia/src/shaders/SkPerlinNoiseShader \
     UnpackedTarball/skia/src/shaders/SkPictureShader \
+    UnpackedTarball/skia/src/shaders/SkPerlinNoiseShaderImpl \
+    UnpackedTarball/skia/src/shaders/SkRuntimeShader \
     UnpackedTarball/skia/src/shaders/SkShader \
+    UnpackedTarball/skia/src/shaders/SkShaderBase \
     UnpackedTarball/skia/src/shaders/SkTransformShader \
-    UnpackedTarball/skia/src/sksl/dsl/DSLBlock \
-    UnpackedTarball/skia/src/sksl/dsl/DSLCase \
-    UnpackedTarball/skia/src/sksl/dsl/DSLCore \
+    UnpackedTarball/skia/src/shaders/SkTriColorShader \
     UnpackedTarball/skia/src/sksl/dsl/DSLExpression \
-    UnpackedTarball/skia/src/sksl/dsl/DSLFunction \
-    UnpackedTarball/skia/src/sksl/dsl/DSLLayout \
     UnpackedTarball/skia/src/sksl/dsl/DSLStatement \
     UnpackedTarball/skia/src/sksl/dsl/DSLType \
-    UnpackedTarball/skia/src/sksl/dsl/DSLVar \
-    UnpackedTarball/skia/src/sksl/dsl/priv/DSLWriter \
     UnpackedTarball/skia/src/sksl/ir/SkSLBinaryExpression \
     UnpackedTarball/skia/src/sksl/ir/SkSLBlock \
     UnpackedTarball/skia/src/sksl/ir/SkSLChildCall \
@@ -477,6 +492,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/ir/SkSLDoStatement \
     UnpackedTarball/skia/src/sksl/ir/SkSLExpression \
     UnpackedTarball/skia/src/sksl/ir/SkSLExpressionStatement \
+    UnpackedTarball/skia/src/sksl/ir/SkSLExtension \
     UnpackedTarball/skia/src/sksl/ir/SkSLFieldAccess \
     UnpackedTarball/skia/src/sksl/ir/SkSLForStatement \
     UnpackedTarball/skia/src/sksl/ir/SkSLFunctionCall \
@@ -488,10 +504,13 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/ir/SkSLLayout \
     UnpackedTarball/skia/src/sksl/ir/SkSLLiteral \
     UnpackedTarball/skia/src/sksl/ir/SkSLModifiers \
+    UnpackedTarball/skia/src/sksl/ir/SkSLModifiersDeclaration \
     UnpackedTarball/skia/src/sksl/ir/SkSLProgram \
     UnpackedTarball/skia/src/sksl/ir/SkSLPrefixExpression \
     UnpackedTarball/skia/src/sksl/ir/SkSLPostfixExpression \
     UnpackedTarball/skia/src/sksl/ir/SkSLSetting \
+    UnpackedTarball/skia/src/sksl/ir/SkSLStructDefinition \
+    UnpackedTarball/skia/src/sksl/ir/SkSLSwitchCase \
     UnpackedTarball/skia/src/sksl/ir/SkSLSwitchStatement \
     UnpackedTarball/skia/src/sksl/ir/SkSLSwizzle \
     UnpackedTarball/skia/src/sksl/ir/SkSLSymbolTable \
@@ -501,6 +520,9 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/ir/SkSLVarDeclarations \
     UnpackedTarball/skia/src/sksl/ir/SkSLVariable \
     UnpackedTarball/skia/src/sksl/ir/SkSLVariableReference \
+    UnpackedTarball/skia/src/sksl/tracing/SkSLTraceHook \
+    UnpackedTarball/skia/src/sksl/tracing/SkSLDebugTracePriv \
+    UnpackedTarball/skia/src/sksl/tracing/SkSLDebugTracePlayer \
     UnpackedTarball/skia/src/sksl/SkSLAnalysis \
     UnpackedTarball/skia/src/sksl/SkSLBuiltinTypes \
     UnpackedTarball/skia/src/sksl/SkSLCompiler \
@@ -531,6 +553,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/analysis/SkSLIsSameExpressionTree \
     UnpackedTarball/skia/src/sksl/analysis/SkSLIsTrivialExpression \
     UnpackedTarball/skia/src/sksl/analysis/SkSLProgramUsage \
+    UnpackedTarball/skia/src/sksl/analysis/SkSLReturnsInputAlpha \
     UnpackedTarball/skia/src/sksl/analysis/SkSLSymbolTableStackBuilder \
     UnpackedTarball/skia/src/sksl/analysis/SkSLSwitchCaseContainsExit \
     UnpackedTarball/skia/src/sksl/codegen/SkSLGLSLCodeGenerator \
@@ -540,7 +563,6 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/codegen/SkSLSPIRVtoHLSL \
     UnpackedTarball/skia/src/sksl/codegen/SkSLVMCodeGenerator \
     UnpackedTarball/skia/src/sksl/codegen/SkSLWGSLCodeGenerator \
-    UnpackedTarball/skia/src/sksl/tracing/SkVMDebugTrace \
     UnpackedTarball/skia/src/sksl/transform/SkSLAddConstToVarModifiers \
     UnpackedTarball/skia/src/sksl/transform/SkSLEliminateDeadFunctions \
     UnpackedTarball/skia/src/sksl/transform/SkSLEliminateDeadGlobalVariables \
@@ -549,8 +571,10 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/transform/SkSLEliminateUnreachableCode \
     UnpackedTarball/skia/src/sksl/transform/SkSLFindAndDeclareBuiltinFunctions 
\
     UnpackedTarball/skia/src/sksl/transform/SkSLFindAndDeclareBuiltinVariables 
\
+    
UnpackedTarball/skia/src/sksl/transform/SkSLHoistSwitchVarDeclarationsAtTopLevel
 \
     UnpackedTarball/skia/src/sksl/transform/SkSLRenamePrivateSymbols \
     UnpackedTarball/skia/src/sksl/transform/SkSLReplaceConstVarsWithLiterals \
+    UnpackedTarball/skia/src/sksl/transform/SkSLRewriteIndexedSwizzle \
     UnpackedTarball/skia/src/utils/SkBase64 \
     UnpackedTarball/skia/src/utils/SkCamera \
     UnpackedTarball/skia/src/utils/SkCanvasStack \
@@ -561,7 +585,6 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/utils/SkCharToGlyphCache \
     UnpackedTarball/skia/src/utils/SkClipStackUtils \
     UnpackedTarball/skia/src/utils/SkCustomTypeface \
-    UnpackedTarball/skia/src/utils/SkGaussianColorFilter \
     UnpackedTarball/skia/src/utils/SkJSON \
     UnpackedTarball/skia/src/utils/SkJSONWriter \
     UnpackedTarball/skia/src/utils/SkMatrix22 \
@@ -580,7 +603,6 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/utils/SkShadowTessellator \
     UnpackedTarball/skia/src/utils/SkShadowUtils \
     UnpackedTarball/skia/src/utils/SkTextUtils \
-    UnpackedTarball/skia/src/utils/SkVMVisualizer \
     UnpackedTarball/skia/src/xps/SkXPSDevice \
     UnpackedTarball/skia/src/xps/SkXPSDocument \
 ))
@@ -590,16 +612,20 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/core/SkGpuBlurUtils \
     UnpackedTarball/skia/src/gpu/AtlasTypes \
     UnpackedTarball/skia/src/gpu/Blend \
+    UnpackedTarball/skia/src/gpu/BlendFormula \
+    UnpackedTarball/skia/src/gpu/DitherUtils \
     UnpackedTarball/skia/src/gpu/RectanizerPow2 \
     UnpackedTarball/skia/src/gpu/RectanizerSkyline \
     UnpackedTarball/skia/src/gpu/ResourceKey \
     UnpackedTarball/skia/src/gpu/ShaderErrorHandler \
     UnpackedTarball/skia/src/gpu/Swizzle \
+    UnpackedTarball/skia/src/gpu/TiledTextureUtils \
     UnpackedTarball/skia/src/gpu/ganesh/ClipStack \
     UnpackedTarball/skia/src/gpu/ganesh/Device \
     UnpackedTarball/skia/src/gpu/ganesh/Device_drawTexture \
     UnpackedTarball/skia/src/gpu/ganesh/GrBufferTransferRenderTask \
     UnpackedTarball/skia/src/gpu/ganesh/GrBufferUpdateRenderTask \
+    UnpackedTarball/skia/src/gpu/ganesh/GrFragmentProcessors \
     UnpackedTarball/skia/src/gpu/ganesh/GrSurfaceProxyView \
     UnpackedTarball/skia/src/gpu/ganesh/PathRenderer \
     UnpackedTarball/skia/src/gpu/ganesh/PathRendererChain \
@@ -609,6 +635,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrBicubicEffect \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrBitmapTextGeoProc \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrBlendFragmentProcessor \
+    UnpackedTarball/skia/src/gpu/ganesh/effects/GrColorTableEffect \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrConvexPolyEffect \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrCoverageSetOpXP \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrCustomXfermode \
@@ -619,6 +646,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrMatrixEffect \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrModulateAtlasCoverageEffect \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrOvalEffect \
+    UnpackedTarball/skia/src/gpu/ganesh/effects/GrPerlinNoise2Effect \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrPorterDuffXferProcessor \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrRRectEffect \
     UnpackedTarball/skia/src/gpu/ganesh/effects/GrShadowGeoProc \
@@ -640,6 +668,14 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/glsl/GrGLSLVertexGeoBuilder \
     UnpackedTarball/skia/src/gpu/ganesh/gradients/GrGradientBitmapCache \
     UnpackedTarball/skia/src/gpu/ganesh/gradients/GrGradientShader \
+    UnpackedTarball/skia/src/gpu/ganesh/image/GrImageUtils \
+    UnpackedTarball/skia/src/gpu/ganesh/image/GrTextureGenerator \
+    UnpackedTarball/skia/src/gpu/ganesh/image/SkImage_Ganesh \
+    UnpackedTarball/skia/src/gpu/ganesh/image/SkImage_GaneshBase \
+    UnpackedTarball/skia/src/gpu/ganesh/image/SkImage_GaneshFactories \
+    UnpackedTarball/skia/src/gpu/ganesh/image/SkImage_GaneshYUVA \
+    UnpackedTarball/skia/src/gpu/ganesh/image/SkImage_LazyTexture \
+    UnpackedTarball/skia/src/gpu/ganesh/image/SkImage_RasterPinnable \
     UnpackedTarball/skia/src/gpu/ganesh/GrAHardwareBufferImageGenerator \
     UnpackedTarball/skia/src/gpu/ganesh/GrAHardwareBufferUtils \
     UnpackedTarball/skia/src/gpu/ganesh/GrAttachment \
@@ -659,6 +695,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/GrDDLContext \
     UnpackedTarball/skia/src/gpu/ganesh/GrDDLTask \
     UnpackedTarball/skia/src/gpu/ganesh/GrDefaultGeoProcFactory \
+    UnpackedTarball/skia/src/gpu/ganesh/GrDeferredDisplayList \
     UnpackedTarball/skia/src/gpu/ganesh/GrDirectContext \
     UnpackedTarball/skia/src/gpu/ganesh/GrDirectContextPriv \
     UnpackedTarball/skia/src/gpu/ganesh/GrDistanceFieldGenFromVector \
@@ -691,6 +728,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/GrProcessorUnitTest \
     UnpackedTarball/skia/src/gpu/ganesh/GrProgramDesc \
     UnpackedTarball/skia/src/gpu/ganesh/GrProgramInfo \
+    UnpackedTarball/skia/src/gpu/ganesh/GrPromiseImageTexture \
     UnpackedTarball/skia/src/gpu/ganesh/GrProxyProvider \
     UnpackedTarball/skia/src/gpu/ganesh/GrRecordingContext \
     UnpackedTarball/skia/src/gpu/ganesh/GrRecordingContextPriv \
@@ -710,6 +748,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/GrStencilSettings \
     UnpackedTarball/skia/src/gpu/ganesh/GrStyle \
     UnpackedTarball/skia/src/gpu/ganesh/GrSurface \
+    UnpackedTarball/skia/src/gpu/ganesh/GrSurfaceCharacterization \
     UnpackedTarball/skia/src/gpu/ganesh/GrSurfaceInfo \
     UnpackedTarball/skia/src/gpu/ganesh/GrSurfaceProxy \
     UnpackedTarball/skia/src/gpu/ganesh/GrSWMaskHelper \
@@ -735,6 +774,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/mock/GrMockCaps \
     UnpackedTarball/skia/src/gpu/ganesh/mock/GrMockGpu \
     UnpackedTarball/skia/src/gpu/ganesh/mock/GrMockTypes \
+    UnpackedTarball/skia/src/gpu/ganesh/surface/SkSurface_Ganesh \
     UnpackedTarball/skia/src/gpu/ganesh/SkGr \
     UnpackedTarball/skia/src/gpu/ganesh/SurfaceContext \
     UnpackedTarball/skia/src/gpu/ganesh/SurfaceFillContext \
@@ -744,17 +784,15 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/tessellate/PathTessellator \
     UnpackedTarball/skia/src/gpu/ganesh/tessellate/StrokeTessellator \
     UnpackedTarball/skia/src/gpu/ganesh/text/GrAtlasManager \
+    UnpackedTarball/skia/src/gpu/PipelineUtils \
     UnpackedTarball/skia/src/gpu/tessellate/FixedCountBufferUtils \
     UnpackedTarball/skia/src/gpu/tessellate/Tessellation \
-    UnpackedTarball/skia/src/image/SkImage_GpuBase \
-    UnpackedTarball/skia/src/image/SkImage_Gpu \
-    UnpackedTarball/skia/src/image/SkImage_GpuYUVA \
-    UnpackedTarball/skia/src/image/SkSurface_Gpu \
     UnpackedTarball/skia/src/text/GlyphRun \
     UnpackedTarball/skia/src/text/StrikeForGPU \
     UnpackedTarball/skia/src/text/gpu/DistanceFieldAdjustTable \
     UnpackedTarball/skia/src/text/gpu/GlyphVector \
     UnpackedTarball/skia/src/text/gpu/Slug \
+    UnpackedTarball/skia/src/text/gpu/SlugImpl \
     UnpackedTarball/skia/src/text/gpu/StrikeCache \
     UnpackedTarball/skia/src/text/gpu/SubRunContainer \
     UnpackedTarball/skia/src/text/gpu/SubRunAllocator \
@@ -762,6 +800,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/text/gpu/SDFTControl \
     UnpackedTarball/skia/src/text/gpu/TextBlob \
     UnpackedTarball/skia/src/text/gpu/TextBlobRedrawCoordinator \
+    UnpackedTarball/skia/src/text/gpu/VertexFiller \
 ))
 
 $(eval $(call gb_Library_add_generated_exception_objects,skia,\
@@ -877,17 +916,10 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
         $(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2) 
$(LO_CLANG_CXXFLAGS_INTRINSICS_F16C) $(LO_CLANG_CXXFLAGS_INTRINSICS_FMA) \
         $(LO_SKIA_AVOID_INLINE_COPIES) \
 ))
-$(eval $(call gb_Library_add_generated_exception_objects,skia,\
-    UnpackedTarball/skia/src/opts/SkOpts_sse42, $(CXXFLAGS_INTRINSICS_SSE42) 
$(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42) \
-        $(LO_SKIA_AVOID_INLINE_COPIES) \
-))
 $(eval $(call gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/opts/SkOpts_ssse3, $(CXXFLAGS_INTRINSICS_SSSE3) 
$(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3) \
         $(LO_SKIA_AVOID_INLINE_COPIES) \
 ))
-$(eval $(call gb_Library_add_generated_exception_objects,skia,\
-    UnpackedTarball/skia/src/opts/SkOpts_crc32 \
-))
 
 $(eval $(call gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/opts/SkOpts_skx, $(CXXFLAGS_INTRINSICS_AVX512)  
$(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)\
@@ -930,7 +962,6 @@ endif
 else ifeq ($(OS),MACOSX)
 $(eval $(call gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/ports/SkDebug_stdio \
-    UnpackedTarball/skia/src/ports/SkImageEncoder_CG \
     UnpackedTarball/skia/src/ports/SkImageGeneratorCG \
     UnpackedTarball/skia/src/ports/SkFontMgr_mac_ct \
     UnpackedTarball/skia/src/ports/SkFontMgr_mac_ct_factory \
@@ -974,7 +1005,8 @@ $(eval $(call gb_Library_add_generated_objcxxobjects,skia,\
     UnpackedTarball/skia/src/gpu/ganesh/mtl/GrMtlUniformHandler \
     UnpackedTarball/skia/src/gpu/ganesh/mtl/GrMtlUtil \
     UnpackedTarball/skia/src/gpu/ganesh/mtl/GrMtlVaryingHandler \
-    UnpackedTarball/skia/src/image/SkSurface_GpuMtl \
+    UnpackedTarball/skia/src/gpu/ganesh/surface/SkSurface_GaneshMtl \
+    UnpackedTarball/skia/src/gpu/mtl/MtlUtils \
     , -fobjc-arc \
 ))
 endif
diff --git a/external/skia/UnpackedTarball_skia.mk 
b/external/skia/UnpackedTarball_skia.mk
index cafc7a9df3b8..f6e97fb899e2 100644
--- a/external/skia/UnpackedTarball_skia.mk
+++ b/external/skia/UnpackedTarball_skia.mk
@@ -30,15 +30,14 @@ skia_patches := \
     fix-windows-dwrite.patch.1 \
     swap-buffers-rect.patch.1 \
     ubsan.patch.1 \
-    fast-png-write.patch.1 \
     fix-warnings.patch.1 \
     windows-libraries-system32.patch.1 \
     allow-no-es2restrictions.patch.1 \
     vk_mem_alloc.patch.1 \
-    constexpr-template.patch.0 \
     tdf147342.patch.0 \
     redefinition-of-op.patch.0 \
     0001-Added-missing-include-cstdio.patch \
+    fix-SkDebugf-link-error.patch.1 \
 
 $(eval $(call gb_UnpackedTarball_set_patchlevel,skia,1))
 
diff --git a/external/skia/constexpr-template.patch.0 
b/external/skia/constexpr-template.patch.0
deleted file mode 100644
index 2e962660e4f0..000000000000
--- a/external/skia/constexpr-template.patch.0
+++ /dev/null
@@ -1,65 +0,0 @@
---- include/sksl/DSLFunction.h
-+++ include/sksl/DSLFunction.h
-@@ -93,17 +93,20 @@
-     DSLExpression call(ExpressionArray args, Position pos = {});
- 
- private:
-+    static void push_back(ExpressionArray& args, DSLExpression& expr);
-+
-     void collectArgs(ExpressionArray& args) {}
- 
-     template<class... RemainingArgs>
-     void collectArgs(ExpressionArray& args, DSLVar& var, RemainingArgs&&... 
remaining) {
--        args.push_back(DSLExpression(var).release());
-+        DSLExpression expr(var);
-+        push_back(args, expr);
-         collectArgs(args, std::forward<RemainingArgs>(remaining)...);
-     }
- 
-     template<class... RemainingArgs>
-     void collectArgs(ExpressionArray& args, DSLExpression expr, 
RemainingArgs&&... remaining) {
--        args.push_back(expr.release());
-+        push_back(args, expr);
-         collectArgs(args, std::forward<RemainingArgs>(remaining)...);
-     }
- 
---- src/core/SkStrikeCache.h
-+++ src/core/SkStrikeCache.h
-@@ -13,11 +13,10 @@
- #include "include/private/base/SkLoadUserConfig.h" // IWYU pragma: keep
- #include "include/private/base/SkMutex.h"
- #include "src/core/SkDescriptor.h"
-+#include "src/core/SkStrike.h"
- #include "src/core/SkStrikeSpec.h"
- #include "src/text/StrikeForGPU.h"
- 
--class SkStrike;
--class SkStrikePinner;
- class SkTraceMemoryDump;
- 
- //  SK_DEFAULT_FONT_CACHE_COUNT_LIMIT and SK_DEFAULT_FONT_CACHE_LIMIT can be 
set using -D on your
---- src/gpu/ganesh/effects/GrBlendFragmentProcessor.h
-+++ src/gpu/ganesh/effects/GrBlendFragmentProcessor.h
-@@ -10,8 +10,7 @@
- #include "include/core/SkRefCnt.h"
- 
- #include <memory>
--
--class GrFragmentProcessor;
-+#include "src/gpu/ganesh/GrFragmentProcessor.h"
- 
- namespace GrBlendFragmentProcessor {
- 
---- src/sksl/dsl/DSLFunction.cpp
-+++ src/sksl/dsl/DSLFunction.cpp
-@@ -41,6 +41,10 @@
-     return context.fConfig->fIsBuiltinCode && SkSL::FindIntrinsicKind(name) 
!= kNotIntrinsic;
- }
- 
-+void DSLFunction::push_back(ExpressionArray& args, DSLExpression& expr) {
-+    args.push_back(expr.release());
-+}
-+
- void DSLFunction::init(DSLModifiers modifiers, const DSLType& returnType, 
std::string_view name,
-                        SkSpan<DSLParameter*> params, Position pos) {
-     fPosition = pos;
diff --git a/external/skia/fast-png-write.patch.1 
b/external/skia/fast-png-write.patch.1
deleted file mode 100644
index f47a2af70460..000000000000
--- a/external/skia/fast-png-write.patch.1
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/src/images/SkImageEncoder.cpp b/src/images/SkImageEncoder.cpp
-index a96a93e0fc..1c110afa58 100644
---- a/src/images/SkImageEncoder.cpp
-+++ b/src/images/SkImageEncoder.cpp
-@@ -46,6 +46,10 @@ bool SkEncodeImage(SkWStream* dst, const SkPixmap& src,
-             }
-             case SkEncodedImageFormat::kPNG: {
-                 SkPngEncoder::Options opts;
-+                if (quality == 1) {
-+                    opts.fFilterFlags = SkPngEncoder::FilterFlag::kNone;
-+                    opts.fZLibLevel = 1;
-+                }
-                 return SkPngEncoder::Encode(dst, src, opts);
-             }
-             case SkEncodedImageFormat::kWEBP: {
diff --git a/external/skia/fix-SkDebugf-link-error.patch.1 
b/external/skia/fix-SkDebugf-link-error.patch.1
new file mode 100644
index 000000000000..989e8c407815
--- /dev/null
+++ b/external/skia/fix-SkDebugf-link-error.patch.1
@@ -0,0 +1,20 @@
+diff -ur skia.org/src/ports/SkDebug_stdio.cpp skia/src/ports/SkDebug_stdio.cpp
+--- skia.org/src/ports/SkDebug_stdio.cpp       2023-07-09 19:30:53.272682125 
+0200
++++ skia/src/ports/SkDebug_stdio.cpp   2023-07-09 19:34:44.812723870 +0200
+@@ -5,6 +5,7 @@
+  * found in the LICENSE file.
+  */
+ 
++#include "include/private/base/SkAPI.h"
+ #include "include/private/base/SkFeatures.h"
+ #include "include/private/base/SkLoadUserConfig.h"
+ 
+@@ -13,7 +14,7 @@
+ #include <stdarg.h>
+ #include <stdio.h>
+ 
+-void SkDebugf(const char format[], ...) {
++SK_API void SkDebugf(const char format[], ...) {
+     va_list args;
+     va_start(args, format);
+ #pragma GCC diagnostic push
diff --git a/external/skia/fix-alpha-difference-copy.patch.1 
b/external/skia/fix-alpha-difference-copy.patch.1
index 61a61e621fbd..a8db7377b55b 100644
--- a/external/skia/fix-alpha-difference-copy.patch.1
+++ b/external/skia/fix-alpha-difference-copy.patch.1
@@ -3,7 +3,7 @@ index df7d9a7025..7f94c2a660 100644
 --- a/src/core/SkBlitter_Sprite.cpp
 +++ b/src/core/SkBlitter_Sprite.cpp
 @@ -191,7 +191,7 @@ SkBlitter* SkBlitter::ChooseSprite(const SkPixmap& dst, 
const SkPaint& paint,
-     }
+     SkASSERT(alloc != nullptr);
  
      // TODO: in principle SkRasterPipelineSpriteBlitter could be made to 
handle this.
 -    if (source.alphaType() == kUnpremul_SkAlphaType) {
diff --git a/external/skia/fix-pch.patch.1 b/external/skia/fix-pch.patch.1
index f3e70739354e..9adb47903013 100644
--- a/external/skia/fix-pch.patch.1
+++ b/external/skia/fix-pch.patch.1
@@ -45,9 +45,9 @@ index 035f94e1f6..3cf12db902 100644
 +#ifndef SKSL_POISON
 +#define SKSL_POISON
 +
+ #include "src/sksl/SkSLBuiltinTypes.h"
  #include "src/sksl/SkSLCompiler.h"
  #include "src/sksl/SkSLContext.h"
- 
 @@ -38,3 +41,5 @@ private:
  };
  
diff --git a/external/skia/inc/pch/precompiled_skia.hxx 
b/external/skia/inc/pch/precompiled_skia.hxx
index 1234f285c669..a37318ba079d 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 2022-05-20 16:24:18 using:
+ Generated on 2023-07-09 12:12:38 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:
@@ -26,19 +26,24 @@
 #include <array>
 #include <atomic>
 #include <bitset>
+#include <cassert>
 #include <cctype>
+#include <cerrno>
 #include <cfloat>
 #include <chrono>
 #include <cinttypes>
 #include <climits>
 #include <cmath>
+#include <csetjmp>
 #include <cstddef>
 #include <cstdint>
 #include <cstdio>
+#include <cstdlib>
 #include <cstring>
 #include <ctype.h>
 #include <deque>
 #include <errno.h>
+#include <float.h>
 #include <forward_list>
 #include <functional>
 #include <initializer_list>
@@ -47,14 +52,14 @@
 #include <limits.h>
 #include <limits>
 #include <locale>
-#include <map>
-#include <math.h>
 #include <memory>
 #include <new>
 #include <numeric>
 #include <optional>
 #include <png.h>
+#include <pngconf.h>
 #include <queue>
+#include <ratio>
 #include <set>
 #include <sstream>
 #include <stdarg.h>
@@ -68,7 +73,6 @@
 #include <tuple>
 #include <type_traits>
 #include <unordered_map>
-#include <unordered_set>
 #include <utility>
 #include <vector>
 #endif // PCH_LEVEL >= 1
@@ -79,6 +83,11 @@
 #if PCH_LEVEL >= 3
 #include <include/codec/SkAndroidCodec.h>
 #include <include/codec/SkCodec.h>
+#include <include/codec/SkCodecAnimation.h>
+#include <include/codec/SkEncodedImageFormat.h>
+#include <include/codec/SkEncodedOrigin.h>
+#include <include/codec/SkPixmapUtils.h>
+#include <include/codec/SkPngChunkReader.h>
 #include <include/core/SkAlphaType.h>
 #include <include/core/SkAnnotation.h>
 #include <include/core/SkBBHFactory.h>
@@ -87,18 +96,18 @@
 #include <include/core/SkBlender.h>
 #include <include/core/SkBlurTypes.h>
 #include <include/core/SkCanvas.h>
+#include <include/core/SkCapabilities.h>
 #include <include/core/SkClipOp.h>
 #include <include/core/SkColor.h>
 #include <include/core/SkColorFilter.h>
 #include <include/core/SkColorPriv.h>
 #include <include/core/SkColorSpace.h>
+#include <include/core/SkColorTable.h>
 #include <include/core/SkColorType.h>
 #include <include/core/SkContourMeasure.h>
 #include <include/core/SkCubicMap.h>
 #include <include/core/SkData.h>
 #include <include/core/SkDataTable.h>
-#include <include/core/SkDeferredDisplayList.h>
-#include <include/core/SkDeferredDisplayListRecorder.h>
 #include <include/core/SkDocument.h>
 #include <include/core/SkDrawable.h>
 #include <include/core/SkExecutor.h>
@@ -111,16 +120,13 @@
 #include <include/core/SkFontStyle.h>
 #include <include/core/SkFontTypes.h>
 #include <include/core/SkGraphics.h>
-#include <include/core/SkICC.h>
 #include <include/core/SkImage.h>
-#include <include/core/SkImageEncoder.h>
 #include <include/core/SkImageFilter.h>
 #include <include/core/SkImageGenerator.h>
 #include <include/core/SkImageInfo.h>
 #include <include/core/SkM44.h>
 #include <include/core/SkMallocPixelRef.h>
 #include <include/core/SkMaskFilter.h>
-#include <include/private/base/SkMath.h>
 #include <include/core/SkMatrix.h>
 #include <include/core/SkMesh.h>
 #include <include/core/SkOpenTypeSVGDecoder.h>
@@ -131,13 +137,13 @@
 #include <include/core/SkPathEffect.h>
 #include <include/core/SkPathMeasure.h>
 #include <include/core/SkPathTypes.h>
+#include <include/core/SkPathUtils.h>
 #include <include/core/SkPicture.h>
 #include <include/core/SkPictureRecorder.h>
 #include <include/core/SkPixelRef.h>
 #include <include/core/SkPixmap.h>
 #include <include/core/SkPoint.h>
 #include <include/core/SkPoint3.h>
-#include <include/core/SkPromiseImageTexture.h>
 #include <include/core/SkRRect.h>
 #include <include/core/SkRSXform.h>
 #include <include/core/SkRasterHandleAllocator.h>
@@ -154,10 +160,11 @@
 #include <include/core/SkString.h>
 #include <include/core/SkStrokeRec.h>
 #include <include/core/SkSurface.h>
-#include <include/core/SkSurfaceCharacterization.h>
+#include <include/core/SkSurfaceProps.h>
 #include <include/core/SkSwizzle.h>
 #include <include/core/SkTextBlob.h>
 #include <include/core/SkTileMode.h>
+#include <include/core/SkTiledImageUtils.h>
 #include <include/core/SkTime.h>
 #include <include/core/SkTraceMemoryDump.h>
 #include <include/core/SkTypeface.h>
@@ -169,9 +176,7 @@
 #include <include/effects/Sk1DPathEffect.h>
 #include <include/effects/Sk2DPathEffect.h>
 #include <include/effects/SkBlenders.h>
-#include <include/effects/SkBlurMaskFilter.h>
 #include <include/effects/SkColorMatrix.h>
-#include <include/effects/SkColorMatrixFilter.h>
 #include <include/effects/SkCornerPathEffect.h>
 #include <include/effects/SkDashPathEffect.h>
 #include <include/effects/SkDiscretePathEffect.h>
@@ -185,62 +190,55 @@
 #include <include/effects/SkRuntimeEffect.h>
 #include <include/effects/SkShaderMaskFilter.h>
 #include <include/effects/SkStrokeAndFillPathEffect.h>
-#include <include/effects/SkTableColorFilter.h>
 #include <include/effects/SkTableMaskFilter.h>
 #include <include/effects/SkTrimPathEffect.h>
-#include <include/encode/SkJpegEncoder.h>
+#include <include/encode/SkEncoder.h>
+#include <include/encode/SkICC.h>
 #include <include/encode/SkPngEncoder.h>
-#include <include/encode/SkWebpEncoder.h>
-#include <include/gpu/GrBackendSurface.h>
-#include <include/gpu/GrContextOptions.h>
-#include <include/gpu/GrContextThreadSafeProxy.h>
 #include <include/gpu/GrDirectContext.h>
-#include <include/gpu/GrRecordingContext.h>
 #include <include/pathops/SkPathOps.h>
 #include <include/ports/SkRemotableFontMgr.h>
 #include <include/private/SkBitmaskEnum.h>
-#include <include/private/SkChecksum.h>
 #include <include/private/SkColorData.h>
-#include <include/private/base/SkDeque.h>
 #include <include/private/SkEncodedInfo.h>
-#include <include/private/SkFixed.h>
+#include <include/private/SkGainmapInfo.h>
+#include <include/private/SkIDChangeListener.h>
+#include <include/private/SkPathRef.h>
+#include <include/private/SkSLDefines.h>
+#include <include/private/SkSLSampleUsage.h>
+#include <include/private/SkShadowFlags.h>
+#include <include/private/base/SkAlign.h>
+#include <include/private/base/SkAssert.h>
+#include <include/private/base/SkCPUTypes.h>
+#include <include/private/base/SkContainers.h>
+#include <include/private/base/SkDebug.h>
+#include <include/private/base/SkDeque.h>
+#include <include/private/base/SkFeatures.h>
+#include <include/private/base/SkFixed.h>
 #include <include/private/base/SkFloatBits.h>
 #include <include/private/base/SkFloatingPoint.h>
-#include <include/private/SkHalf.h>
-#include <include/private/SkIDChangeListener.h>
 #include <include/private/base/SkMacros.h>
-#include <include/private/SkMalloc.h>
+#include <include/private/base/SkMalloc.h>
+#include <include/private/base/SkMath.h>
 #include <include/private/base/SkMutex.h>
+#include <include/private/base/SkNoncopyable.h>
 #include <include/private/base/SkOnce.h>
-#include <include/private/SkOpts_spi.h>
-#include <include/private/SkPathRef.h>
-#include <include/private/SkSLDefines.h>
-#include <include/private/SkSLLayout.h>
-#include <include/private/SkSLModifiers.h>
-#include <include/private/SkSLProgramElement.h>
-#include <include/private/SkSLProgramKind.h>
-#include <include/private/SkSLSampleUsage.h>
-#include <include/private/SkSLStatement.h>
-#include <include/private/SkSLString.h>
-#include <include/private/SkSLSymbol.h>
+#include <include/private/base/SkPathEnums.h>
+#include <include/private/base/SkPoint_impl.h>
 #include <include/private/base/SkSafe32.h>
 #include <include/private/base/SkSemaphore.h>
-#include <include/private/SkShadowFlags.h>
-#include <include/private/SkSpinlock.h>
+#include <include/private/base/SkSpan_impl.h>
 #include <include/private/base/SkTArray.h>
 #include <include/private/base/SkTDArray.h>
 #include <include/private/base/SkTFitsIn.h>
 #include <include/private/base/SkTPin.h>
-#include <include/private/SkTemplates.h>
+#include <include/private/base/SkTemplates.h>
 #include <include/private/base/SkThreadAnnotations.h>
 #include <include/private/base/SkThreadID.h>
 #include <include/private/base/SkTo.h>
-#include <include/private/base/SkVx.h>
-#include <include/private/chromium/GrSlug.h>
 #include <include/private/chromium/SkChromeRemoteGlyphCache.h>
-#include <include/private/gpu/ganesh/GrImageContext.h>
-#include <include/private/gpu/ganesh/GrTypesPriv.h>
-#include <modules/skcms/skcms.h>
+#include <include/private/chromium/SkDiscardableMemory.h>
+#include <include/private/chromium/Slug.h>
 #include <include/utils/SkBase64.h>
 #include <include/utils/SkCamera.h>
 #include <include/utils/SkCanvasStateUtils.h>
@@ -253,9 +251,39 @@
 #include <include/utils/SkPaintFilterCanvas.h>
 #include <include/utils/SkParse.h>
 #include <include/utils/SkParsePath.h>
-#include <include/utils/SkRandom.h>
 #include <include/utils/SkShadowUtils.h>
 #include <include/utils/SkTextUtils.h>
+#include <include/utils/SkTraceEventPhase.h>
+#include <modules/skcms/skcms.h>
+#include <src/base/SkArenaAlloc.h>
+#include <src/base/SkAutoMalloc.h>
+#include <src/base/SkBezierCurves.h>
+#include <src/base/SkBlockAllocator.h>
+#include <src/base/SkBuffer.h>
+#include <src/base/SkCubics.h>
+#include <src/base/SkEndian.h>
+#include <src/base/SkHalf.h>
+#include <src/base/SkLeanWindows.h>
+#include <src/base/SkMSAN.h>
+#include <src/base/SkMathPriv.h>
+#include <src/base/SkNoDestructor.h>
+#include <src/base/SkQuads.h>
+#include <src/base/SkRandom.h>
+#include <src/base/SkRectMemcpy.h>
+#include <src/base/SkSafeMath.h>
+#include <src/base/SkScopeExit.h>
+#include <src/base/SkSharedMutex.h>
+#include <src/base/SkSpinlock.h>
+#include <src/base/SkStringView.h>
+#include <src/base/SkTDPQueue.h>
+#include <src/base/SkTInternalLList.h>
+#include <src/base/SkTLazy.h>
+#include <src/base/SkTSearch.h>
+#include <src/base/SkTSort.h>
+#include <src/base/SkUTF.h>
+#include <src/base/SkUtils.h>
+#include <src/base/SkVx.h>
+#include <src/base/SkZip.h>
 #include <src/codec/SkAndroidCodecAdapter.h>
 #include <src/codec/SkBmpBaseCodec.h>
 #include <src/codec/SkBmpCodec.h>
@@ -264,11 +292,12 @@
 #include <src/codec/SkBmpStandardCodec.h>
 #include <src/codec/SkCodecImageGenerator.h>
 #include <src/codec/SkCodecPriv.h>
-#include <src/codec/SkColorTable.h>
+#include <src/codec/SkColorPalette.h>
 #include <src/codec/SkFrameHolder.h>
 #include <src/codec/SkIcoCodec.h>
 #include <src/codec/SkMaskSwizzler.h>
 #include <src/codec/SkMasks.h>
+#include <src/codec/SkPixmapUtilsPriv.h>
 #include <src/codec/SkPngCodec.h>
 #include <src/codec/SkPngPriv.h>
 #include <src/codec/SkSampledCodec.h>
@@ -278,12 +307,10 @@
 #include <src/core/SkAAClip.h>
 #include <src/core/SkATrace.h>
 #include <src/core/SkAdvancedTypefaceMetrics.h>
+#include <src/core/SkAlphaRuns.h>
 #include <src/core/SkAnalyticEdge.h>
 #include <src/core/SkAnnotationKeys.h>
-#include <src/core/SkAntiRun.h>
-#include <src/base/SkArenaAlloc.h>
 #include <src/core/SkAutoBlitterChoose.h>
-#include <src/base/SkAutoMalloc.h>
 #include <src/core/SkAutoPixmapStorage.h>
 #include <src/core/SkBigPicture.h>
 #include <src/core/SkBitmapCache.h>
@@ -294,14 +321,14 @@
 #include <src/core/SkBlenderBase.h>
 #include <src/core/SkBlitRow.h>
 #include <src/core/SkBlitter.h>
-#include <src/base/SkBlockAllocator.h>
+#include <src/core/SkBlitter_A8.h>
 #include <src/core/SkBlurMask.h>
-#include <src/base/SkBuffer.h>
+#include <src/core/SkBlurMaskFilterImpl.h>
 #include <src/core/SkCachedData.h>
 #include <src/core/SkCanvasPriv.h>
+#include <src/core/SkChecksum.h>
 #include <src/core/SkClipStack.h>
 #include <src/core/SkClipStackDevice.h>
-#include <src/core/SkColorFilterBase.h>
 #include <src/core/SkColorFilterPriv.h>
 #include <src/core/SkColorSpacePriv.h>
 #include <src/core/SkColorSpaceXformSteps.h>
@@ -310,54 +337,48 @@
 #include <src/core/SkCoreBlitters.h>
 #include <src/core/SkCpu.h>
 #include <src/core/SkCubicClipper.h>
-#include <src/core/SkDebugUtils.h>
 #include <src/core/SkDescriptor.h>
 #include <src/core/SkDevice.h>
-#include <include/private/chromium/SkDiscardableMemory.h>
 #include <src/core/SkDistanceFieldGen.h>
 #include <src/core/SkDraw.h>
+#include <src/core/SkDrawBase.h>
 #include <src/core/SkDrawProcs.h>
 #include <src/core/SkDrawShadowInfo.h>
 #include <src/core/SkEdge.h>
 #include <src/core/SkEdgeBuilder.h>
 #include <src/core/SkEdgeClipper.h>
 #include <src/core/SkEffectPriv.h>
-#include <src/core/SkEndian.h>
 #include <src/core/SkEnumerate.h>
 #include <src/core/SkFDot6.h>
+#include <src/core/SkFilterColorProgram.h>
 #include <src/core/SkFontDescriptor.h>
+#include <src/core/SkFontMetricsPriv.h>
 #include <src/core/SkFontPriv.h>
 #include <src/core/SkFontStream.h>
 #include <src/core/SkFuzzLogging.h>
 #include <src/core/SkGaussFilter.h>
 #include <src/core/SkGeometry.h>
 #include <src/core/SkGlyph.h>
-#include <src/core/SkGlyphBuffer.h>
 #include <src/core/SkGlyphRunPainter.h>
-#include <src/core/SkGpuBlurUtils.h>
-#include <src/core/SkICCPriv.h>
 #include <src/core/SkImageFilterCache.h>
 #include <src/core/SkImageFilterTypes.h>
 #include <src/core/SkImageFilter_Base.h>
+#include <src/core/SkImageInfoPriv.h>
 #include <src/core/SkImagePriv.h>
 #include <src/core/SkLRUCache.h>
 #include <src/core/SkLatticeIter.h>
-#include <src/base/SkLeanWindows.h>
 #include <src/core/SkLineClipper.h>
 #include <src/core/SkLocalMatrixImageFilter.h>
 #include <src/core/SkMD5.h>
-#include <src/core/SkMSAN.h>
 #include <src/core/SkMask.h>
 #include <src/core/SkMaskBlurFilter.h>
 #include <src/core/SkMaskCache.h>
 #include <src/core/SkMaskFilterBase.h>
 #include <src/core/SkMaskGamma.h>
-#include <src/base/SkMathPriv.h>
 #include <src/core/SkMatrixInvert.h>
 #include <src/core/SkMatrixPriv.h>
 #include <src/core/SkMatrixProvider.h>
 #include <src/core/SkMatrixUtils.h>
-#include <src/core/SkMeshPriv.h>
 #include <src/core/SkMessageBus.h>
 #include <src/core/SkMipmap.h>
 #include <src/core/SkMipmapAccessor.h>
@@ -377,7 +398,6 @@
 #include <src/core/SkPicturePriv.h>
 #include <src/core/SkPictureRecord.h>
 #include <src/core/SkPixelRefPriv.h>
-#include <src/core/SkPixmapPriv.h>
 #include <src/core/SkPointPriv.h>
 #include <src/core/SkPtrRecorder.h>
 #include <src/core/SkQuadClipper.h>
@@ -385,7 +405,10 @@
 #include <src/core/SkRTree.h>
 #include <src/core/SkRasterClip.h>
 #include <src/core/SkRasterPipeline.h>
+#include <src/core/SkRasterPipelineOpContexts.h>
+#include <src/core/SkRasterPipelineOpList.h>
 #include <src/core/SkReadBuffer.h>
+#include <src/core/SkReadPixelsRec.h>
 #include <src/core/SkRecord.h>
 #include <src/core/SkRecordDraw.h>
 #include <src/core/SkRecordOpts.h>
@@ -396,42 +419,36 @@
 #include <src/core/SkRectPriv.h>
 #include <src/core/SkRegionPriv.h>
 #include <src/core/SkResourceCache.h>
+#include <src/core/SkRuntimeBlender.h>
 #include <src/core/SkRuntimeEffectPriv.h>
 #include <src/core/SkSLTypeShared.h>
-#include <src/base/SkSafeMath.h>
 #include <src/core/SkSafeRange.h>
 #include <src/core/SkSamplingPriv.h>
 #include <src/core/SkScaleToSides.h>
 #include <src/core/SkScalerContext.h>
 #include <src/core/SkScan.h>
 #include <src/core/SkScanPriv.h>
-#include <src/base/SkScopeExit.h>
-#include <src/core/SkSharedMutex.h>
 #include <src/core/SkSpecialImage.h>
 #include <src/core/SkSpecialSurface.h>
 #include <src/core/SkSpriteBlitter.h>
 #include <src/core/SkStreamPriv.h>
+#include <src/core/SkStrike.h>
 #include <src/core/SkStrikeCache.h>
 #include <src/core/SkStrikeSpec.h>
 #include <src/core/SkStringUtils.h>
 #include <src/core/SkStroke.h>
 #include <src/core/SkStrokerPriv.h>
 #include <src/core/SkSurfacePriv.h>
-#include <src/base/SkTDPQueue.h>
+#include <src/core/SkSwizzlePriv.h>
 #include <src/core/SkTDynamicHash.h>
-#include <src/base/SkTInternalLList.h>
-#include <src/base/SkTLazy.h>
-#include <src/core/SkTSearch.h>
-#include <src/base/SkTSort.h>
+#include <src/core/SkTHash.h>
 #include <src/core/SkTaskGroup.h>
 #include <src/core/SkTextBlobPriv.h>
 #include <src/core/SkTextBlobTrace.h>
 #include <src/core/SkTextFormatParams.h>
 #include <src/core/SkTraceEvent.h>
-#include <src/core/SkTraceEventCommon.h>
 #include <src/core/SkTypefaceCache.h>
 #include <src/core/SkTypeface_remote.h>
-#include <src/base/SkUtils.h>
 #include <src/core/SkVM.h>
 #include <src/core/SkVMBlitter.h>
 #include <src/core/SkValidationUtils.h>
@@ -440,8 +457,6 @@
 #include <src/core/SkWriteBuffer.h>
 #include <src/core/SkWritePixelsRec.h>
 #include <src/core/SkWriter32.h>
-#include <src/core/SkXfermodeInterpretation.h>
-#include <src/core/SkXfermodePriv.h>
 #include <src/core/SkYUVAInfoLocation.h>
 #include <src/core/SkYUVMath.h>
 #include <src/core/SkYUVPlanesCache.h>
@@ -449,61 +464,31 @@
 #include <src/effects/SkEmbossMask.h>
 #include <src/effects/SkEmbossMaskFilter.h>
 #include <src/effects/SkOpPE.h>
+#include <src/effects/SkShaderMaskFilterImpl.h>
 #include <src/effects/SkTrimPE.h>
+#include <src/effects/colorfilters/SkBlendModeColorFilter.h>
+#include <src/effects/colorfilters/SkColorFilterBase.h>
+#include <src/effects/colorfilters/SkColorSpaceXformColorFilter.h>
+#include <src/effects/colorfilters/SkComposeColorFilter.h>
+#include <src/effects/colorfilters/SkGaussianColorFilter.h>
+#include <src/effects/colorfilters/SkMatrixColorFilter.h>
+#include <src/effects/colorfilters/SkRuntimeColorFilter.h>
+#include <src/effects/colorfilters/SkTableColorFilter.h>
+#include <src/effects/colorfilters/SkWorkingFormatColorFilter.h>
 #include <src/effects/imagefilters/SkCropImageFilter.h>
-#include <src/effects/imagefilters/SkRuntimeImageFilter.h>
-#include <src/gpu/Blend.h>
-#include <src/gpu/KeyBuilder.h>
-#include <src/gpu/ResourceKey.h>
-#include <src/gpu/ganesh/GrCaps.h>
-#include <src/gpu/ganesh/GrColorInfo.h>
-#include <src/gpu/ganesh/GrColorSpaceXform.h>
-#include <src/gpu/ganesh/GrContextThreadSafeProxyPriv.h>
-#include <src/gpu/ganesh/GrDirectContextPriv.h>
-#include <src/gpu/ganesh/GrDrawOpAtlas.h>
-#include <src/gpu/ganesh/GrFPArgs.h>
-#include <src/gpu/ganesh/GrFragmentProcessor.h>
-#include <src/gpu/ganesh/GrGpuResourcePriv.h>
-#include <src/gpu/ganesh/GrImageContextPriv.h>
-#include <src/gpu/ganesh/GrImageInfo.h>
-#include <src/gpu/ganesh/GrMemoryPool.h>
-#include <src/gpu/ganesh/GrPaint.h>
-#include <src/gpu/ganesh/GrProxyProvider.h>
-#include <src/gpu/ganesh/GrRecordingContextPriv.h>
-#include <src/gpu/ganesh/GrRenderTask.h>
-#include <src/gpu/ganesh/GrResourceProvider.h>
-#include <src/gpu/ganesh/GrSamplerState.h>
-#include <src/gpu/ganesh/GrShaderCaps.h>
-#include <src/gpu/ganesh/GrStyle.h>
-#include <src/gpu/ganesh/GrSurfaceProxyView.h>
-#include <src/gpu/ganesh/GrTexture.h>
-#include <src/gpu/ganesh/GrTextureProxy.h>
-#include <src/gpu/ganesh/GrThreadSafeCache.h>
-#include <src/gpu/ganesh/GrYUVATextureProxies.h>
-#include <src/gpu/ganesh/SkGr.h>
-#include <src/gpu/ganesh/SurfaceFillContext.h>
-#include <src/gpu/ganesh/effects/GrBicubicEffect.h>
-#include <src/gpu/ganesh/effects/GrBlendFragmentProcessor.h>
-#include <src/gpu/ganesh/effects/GrCustomXfermode.h>
-#include <src/gpu/ganesh/effects/GrMatrixConvolutionEffect.h>
-#include <src/gpu/ganesh/effects/GrMatrixEffect.h>
-#include <src/gpu/ganesh/effects/GrPorterDuffXferProcessor.h>
-#include <src/gpu/ganesh/effects/GrSkSLFP.h>
-#include <src/gpu/ganesh/effects/GrTextureEffect.h>
-#include <src/gpu/ganesh/effects/GrYUVtoRGBEffect.h>
-#include <src/gpu/ganesh/geometry/GrPathUtils.h>
-#include <src/gpu/ganesh/geometry/GrStyledShape.h>
-#include <src/gpu/ganesh/glsl/GrGLSLFragmentShaderBuilder.h>
-#include <src/gpu/ganesh/glsl/GrGLSLProgramDataManager.h>
-#include <src/gpu/ganesh/glsl/GrGLSLUniformHandler.h>
-#include <src/gpu/ganesh/gradients/GrGradientShader.h>
+#include <src/encode/SkICCPriv.h>
+#include <src/encode/SkImageEncoderFns.h>
+#include <src/encode/SkImageEncoderPriv.h>
+#include <src/encode/SkPngEncoderImpl.h>
+#include <src/image/SkImageGeneratorPriv.h>
 #include <src/image/SkImage_Base.h>
-#include <src/image/SkImage_Gpu.h>
 #include <src/image/SkImage_Lazy.h>
-#include <src/image/SkReadPixelsRec.h>
+#include <src/image/SkImage_Picture.h>
+#include <src/image/SkImage_Raster.h>
+#include <src/image/SkPictureImageGenerator.h>
 #include <src/image/SkRescaleAndReadPixels.h>
 #include <src/image/SkSurface_Base.h>
-#include <src/images/SkImageEncoderPriv.h>
+#include <src/image/SkSurface_Raster.h>
 #include <src/lazy/SkDiscardableMemoryPool.h>
 #include <src/pathops/SkAddIntersections.h>
 #include <src/pathops/SkIntersectionHelper.h>
@@ -525,6 +510,7 @@
 #include <src/pathops/SkPathOpsPoint.h>
 #include <src/pathops/SkPathOpsQuad.h>
 #include <src/pathops/SkPathOpsRect.h>
+#include <src/pathops/SkPathOpsTCurve.h>
 #include <src/pathops/SkPathOpsTSect.h>
 #include <src/pathops/SkPathOpsTypes.h>
 #include <src/pathops/SkPathWriter.h>
@@ -535,15 +521,27 @@
 #include <src/sfnt/SkOTTable_name.h>
 #include <src/sfnt/SkOTUtils.h>
 #include <src/shaders/SkBitmapProcShader.h>
+#include <src/shaders/SkBlendShader.h>
 #include <src/shaders/SkColorFilterShader.h>
+#include <src/shaders/SkColorShader.h>
+#include <src/shaders/SkCoordClampShader.h>
+#include <src/shaders/SkEmptyShader.h>
 #include <src/shaders/SkImageShader.h>
 #include <src/shaders/SkLocalMatrixShader.h>
+#include <src/shaders/SkPerlinNoiseShaderImpl.h>
 #include <src/shaders/SkPictureShader.h>
+#include <src/shaders/SkRuntimeShader.h>
 #include <src/shaders/SkShaderBase.h>
 #include <src/shaders/SkTransformShader.h>
+#include <src/shaders/SkTriColorShader.h>
+#include <src/shaders/gradients/SkConicalGradient.h>
+#include <src/shaders/gradients/SkGradientBaseShader.h>
 #include <src/shaders/gradients/SkLinearGradient.h>
-#include <src/text/gpu/StrikeCache.h>
-#include <src/utils/SkBlitterTrace.h>
+#include <src/shaders/gradients/SkRadialGradient.h>
+#include <src/shaders/gradients/SkSweepGradient.h>
+#include <src/text/GlyphRun.h>
+#include <src/text/StrikeForGPU.h>
+#include <src/utils/SkBitSet.h>
 #include <src/utils/SkCanvasStack.h>
 #include <src/utils/SkCharToGlyphCache.h>
 #include <src/utils/SkClipStackUtils.h>
@@ -559,9 +557,6 @@
 #include <src/utils/SkPolyUtils.h>
 #include <src/utils/SkShaderUtils.h>
 #include <src/utils/SkShadowTessellator.h>
-#include <src/utils/SkTestCanvas.h>
-#include <src/base/SkUTF.h>
-#include <src/utils/SkVMVisualizer.h>
 #include <tools/sk_app/WindowContext.h>
 #endif // PCH_LEVEL >= 3
 #if PCH_LEVEL >= 4
diff --git a/external/skia/make-api-visible.patch.1 
b/external/skia/make-api-visible.patch.1
index 30eefa1860bf..4248fb526ef2 100644
--- a/external/skia/make-api-visible.patch.1
+++ b/external/skia/make-api-visible.patch.1
@@ -21,7 +21,7 @@ index 3e136a8f57..affb89e43e 100644
  #ifdef SK_METAL
 -std::unique_ptr<WindowContext> MakeMetalForMac(const MacWindowInfo&, const 
DisplayParams&);
 +SK_API std::unique_ptr<WindowContext> MakeMetalForMac(const MacWindowInfo&, 
const DisplayParams&);
- #ifdef SK_GRAPHITE_ENABLED
+ #if defined(SK_GRAPHITE)
  std::unique_ptr<WindowContext> MakeGraphiteMetalForMac(const MacWindowInfo&, 
const DisplayParams&);
  #endif
 diff --git a/tools/sk_app/unix/WindowContextFactory_unix.h 
b/tools/sk_app/unix/WindowContextFactory_unix.h
@@ -43,7 +43,7 @@ index 11bd2d2ac2..09c92dc417 100644
 +SK_API std::unique_ptr<WindowContext> MakeDawnVulkanForXlib(const 
XlibWindowInfo&, const DisplayParams&);
  #endif
  
- #if defined(SK_DAWN) && defined(SK_GRAPHITE_ENABLED)
+ #if defined(SK_DAWN) && defined(SK_GRAPHITE)
  std::unique_ptr<WindowContext> MakeGraphiteDawnVulkanForXlib(const 
XlibWindowInfo&,
                                                               const 
DisplayParams&);
  #endif
@@ -87,7 +87,7 @@ index c05a4f0acf..fc27cd2afb 100644
  #ifdef SK_DAWN
 -std::unique_ptr<WindowContext> MakeDawnD3D12ForWin(HWND, const 
DisplayParams&);
 +SK_API std::unique_ptr<WindowContext> MakeDawnD3D12ForWin(HWND, const 
DisplayParams&);
- #ifdef SK_GRAPHITE_ENABLED
+ #if defined(SK_GRAPHITE)
  std::unique_ptr<WindowContext> MakeGraphiteDawnD3D12ForWin(HWND, const 
DisplayParams&);
  #endif
  #endif
diff --git a/external/skia/share-grcontext.patch.1 
b/external/skia/share-grcontext.patch.1
index c2f132047971..9d491868bf44 100644
--- a/external/skia/share-grcontext.patch.1
+++ b/external/skia/share-grcontext.patch.1
@@ -21,12 +21,14 @@ index 106d366415..08dc19b5c8 100644
      sk_sp<SkSurface> getBackbufferSurface() override;
  
      bool isValid() override { return fValid; }
-@@ -46,16 +51,34 @@ protected:
+@@ -44,18 +49,36 @@
      void destroyContext();
      virtual void onDestroyContext() = 0;
  
 +    static void checkDestroyShared();
 +
+     void onSwapBuffers() override;
+ 
      bool                        fValid;
 +
 +    // We need to use just one GrDirectContext, so share all the relevant 
data.
@@ -36,7 +38,7 @@ index 106d366415..08dc19b5c8 100644
      sk_cfp<id<MTLCommandQueue>> fQueue;
 -    CAMetalLayer*               fMetalLayer;
 -    GrMTLHandle                 fDrawableHandle;
- #if GR_METAL_SDK_VERSION >= 230
+ #if SKGPU_GRAPHITE_METAL_SDK_VERSION >= 230
      // wrapping this in sk_cfp throws up an availability warning, so we'll 
track lifetime manually
      id<MTLBinaryArchive>        fPipelineArchive 
SK_API_AVAILABLE(macos(11.0), ios(14.0));
  #endif
@@ -62,7 +64,7 @@ diff --git a/tools/sk_app/MetalWindowContext.mm 
b/tools/sk_app/MetalWindowContex
 index d972e321a6..9f576944b7 100644
 --- a/tools/sk_app/MetalWindowContext.mm
 +++ b/tools/sk_app/MetalWindowContext.mm
-@@ -37,24 +37,30 @@ NSURL* MetalWindowContext::CacheURL() {
+@@ -40,24 +40,30 @@ NSURL* MetalWindowContext::CacheURL() {
  }
  
  void MetalWindowContext::initializeContext() {
@@ -98,7 +100,7 @@ index d972e321a6..9f576944b7 100644
 -
 -    fValid = this->onInitializeContext();
  
- #if GR_METAL_SDK_VERSION >= 230
+ #if SKGPU_GRAPHITE_METAL_SDK_VERSION >= 230
      if (fDisplayParams.fEnableBinaryArchive) {
 @@ -62,11 +68,11 @@ void MetalWindowContext::initializeContext() {
              sk_cfp<MTLBinaryArchiveDescriptor*> 
desc([MTLBinaryArchiveDescriptor new]);
@@ -116,7 +118,7 @@ index d972e321a6..9f576944b7 100644
                      SkDebugf("Error creating MTLBinaryArchive:\n%s\n",
                               error.debugDescription.UTF8String);
                  }
-@@ -74,46 +80,75 @@ void MetalWindowContext::initializeContext() {
+@@ -77,46 +83,75 @@ void MetalWindowContext::initializeContext() {
          }
      } else {
          if (@available(macOS 11.0, iOS 14.0, *)) {
@@ -131,7 +133,7 @@ index d972e321a6..9f576944b7 100644
 -    backendContext.fQueue.retain((GrMTLHandle)fQueue.get());
 +    backendContext.fDevice.retain((GrMTLHandle)d->fDevice.get());
 +    backendContext.fQueue.retain((GrMTLHandle)d->fQueue.get());
- #if GR_METAL_SDK_VERSION >= 230
+ #if SKGPU_GRAPHITE_METAL_SDK_VERSION >= 230
      if (@available(macOS 11.0, iOS 14.0, *)) {
 -        backendContext.fBinaryArchive.retain((__bridge 
GrMTLHandle)fPipelineArchive);
 +        backendContext.fBinaryArchive.retain((__bridge 
GrMTLHandle)d->fPipelineArchive);
@@ -192,7 +194,7 @@ index d972e321a6..9f576944b7 100644
 +        fGlobalShared->fContext.reset();
 +    }
 +
- #if GR_METAL_SDK_VERSION >= 230
+ #if SKGPU_GRAPHITE_METAL_SDK_VERSION >= 230
      if (@available(macOS 11.0, iOS 14.0, *)) {
 -        [fPipelineArchive release];
 +        [fGlobalShared->fPipelineArchive release];
@@ -207,8 +209,8 @@ index d972e321a6..9f576944b7 100644
  }
  
  sk_sp<SkSurface> MetalWindowContext::getBackbufferSurface() {
-@@ -154,7 +189,7 @@ sk_sp<SkSurface> 
MetalWindowContext::getBackbufferSurface() {
- void MetalWindowContext::swapBuffers() {
+@@ -159,7 +194,7 @@ sk_sp<SkSurface> 
MetalWindowContext::getBackbufferSurface() {
+ void MetalWindowContext::onSwapBuffers() {
      id<CAMetalDrawable> currentDrawable = 
(id<CAMetalDrawable>)fDrawableHandle;
  
 -    id<MTLCommandBuffer> commandBuffer([*fQueue commandBuffer]);
@@ -216,9 +218,9 @@ index d972e321a6..9f576944b7 100644
      commandBuffer.label = @"Present";
  
      [commandBuffer presentDrawable:currentDrawable];
-@@ -175,9 +210,9 @@ void MetalWindowContext::activate(bool isActive) {
+@@ -180,9 +215,9 @@ void MetalWindowContext::activate(bool isActive) {
      if (!isActive) {
- #if GR_METAL_SDK_VERSION >= 230
+ #if SKGPU_GRAPHITE_METAL_SDK_VERSION >= 230
          if (@available(macOS 11.0, iOS 14.0, *)) {
 -            if (fPipelineArchive) {
 +            if (fShared->fPipelineArchive) {
@@ -646,15 +648,15 @@ index c9db528ca4..634034da5a 100644
              return nullptr;
          }
      }
-@@ -542,7 +577,7 @@ void VulkanWindowContext::swapBuffers() {
+@@ -547,7 +582,7 @@ void VulkanWindowContext::swapBuffers() {
      GrFlushInfo info;
      info.fNumSemaphores = 1;
      info.fSignalSemaphores = &beSemaphore;
 -    skgpu::MutableTextureState presentState(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 
fPresentQueueIndex);
 +    skgpu::MutableTextureState presentState(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 
fShared->fPresentQueueIndex);
-     surface->flush(info, &presentState);
-     surface->recordingContext()->asDirectContext()->submit();
- 
+     auto dContext = surface->recordingContext()->asDirectContext();
+     dContext->flush(surface, info, &presentState);
+     dContext->submit();
 @@ -562,4 +597,6 @@ void VulkanWindowContext::swapBuffers() {
      fQueuePresentKHR(fPresentQueue, &presentInfo);
  }
@@ -666,7 +668,7 @@ diff --git a/tools/sk_app/VulkanWindowContext.h 
b/tools/sk_app/VulkanWindowConte
 index 7e1fdd9af5..946bca7522 100644
 --- a/tools/sk_app/VulkanWindowContext.h
 +++ b/tools/sk_app/VulkanWindowContext.h
-@@ -19,20 +19,24 @@
+@@ -16,19 +16,23 @@
  #include "tools/gpu/vk/VkTestUtils.h"
  #include "tools/sk_app/WindowContext.h"
  
@@ -686,7 +688,6 @@ index 7e1fdd9af5..946bca7522 100644
 +    static GrDirectContext* getSharedGrDirectContext() { return fGlobalShared 
? fGlobalShared->fContext.get() : nullptr; }
 +
      sk_sp<SkSurface> getBackbufferSurface() override;
-     void swapBuffers() override;
  
 -    bool isValid() override { return fDevice != VK_NULL_HANDLE; }
 +    bool isValid() override { return fSurface != VK_NULL_HANDLE; }
@@ -710,8 +711,8 @@ index 7e1fdd9af5..946bca7522 100644
      struct BackbufferInfo {
          uint32_t        fImageIndex;          // image this is associated with
 @@ -64,11 +74,6 @@ private:
-     bool createBuffers(VkFormat format, VkImageUsageFlags, SkColorType 
colorType, VkSharingMode);
      void destroyBuffers();
+     void onSwapBuffers() override;
  
 -    VkInstance fInstance = VK_NULL_HANDLE;
 -    VkPhysicalDevice fPhysicalDevice = VK_NULL_HANDLE;
@@ -786,7 +787,7 @@ index 65ab8b9aa4..2d222385a3 100644
  
 -class GrDirectContext;
  class SkSurface;
- #ifdef SK_GRAPHITE_ENABLED
+ #if defined(SK_GRAPHITE)
  namespace skgpu::graphite {
 diff --git a/tools/sk_app/mac/MetalWindowContext_mac.mm 
b/tools/sk_app/mac/MetalWindowContext_mac.mm
 index 5bea8578fa..f7df061af0 100644
diff --git a/external/skia/source/SkMemory_malloc.cxx 
b/external/skia/source/SkMemory_malloc.cxx
index 9e2da3c20023..d1f0cd3f6b98 100644
--- a/external/skia/source/SkMemory_malloc.cxx
+++ b/external/skia/source/SkMemory_malloc.cxx
@@ -4,7 +4,7 @@
  */
 
 #include "include/core/SkTypes.h"
-#include "include/private/SkMalloc.h"
+#include "include/private/base/SkMalloc.h"
 
 #include <sal/log.hxx>
 #include <rtl/alloc.h>
diff --git a/external/skia/swap-buffers-rect.patch.1 
b/external/skia/swap-buffers-rect.patch.1
index 628a7e26cd80..7ccfaca3d042 100644
--- a/external/skia/swap-buffers-rect.patch.1
+++ b/external/skia/swap-buffers-rect.patch.1
@@ -1,112 +1,49 @@
-diff --git a/tools/sk_app/GLWindowContext.h b/tools/sk_app/GLWindowContext.h
-index c519903006..5dc5bcd180 100644
---- a/tools/sk_app/GLWindowContext.h
-+++ b/tools/sk_app/GLWindowContext.h
-@@ -25,7 +25,7 @@ public:
-     bool isValid() override { return SkToBool(fBackendContext.get()); }
+diff -ur skia.org/tools/sk_app/MetalWindowContext.h 
skia/tools/sk_app/MetalWindowContext.h
+--- skia.org/tools/sk_app/MetalWindowContext.h 2023-07-08 21:49:27.179700423 
+0200
++++ skia/tools/sk_app/MetalWindowContext.h     2023-07-08 21:51:53.416328675 
+0200
+@@ -51,7 +51,7 @@
  
-     void resize(int w, int h) override;
--    void swapBuffers() override;
-+    void swapBuffers(const SkIRect* rect = nullptr) override;
+     static void checkDestroyShared();
  
-     void setDisplayParams(const DisplayParams& params) override;
- 
-diff --git a/tools/sk_app/MetalWindowContext.h 
b/tools/sk_app/MetalWindowContext.h
-index fbf35c3c2b..2194277922 100644
---- a/tools/sk_app/MetalWindowContext.h
-+++ b/tools/sk_app/MetalWindowContext.h
-@@ -29,7 +29,7 @@ public:
- 
-     bool isValid() override { return fValid; }
+-    void onSwapBuffers() override;
++    void onSwapBuffers(const SkIRect* rect = nullptr) override;
  
--    void swapBuffers() override;
-+    void swapBuffers(const SkIRect* rect = nullptr) override;
- 
-     void setDisplayParams(const DisplayParams& params) override;
+     bool                        fValid;
  
-diff --git a/tools/sk_app/MetalWindowContext.mm 
b/tools/sk_app/MetalWindowContext.mm
-index 49dc77b74d..ca1d74dc6c 100644
---- a/tools/sk_app/MetalWindowContext.mm
-+++ b/tools/sk_app/MetalWindowContext.mm
-@@ -187,7 +187,7 @@ GrBackendRenderTarget backendRT(fWidth,
+diff -ur skia.org/tools/sk_app/MetalWindowContext.mm 
skia/tools/sk_app/MetalWindowContext.mm
+--- skia.org/tools/sk_app/MetalWindowContext.mm        2023-07-08 
21:49:27.179700423 +0200
++++ skia/tools/sk_app/MetalWindowContext.mm    2023-07-08 21:52:10.064396318 
+0200
+@@ -191,7 +191,7 @@
      return surface;
  }
  
--void MetalWindowContext::swapBuffers() {
-+void MetalWindowContext::swapBuffers(const SkIRect*) {
+-void MetalWindowContext::onSwapBuffers() {
++void MetalWindowContext::onSwapBuffers(const SkIRect*) {
      id<CAMetalDrawable> currentDrawable = 
(id<CAMetalDrawable>)fDrawableHandle;
  
      id<MTLCommandBuffer> commandBuffer([*fShared->fQueue commandBuffer]);
-diff --git a/tools/sk_app/VulkanWindowContext.cpp 
b/tools/sk_app/VulkanWindowContext.cpp
-index 2b36d60076..d73978c9e4 100644
---- a/tools/sk_app/VulkanWindowContext.cpp
-+++ b/tools/sk_app/VulkanWindowContext.cpp
-@@ -572,7 +572,7 @@ sk_sp<SkSurface> 
VulkanWindowContext::getBackbufferSurface() {
-     return sk_ref_sp(surface);
- }
- 
--void VulkanWindowContext::swapBuffers() {
-+void VulkanWindowContext::swapBuffers(const SkIRect*) {
- 
-     BackbufferInfo* backbuffer = fBackbuffers + fCurrentBackbufferIndex;
-     SkSurface* surface = fSurfaces[backbuffer->fImageIndex].get();
-diff --git a/tools/sk_app/VulkanWindowContext.h 
b/tools/sk_app/VulkanWindowContext.h
-index 92bfba6dff..46f7fd97bd 100644
---- a/tools/sk_app/VulkanWindowContext.h
-+++ b/tools/sk_app/VulkanWindowContext.h
-@@ -32,7 +32,7 @@ public:
-     static GrDirectContext* getSharedGrDirectContext() { return fGlobalShared 
? fGlobalShared->fContext.get() : nullptr; }
- 
-     sk_sp<SkSurface> getBackbufferSurface() override;
--    void swapBuffers() override;
-+    void swapBuffers(const SkIRect* rect = nullptr) override;
- 
-     bool isValid() override { return fSurface != VK_NULL_HANDLE; }
- 
-diff --git a/tools/sk_app/WindowContext.h b/tools/sk_app/WindowContext.h
-index 68bb84b988..e15c1a3cf3 100644
---- a/tools/sk_app/WindowContext.h
-+++ b/tools/sk_app/WindowContext.h
-@@ -8,6 +8,7 @@
- #define WindowContext_DEFINED
- 
- #include "include/core/SkRefCnt.h"
-+#include "include/core/SkRect.h"
- #include "include/core/SkSurfaceProps.h"
- #include "include/gpu/GrTypes.h"
- #include "include/gpu/GrDirectContext.h"
-@@ -25,7 +26,7 @@ public:
- 
-     virtual sk_sp<SkSurface> getBackbufferSurface() = 0;
+diff -ur skia.org/tools/sk_app/unix/RasterWindowContext_unix.cpp 
skia/tools/sk_app/unix/RasterWindowContext_unix.cpp
+--- skia.org/tools/sk_app/unix/RasterWindowContext_unix.cpp    2023-07-08 
21:49:27.183700444 +0200
++++ skia/tools/sk_app/unix/RasterWindowContext_unix.cpp        2023-07-08 
21:54:06.840852252 +0200
+@@ -24,7 +24,7 @@
+     void setDisplayParams(const DisplayParams& params) override;
  
--    virtual void swapBuffers() = 0;
-+    virtual void swapBuffers(const SkIRect* rect = nullptr) = 0;
+ protected:
+-    void onSwapBuffers() override;
++    void onSwapBuffers(const SkIRect* rect = nullptr) override;
  
-     virtual bool isValid() = 0;
- 
-diff --git a/tools/sk_app/unix/RasterWindowContext_unix.cpp 
b/tools/sk_app/unix/RasterWindowContext_unix.cpp
-index 6ac20962b7..2ea9e07588 100644
---- a/tools/sk_app/unix/RasterWindowContext_unix.cpp
-+++ b/tools/sk_app/unix/RasterWindowContext_unix.cpp
-@@ -19,7 +19,7 @@ public:
-     RasterWindowContext_xlib(Display*, XWindow, int width, int height, const 
DisplayParams&);
- 
-     sk_sp<SkSurface> getBackbufferSurface() override;
--    void swapBuffers() override;
-+    void swapBuffers(const SkIRect* rect) override;
-     bool isValid() override { return SkToBool(fWindow); }
-     void resize(int  w, int h) override;
-     void setDisplayParams(const DisplayParams& params) override;
-@@ -60,7 +60,7 @@ void RasterWindowContext_xlib::resize(int  w, int h) {
+     sk_sp<SkSurface> fBackbufferSurface;
+     Display* fDisplay;
+@@ -58,7 +58,7 @@
  
  sk_sp<SkSurface> RasterWindowContext_xlib::getBackbufferSurface() { return 
fBackbufferSurface; }
  
--void RasterWindowContext_xlib::swapBuffers() {
-+void RasterWindowContext_xlib::swapBuffers(const SkIRect* rect) {
+-void RasterWindowContext_xlib::onSwapBuffers() {
++void RasterWindowContext_xlib::onSwapBuffers(const SkIRect* rect) {
      SkPixmap pm;
      if (!fBackbufferSurface->peekPixels(&pm)) {
          return;
-@@ -82,7 +82,9 @@ void RasterWindowContext_xlib::swapBuffers() {
+@@ -80,7 +80,9 @@
      if (!XInitImage(&image)) {
          return;
      }
@@ -117,31 +54,54 @@ index 6ac20962b7..2ea9e07588 100644
  }
  
  }  // anonymous namespace
-diff --git a/tools/sk_app/win/RasterWindowContext_win.cpp 
b/tools/sk_app/win/RasterWindowContext_win.cpp
-index d80c6fbeec..72df8d5170 100644
---- a/tools/sk_app/win/RasterWindowContext_win.cpp
-+++ b/tools/sk_app/win/RasterWindowContext_win.cpp
-@@ -22,7 +22,7 @@ public:
-     RasterWindowContext_win(HWND, const DisplayParams&);
- 
-     sk_sp<SkSurface> getBackbufferSurface() override;
--    void swapBuffers() override;
-+    void swapBuffers(const SkIRect* rect) override;
-     bool isValid() override { return SkToBool(fWnd); }
-     void resize(int w, int h) override;
+diff -ur skia.org/tools/sk_app/VulkanWindowContext.cpp 
skia/tools/sk_app/VulkanWindowContext.cpp
+--- skia.org/tools/sk_app/VulkanWindowContext.cpp      2023-07-08 
21:49:27.179700423 +0200
++++ skia/tools/sk_app/VulkanWindowContext.cpp  2023-07-08 21:52:53.676570245 
+0200
+@@ -572,7 +572,7 @@
+     return sk_ref_sp(surface);
+ }
+ 
+-void VulkanWindowContext::onSwapBuffers() {
++void VulkanWindowContext::onSwapBuffers(const SkIRect*) {
+ 
+     BackbufferInfo* backbuffer = fBackbuffers + fCurrentBackbufferIndex;
+     sk_sp<SkSurface> surface = fSurfaces[backbuffer->fImageIndex];
+diff -ur skia.org/tools/sk_app/VulkanWindowContext.h 
skia/tools/sk_app/VulkanWindowContext.h
+--- skia.org/tools/sk_app/VulkanWindowContext.h        2023-07-08 
21:49:27.179700423 +0200
++++ skia/tools/sk_app/VulkanWindowContext.h    2023-07-08 21:52:34.580494658 
+0200
+@@ -71,7 +71,7 @@
+     bool createSwapchain(int width, int height, const DisplayParams& params);
+     bool createBuffers(VkFormat format, VkImageUsageFlags, SkColorType 
colorType, VkSharingMode);
+     void destroyBuffers();
+-    void onSwapBuffers() override;
++    void onSwapBuffers(const SkIRect* rect = nullptr) override;
+ 
+     // Create functions
+     CreateVkSurfaceFn fCreateVkSurfaceFn;
+diff -ur skia.org/tools/sk_app/win/RasterWindowContext_win.cpp 
skia/tools/sk_app/win/RasterWindowContext_win.cpp
+--- skia.org/tools/sk_app/win/RasterWindowContext_win.cpp      2023-07-08 
21:49:27.183700444 +0200
++++ skia/tools/sk_app/win/RasterWindowContext_win.cpp  2023-07-08 
21:55:26.169145828 +0200
+@@ -27,7 +27,7 @@
      void setDisplayParams(const DisplayParams& params) override;
-@@ -75,13 +75,17 @@ void RasterWindowContext_win::resize(int w, int h) {
+ 
+ protected:
+-    void onSwapBuffers() override;
++    void onSwapBuffers(const SkIRect* rect=nullptr) override;
+ 
+     SkAutoMalloc fSurfaceMemory;
+     sk_sp<SkSurface> fBackbufferSurface;
+@@ -73,13 +73,17 @@
  
  sk_sp<SkSurface> RasterWindowContext_win::getBackbufferSurface() { return 
fBackbufferSurface; }
  
--void RasterWindowContext_win::swapBuffers() {
-+void RasterWindowContext_win::swapBuffers(const SkIRect* rect) {
+-void RasterWindowContext_win::onSwapBuffers() {
++void RasterWindowContext_win::onSwapBuffers(const SkIRect* rect) {
      BITMAPINFO* bmpInfo = reinterpret_cast<BITMAPINFO*>(fSurfaceMemory.get());
      HDC dc = GetDC(fWnd);
      SkPixmap pixmap;
      fBackbufferSurface->peekPixels(&pixmap);
 -    StretchDIBits(dc, 0, 0, fWidth, fHeight, 0, 0, fWidth, fHeight, 
pixmap.addr(), bmpInfo,
--                  DIB_RGB_COLORS, SRCCOPY);
+-                   DIB_RGB_COLORS, SRCCOPY);
 +    SkIRect update = rect ? *rect : SkIRect::MakeWH( fWidth, fHeight );
 +    // It appears that y-axis handling is broken if it doesn't match the 
window size.
 +    update = SkIRect::MakeXYWH( update.x(), 0, update.width(), fHeight );
@@ -151,3 +111,45 @@ index d80c6fbeec..72df8d5170 100644
      ReleaseDC(fWnd, dc);
  }
  
+diff -ur skia.org/tools/sk_app/WindowContext.cpp 
skia/tools/sk_app/WindowContext.cpp
+--- skia.org/tools/sk_app/WindowContext.cpp    2023-07-08 21:49:27.179700423 
+0200
++++ skia/tools/sk_app/WindowContext.cpp        2023-07-08 21:56:23.373350669 
+0200
+@@ -20,7 +20,7 @@
+ 
+ WindowContext::~WindowContext() {}
+ 
+-void WindowContext::swapBuffers() {
++void WindowContext::swapBuffers(const SkIRect* rect) {
+ #if defined(SK_GRAPHITE)
+     if (fGraphiteContext) {
+         SkASSERT(fGraphiteRecorder);
+@@ -33,7 +33,7 @@
+         }
+     }
+ #endif
+-    this->onSwapBuffers();
++    this->onSwapBuffers(rect);
+ }
+ 
+ }   //namespace sk_app
+diff -ur skia.org/tools/sk_app/WindowContext.h 
skia/tools/sk_app/WindowContext.h
+--- skia.org/tools/sk_app/WindowContext.h      2023-07-08 21:49:27.179700423 
+0200
++++ skia/tools/sk_app/WindowContext.h  2023-07-08 21:51:08.804143750 +0200
+@@ -31,7 +31,7 @@
+ 
+     virtual sk_sp<SkSurface> getBackbufferSurface() = 0;
+ 
+-    void swapBuffers();
++    void swapBuffers(const SkIRect* rect = nullptr);
+ 
+     virtual bool isValid() = 0;
+ 
+@@ -57,7 +57,7 @@
+ protected:
+     virtual bool isGpuContext() { return true;  }
+ 
+-    virtual void onSwapBuffers() = 0;
++    virtual void onSwapBuffers(const SkIRect* rect = nullptr) = 0;
+ 
+     sk_sp<GrDirectContext> fContext;
+ #if defined(SK_GRAPHITE)
diff --git a/external/skia/ubsan.patch.1 b/external/skia/ubsan.patch.1
index 005fdfebf639..8d422fb428e0 100644
--- a/external/skia/ubsan.patch.1
+++ b/external/skia/ubsan.patch.1
@@ -3,8 +3,8 @@ index 847e76f232..e27d9454f8 100644
 --- a/include/private/gpu/ganesh/GrContext_Base.h
 +++ b/include/private/gpu/ganesh/GrContext_Base.h
 @@ -20,7 +20,7 @@ class GrDirectContext;
- class GrImageContext;
- class GrRecordingContext;
+ struct GrContextOptions;
+ class GrBackendFormat;
  
 -class GrContext_Base : public SkRefCnt {
 +class SK_API GrContext_Base : public SkRefCnt {
@@ -27,8 +27,8 @@ index 847e76f232..e27d9454f8 100644
 -    SK_API GrBackendFormat defaultBackendFormat(SkColorType, GrRenderable) 
const;
 +    GrBackendFormat defaultBackendFormat(SkColorType, GrRenderable) const;
  
--    SK_API GrBackendFormat compressedBackendFormat(SkImage::CompressionType) 
const;
-+    GrBackendFormat compressedBackendFormat(SkImage::CompressionType) const;
+-    SK_API GrBackendFormat compressedBackendFormat(SkTextureCompressionType) 
const;
++    GrBackendFormat compressedBackendFormat(SkTextureCompressionType) const;
  
      /**
       * Gets the maximum supported sample count for a color type. 1 is 
returned if only non-MSAA
diff --git a/external/skia/windows-do-not-modify-logfont.patch.0 
b/external/skia/windows-do-not-modify-logfont.patch.0
index 30c5c1e96e56..b2c067d9e0c4 100644
--- a/external/skia/windows-do-not-modify-logfont.patch.0
+++ b/external/skia/windows-do-not-modify-logfont.patch.0
@@ -1,8 +1,8 @@
 --- ./src/ports/SkFontHost_win.cpp
 +++ ./src/ports/SkFontHost_win.cpp
-@@ -349,7 +349,7 @@ static bool FindByLogFont(SkTypeface* face, void* ctx) {
+@@ -357,7 +357,7 @@ static bool FindByLogFont(SkTypeface* face, void* ctx) {
   */
- SkTypeface* SkCreateTypefaceFromLOGFONT(const LOGFONT& origLF) {
+ sk_sp<SkTypeface> SkCreateTypefaceFromLOGFONT(const LOGFONT& origLF) {
      LOGFONT lf = origLF;
 -    make_canonical(&lf);
 +//    make_canonical(&lf);
diff --git a/external/skia/windows-force-unicode-api.patch.0 
b/external/skia/windows-force-unicode-api.patch.0
index f73de176dff3..13c0536891c4 100644
--- a/external/skia/windows-force-unicode-api.patch.0
+++ b/external/skia/windows-force-unicode-api.patch.0
@@ -6,8 +6,8 @@ index f659adf0e9..34446fc7a1 100644
   *  corresponding typeface for the specified logfont. The caller is 
responsible
   *  for calling unref() when it is finished.
   */
--SK_API SkTypeface* SkCreateTypefaceFromLOGFONT(const LOGFONT&);
-+SK_API SkTypeface* SkCreateTypefaceFromLOGFONT(const LOGFONTW&);
+-SK_API sk_sp<SkTypeface> SkCreateTypefaceFromLOGFONT(const LOGFONT&);
++SK_API sk_sp<SkTypeface> SkCreateTypefaceFromLOGFONT(const LOGFONTW&);
  
  /**
   *  Copy the LOGFONT associated with this typeface into the lf parameter. Note
diff --git a/external/skia/windows-raster-surface-no-copies.patch.1 
b/external/skia/windows-raster-surface-no-copies.patch.1
index 0c5804d8558b..3765f70971fd 100644
--- a/external/skia/windows-raster-surface-no-copies.patch.1
+++ b/external/skia/windows-raster-surface-no-copies.patch.1
@@ -2,7 +2,7 @@ diff --git a/tools/sk_app/win/RasterWindowContext_win.cpp 
b/tools/sk_app/win/Ras
 index 9548220ce6..49f1f9ed17 100644
 --- a/tools/sk_app/win/RasterWindowContext_win.cpp
 +++ b/tools/sk_app/win/RasterWindowContext_win.cpp
-@@ -55,7 +55,7 @@ void RasterWindowContext_win::resize(int w, int h) {
+@@ -53,7 +53,7 @@
      fWidth = w;
      fHeight = h;
      fBackbufferSurface.reset();
@@ -11,7 +11,7 @@ index 9548220ce6..49f1f9ed17 100644
      fSurfaceMemory.reset(bmpSize);
      BITMAPINFO* bmpInfo = reinterpret_cast<BITMAPINFO*>(fSurfaceMemory.get());
      ZeroMemory(bmpInfo, sizeof(BITMAPINFO));
-@@ -65,11 +65,12 @@ void RasterWindowContext_win::resize(int w, int h) {
+@@ -63,11 +63,12 @@
      bmpInfo->bmiHeader.biPlanes = 1;
      bmpInfo->bmiHeader.biBitCount = 32;
      bmpInfo->bmiHeader.biCompression = BI_RGB;
@@ -21,19 +21,21 @@ index 9548220ce6..49f1f9ed17 100644
  
      SkImageInfo info = SkImageInfo::Make(w, h, fDisplayParams.fColorType, 
kPremul_SkAlphaType,
                                           fDisplayParams.fColorSpace);
--    fBackbufferSurface = SkSurface::MakeRasterDirect(info, pixels, 
sizeof(uint32_t) * w);
-+    fBackbufferSurface = SkSurface::MakeRaster(info);
+-    fBackbufferSurface = SkSurfaces::WrapPixels(info, pixels, 
sizeof(uint32_t) * w);
++    fBackbufferSurface = SkSurfaces::Raster(info);
  }
  
  sk_sp<SkSurface> RasterWindowContext_win::getBackbufferSurface() { return 
fBackbufferSurface; }
-@@ -77,7 +78,9 @@ sk_sp<SkSurface> 
RasterWindowContext_win::getBackbufferSurface() { return fBackb
- void RasterWindowContext_win::swapBuffers() {
+@@ -75,8 +76,10 @@
+ void RasterWindowContext_win::onSwapBuffers() {
      BITMAPINFO* bmpInfo = reinterpret_cast<BITMAPINFO*>(fSurfaceMemory.get());
      HDC dc = GetDC(fWnd);
 -    StretchDIBits(dc, 0, 0, fWidth, fHeight, 0, 0, fWidth, fHeight, 
bmpInfo->bmiColors, bmpInfo,
+-                  DIB_RGB_COLORS, SRCCOPY);
 +    SkPixmap pixmap;
 +    fBackbufferSurface->peekPixels(&pixmap);
 +    StretchDIBits(dc, 0, 0, fWidth, fHeight, 0, 0, fWidth, fHeight, 
pixmap.addr(), bmpInfo,
-                   DIB_RGB_COLORS, SRCCOPY);
++                   DIB_RGB_COLORS, SRCCOPY);
      ReleaseDC(fWnd, dc);
  }
+ 
diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx
index d86f89ee6f4e..c8986831ab13 100644
--- a/vcl/inc/skia/gdiimpl.hxx
+++ b/vcl/inc/skia/gdiimpl.hxx
@@ -28,6 +28,7 @@
 #include <skia/utils.hxx>
 
 #include <SkPaint.h>
+#include <SkBlendMode.h>
 #include <optional>
 
 class SkiaFlushIdle;
diff --git a/vcl/skia/SkiaHelper.cxx b/vcl/skia/SkiaHelper.cxx
index 16cbdd306fd1..ec668315ef62 100644
--- a/vcl/skia/SkiaHelper.cxx
+++ b/vcl/skia/SkiaHelper.cxx
@@ -46,11 +46,42 @@ bool isVCLSkiaEnabled() { return false; }
 #include <SkGraphics.h>
 #include <GrDirectContext.h>
 #include <SkRuntimeEffect.h>
-#include <SkOpts_spi.h>
+#include <SkStream.h>
+#include <SkTileMode.h>
 #include <skia_compiler.hxx>
 #include <skia_opts.hxx>
+#if defined(MACOSX)
+#include <premac.h>
+#endif
 #include <tools/sk_app/VulkanWindowContext.h>
 #include <tools/sk_app/MetalWindowContext.h>
+#if defined(MACOSX)
+#include <postmac.h>
+#endif
+#include <src/core/SkOpts.h>
+#include <src/core/SkChecksum.h>
+#include <include/encode/SkPngEncoder.h>
+#include <ganesh/SkSurfaceGanesh.h>
+#if defined _MSC_VER
+#pragma warning(disable : 4100) // "unreferenced formal parameter"
+#pragma warning(disable : 4324) // "structure was padded due to alignment 
specifier"
+#endif
+#if defined __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-parameter"
+#endif
+#if defined __GNUC__ && !defined __clang__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-unused-parameter"
+#endif
+#include <src/image/SkImage_Base.h>
+#if defined __GNUC__ && !defined __clang__
+#pragma GCC diagnostic pop
+#endif
+#if defined __clang__
+#pragma clang diagnostic pop
+#endif
+
 #include <fstream>
 
 namespace SkiaHelper
@@ -513,9 +544,9 @@ sk_sp<SkSurface> createSkSurface(int width, int height, 
SkColorType type, SkAlph
         {
             if (GrDirectContext* grDirectContext = getSharedGrDirectContext())
             {
-                surface = SkSurface::MakeRenderTarget(grDirectContext, 
skgpu::Budgeted::kNo,
-                                                      SkImageInfo::Make(width, 
height, type, alpha),
-                                                      0, surfaceProps());
+                surface = SkSurfaces::RenderTarget(grDirectContext, 
skgpu::Budgeted::kNo,
+                                                   SkImageInfo::Make(width, 
height, type, alpha), 0,
+                                                   surfaceProps());
                 if (surface)
                 {
 #ifdef DBG_UTIL
@@ -534,7 +565,7 @@ sk_sp<SkSurface> createSkSurface(int width, int height, 
SkColorType type, SkAlph
             break;
     }
     // Create raster surface as a fallback.
-    surface = SkSurface::MakeRaster(SkImageInfo::Make(width, height, type, 
alpha), surfaceProps());
+    surface = SkSurfaces::Raster(SkImageInfo::Make(width, height, type, 
alpha), surfaceProps());
     assert(surface);
     if (surface)
     {
@@ -559,7 +590,7 @@ sk_sp<SkImage> createSkImage(const SkBitmap& bitmap)
         {
             if (GrDirectContext* grDirectContext = getSharedGrDirectContext())
             {
-                sk_sp<SkSurface> surface = SkSurface::MakeRenderTarget(
+                sk_sp<SkSurface> surface = SkSurfaces::RenderTarget(
                     grDirectContext, skgpu::Budgeted::kNo,
                     bitmap.info().makeAlphaType(kPremul_SkAlphaType), 0, 
surfaceProps());
                 if (surface)
@@ -582,7 +613,7 @@ sk_sp<SkImage> createSkImage(const SkBitmap& bitmap)
             break;
     }
     // Create raster image as a fallback.
-    sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap);
+    sk_sp<SkImage> image = SkImages::RasterFromBitmap(bitmap);
     assert(image);
     return image;
 }
@@ -684,14 +715,14 @@ static o3tl::lru_map<uint32_t, uint32_t> 
checksumCache(256);
 
 static uint32_t computeSkPixmapChecksum(const SkPixmap& pixmap)
 {
-    // Use uint32_t because that's what SkOpts::hash_fn() returns.
-    static_assert(std::is_same_v<uint32_t, decltype(SkOpts::hash_fn(nullptr, 
0, 0))>);
+    // Use uint32_t because that's what SkChecksum::Hash32() returns.
+    static_assert(std::is_same_v<uint32_t, 
decltype(SkChecksum::Hash32(nullptr, 0, 0))>);
     const size_t dataRowBytes = pixmap.width() << pixmap.shiftPerPixel();
     if (dataRowBytes == pixmap.rowBytes())
-        return SkOpts::hash_fn(pixmap.addr(), pixmap.height() * dataRowBytes, 
0);
+        return SkChecksum::Hash32(pixmap.addr(), pixmap.height() * 
dataRowBytes, 0);
     uint32_t sum = 0;
     for (int row = 0; row < pixmap.height(); ++row)
-        sum = SkOpts::hash_fn(pixmap.addr(0, row), dataRowBytes, sum);
+        sum = SkChecksum::Hash32(pixmap.addr(0, row), dataRowBytes, sum);
     return sum;
 }
 
@@ -806,7 +837,10 @@ void prepareSkia(std::unique_ptr<sk_app::WindowContext> 
(*createGpuWindowContext
     skiaSupportedByBackend = true;
 }
 
-void dump(const SkBitmap& bitmap, const char* file) { 
dump(SkImage::MakeFromBitmap(bitmap), file); }
+void dump(const SkBitmap& bitmap, const char* file)
+{
+    dump(SkImages::RasterFromBitmap(bitmap), file);
+}
 
 void dump(const sk_sp<SkSurface>& surface, const char* file)
 {
@@ -816,7 +850,19 @@ void dump(const sk_sp<SkSurface>& surface, const char* 
file)
 
 void dump(const sk_sp<SkImage>& image, const char* file)
 {
-    sk_sp<SkData> data = image->encodeToData(SkEncodedImageFormat::kPNG, 1);
+    SkBitmap bm;
+    if (!as_IB(image)->getROPixels(getSharedGrDirectContext(), &bm))
+        return;
+    SkPixmap pixmap;
+    if (!bm.peekPixels(&pixmap))
+        return;
+    SkPngEncoder::Options opts;
+    opts.fFilterFlags = SkPngEncoder::FilterFlag::kNone;
+    opts.fZLibLevel = 1;
+    SkDynamicMemoryWStream stream;
+    if (!SkPngEncoder::Encode(&stream, pixmap, opts))
+        return;
+    sk_sp<SkData> data = stream.detachAsData();
     std::ofstream ostream(file, std::ios::binary);
     ostream.write(static_cast<const char*>(data->data()), data->size());
 }
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index 94e1f7c176fa..3c0957be4806 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -1445,7 +1445,7 @@ void SkiaSalGraphicsImpl::invert(basegfx::B2DPolygon 
const& rPoly, SalInvert eFl
         aPaint.setStrokeWidth(2);
         constexpr float intervals[] = { 4.0f, 4.0f };
         aPaint.setStyle(SkPaint::kStroke_Style);
-        aPaint.setPathEffect(SkDashPathEffect::Make(intervals, 
SK_ARRAY_COUNT(intervals), 0));
+        aPaint.setPathEffect(SkDashPathEffect::Make(intervals, 
std::size(intervals), 0));
     }
     else
     {
diff --git a/vcl/skia/osx/bitmap.cxx b/vcl/skia/osx/bitmap.cxx
index d622f6419e95..1052efc32de7 100644
--- a/vcl/skia/osx/bitmap.cxx
+++ b/vcl/skia/osx/bitmap.cxx
@@ -26,6 +26,7 @@
 
 #include <SkBitmap.h>
 #include <SkCanvas.h>
+#include <SkShader.h>
 
 using namespace SkiaHelper;
 
diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx
index 97609c11d125..778917b6db0e 100644
--- a/vcl/skia/salbmp.cxx
+++ b/vcl/skia/salbmp.cxx
@@ -33,9 +33,11 @@
 #include <skia/utils.hxx>
 #include <skia/zone.hxx>
 
+#include <SkBitmap.h>
 #include <SkCanvas.h>
 #include <SkImage.h>
 #include <SkPixelRef.h>
+#include <SkShader.h>
 #include <SkSurface.h>
 #include <SkSwizzle.h>
 #include <SkColorFilter.h>
@@ -1123,7 +1125,7 @@ void SkiaSalBitmap::EnsureBitmapData()
                                                        << 
static_cast<int>(mScaleQuality));
         Size savedSize = mSize;
         mSize = mPixelsSize;
-        ResetToSkImage(SkImage::MakeFromBitmap(GetAsSkBitmap()));
+        ResetToSkImage(SkImages::RasterFromBitmap(GetAsSkBitmap()));
         mSize = savedSize;
     }
 
diff --git a/vcl/skia/win/gdiimpl.cxx b/vcl/skia/win/gdiimpl.cxx
index d063b440cf31..0d7d60f9207e 100644
--- a/vcl/skia/win/gdiimpl.cxx
+++ b/vcl/skia/win/gdiimpl.cxx
@@ -20,6 +20,7 @@
 #include <comphelper/windowserrorstring.hxx>
 #include <sal/log.hxx>
 
+#include <SkBitmap.h>
 #include <SkCanvas.h>
 #include <SkPaint.h>
 #include <SkPixelRef.h>
@@ -244,7 +245,7 @@ bool WinSkiaSalGraphicsImpl::DrawTextLayout(const 
GenericSalLayout& rLayout)
             // Resetting it here does not seem to cause any problem.
             logFont.lfOrientation = 0;
             logFont.lfEscapement = 0;
-            typeface.reset(SkCreateTypefaceFromLOGFONT(logFont));
+            typeface = SkCreateTypefaceFromLOGFONT(logFont);
             dwrite = false;
             if (!typeface)
                 return false;
diff --git a/vcl/skia/x11/textrender.cxx b/vcl/skia/x11/textrender.cxx
index fed5daa8a117..81d6efa670c9 100644
--- a/vcl/skia/x11/textrender.cxx
+++ b/vcl/skia/x11/textrender.cxx
@@ -19,6 +19,15 @@
 
 #include <sal/config.h>
 
+#if defined __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-value"
+#endif
+#if defined __GNUC__ && !defined __clang__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-unused-value"
+#endif
+
 #include <skia/x11/textrender.hxx>
 
 #include <unx/fc_fontoptions.hxx>
@@ -30,6 +39,13 @@
 #include <SkFont.h>
 #include <SkFontMgr_fontconfig.h>
 
+#if defined __GNUC__ && !defined __clang__
+#pragma GCC diagnostic pop
+#endif
+#if defined __clang__
+#pragma clang diagnostic pop
+#endif
+
 void SkiaTextRender::DrawTextLayout(const GenericSalLayout& rLayout, const 
SalGraphics& rGraphics)
 {
     const FreetypeFontInstance& rInstance = 
static_cast<FreetypeFontInstance&>(rLayout.GetFont());

Reply via email to