Skip to content

[skia-sync] Merge upstream chrome/m148#248

Closed
mattleibow wants to merge 343 commits into
skiasharpfrom
skia-sync/m148
Closed

[skia-sync] Merge upstream chrome/m148#248
mattleibow wants to merge 343 commits into
skiasharpfrom
skia-sync/m148

Conversation

@mattleibow

Copy link
Copy Markdown
Collaborator

Automated upstream merge of chrome/m148.

mono/skia — Skia m147 → m148 Sync Summary

Branch: skia-sync/m148

Upstream Merge

Item Value
Upstream commit 2ac66cfda0 (chrome/m148 tip)
Merge commit 371bd09dd1
C API fix commit 067135cc7b

Conflicts Resolved

File Resolution
src/gpu/graphite/mtl/MtlCaps.mm Took upstream (no fork patches)
src/utils/SkEventTracer.cpp Took upstream (atexit onExit callback added)
include/utils/SkEventTracer.h Took upstream (comment update)
third_party/harfbuzz/BUILD.gn Kept ours (fork at 14.2.0; upstream has older hb-raster-svg-* entries that don't exist in our harfbuzz)
DEPS Kept fork pins (expat 2.8.1, freetype 2.14.3, harfbuzz 14.2.0, libjpeg-turbo 3.1.4.1, libpng, libwebp, VMA/vulkan-headers); kept upstream brotli update; kept Dawn/emsdk etc. commented out
RELEASE_NOTES.md Took upstream
infra/bots/tasks.json Took upstream
modules/skcms/version.sha1 Took upstream

C API Changes

New: R16_FLOAT_SK_COLORTYPE

kR16_float_SkColorType was inserted between kA16_float_SkColorType (ordinal 20) and kR16G16_float_SkColorType (now ordinal 22) in the Skia SkColorType enum.

Files changed:

  • include/c/sk_types.h: Added R16_FLOAT_SK_COLORTYPE, between A16_FLOAT_SK_COLORTYPE and R16G16_FLOAT_SK_COLORTYPE
  • src/c/sk_enums.cpp: Added static_assert verifying kR16_float_SkColorType == R16_FLOAT_SK_COLORTYPE

This fix prevents 7 consecutive static_assert failures that would have occurred at compile time.

Other Notable m148 Changes (non-C-API)

Change Impact
kR16_float_SkColorType enum insertion HIGH — static_assert fix required (done)
GrMockBackendSurface.h split out from GrBackendSurface.h None — C API does not use mock backend
SkDeserialProcs new fields None — additive, no sizeof assert
SkPathBuilder::addRaw signature change None — C API does not expose this
SkBitmap removed fMips field None — no sizeof assert in C API
BUILD.gn opt target rename (hsw→ml3, skx→ml4) None — build scripts don't reference by name

Items Needing Human Attention

  • DEPS conflict note: The merge commit 371bd09dd1 was committed with a leftover <<<<<<< HEAD marker in DEPS (fixed in the subsequent C API commit 067135cc7b). Git history has one "bad" commit; working tree is correct. Consider amending if possible before merge.
  • harfbuzz BUILD.gn: Upstream m148 adds hb-raster-svg-* source files that reference functions/headers not in our harfbuzz 14.2.0. These entries were discarded. When harfbuzz is next updated, these entries may need to be reconciled.

Created by skia-upstream-sync.

skia-autoroll and others added 30 commits March 17, 2026 12:00
https://chromium.googlesource.com/vulkan-deps.git/+log/0ac6a8e7567c..98fee6234d16

Also rolling transitive DEPS:
  https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/e4bceacf59fdfe742047e94e41ef65a48999a0dd..8d0044201984c645ef1d048a5c5a325b77a5146e

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/vulkan-deps-skia-autoroll
Please CC brettos@google.com,skiabot@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win11-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE
Bug: None
Tbr: brettos@google.com
Change-Id: I70b1c6f2b21acc2a27fc8b2687a18eef4eceae8b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188101
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Android currently has -Wno-psabi in global config, but this is technical
debt and should be removed. Explicitly disable the warning in Skia,
which matches other platforms.

Bug: b/165945989
Change-Id: I95c7585073a4944f65e416c1fec59a5ea7b90012
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1186876
Reviewed-by: Jorge Betancourt <jmbetancourt@google.com>
Commit-Queue: Krzysztof Kosiński <krzysio@google.com>
Follow-up to https://review.skia.org/1185536

Bug: b/452666425
Change-Id: I8a196e1c7df0a44f34ed80c7aabb02739da0e1b0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188297
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Brett Somocurcio <brettos@google.com>
In order to generate expected pixel values, the test needs more
explicit definitions of the TextureFormat and SkColorType layouts.
This refactors the expectation definitions to define the channel layout
in terms of a name, type, and bit size. All of the other expected
properties can be derived from this definition.

The channel definitions are also provided for all the SkColorTypes
although these are unused until follow-up CLs land to use them for
generating/validating data transfers.

Bug: b/390473370
Change-Id: Ie5acd68c92ab76175b6e6591e3c15ea99fcdc82b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1186600
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8687049249350153089

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/31b7aaa3ee6941a6116f84064c2b04a4586ffd5f
  31b7aaa (ayatane@chromium.org)
      [git cl] Handle stray corp URLs

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

R=borenet@google.com

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: Ic3b1d51de4f55c7ecd6ab566bd0c077cce5928b6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188416
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8687046107447634673

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/95d1432b5c506cc6b500b34c23f06c4708139fe9
  95d1432 (flowerhack@google.com)
      [presubmit,rust] Omit rust files from the line length presubmit...

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

R=borenet@google.com

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I42114007d838368d22bf9ea7792af87a65197e83
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188436
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
https://dawn.googlesource.com/dawn.git/+log/198baf5044ae..18eb229ef5f7

2026-03-18 jiawei.shao@intel.com [WebGPU backend] Set explicit compute subgroup size configs in `APIGetInfo`
2026-03-17 gman@chromium.org Refactor DeviceBase::APIPopErrorScope to avoid warning

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dawn-skia-autoroll
Please CC cwallez@google.com,senorblanco@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Dawn: https://bugs.chromium.org/p/dawn/issues/entry
To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Debug-Graphite_Dawn_Vulkan;skia/skia.primary:Test-Mac14-Clang-MacMini9.1-GPU-AppleM1-arm64-Debug-All-ASAN_Graphite_Dawn_Metal;skia/skia.primary:Test-Win11-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Graphite_Dawn_D3D12;skia/skia.primary:Test-Win11-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Graphite_Dawn_D3D11
Bug: None
Tbr: senorblanco@google.com
Change-Id: Ida98656c1a896e9fc374c19176d286ab5fc3c04b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188280
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
https://skia.googlesource.com/buildbot.git/+log/6336d62b8859..f041daad5584

2026-03-17 eduardoyap@google.com Add replaceState option to stateReflector and use it in ExploreMultiSk
2026-03-17 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle Perfserver Freeze - off - FREEZELOCK.txt
2026-03-17 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle Perfserver Freeze - on - FREEZELOCK.txt
2026-03-17 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle Perfserver Freeze - off - FREEZELOCK.txt
2026-03-17 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle Perfserver Freeze - on - FREEZELOCK.txt
2026-03-17 viktarzinkou@google.com Implementation of AnomalyBoundsRefiner for Anomaly Localization.
2026-03-17 sergeirudenkov@google.com Make toggle freeze CLs msg be more comprehensive
2026-03-17 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle freeze FREEZELOCK.txt
2026-03-17 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle freeze FREEZELOCK.txt
2026-03-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Depot Tools from 6b62257bd9fc to 4e58caf8aa08 (1 revision)
2026-03-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll command_wrapper from d39b1e565c725cc56... to 9afa792eeb82bbee5... (1 revision)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/infra-skia
Please CC borenet@google.com,skiabot@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia Infra: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Bug: chromium:491439646
Tbr: borenet@google.com
Change-Id: Ifd5b944519fc5956febaa3a0752fef5b899460cc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188656
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
https://chromium.googlesource.com/angle/angle.git/+log/599125448d7a..f7571cf4c526

2026-03-18 syoussefi@chromium.org Translator: Fix incorrect locations reported in I/O blocks
2026-03-18 syoussefi@chromium.org IR: Simplify calls to inspect_pointer_access
2026-03-18 syoussefi@chromium.org IR: Make block field names part of shader interface
2026-03-18 abdolrashidi@google.com Skip CopyTexImage Luma GLES test on Pixel 10
2026-03-17 yuxinhu@google.com IR Validation: validate no branch instruction in the middle of a block
2026-03-17 syoussefi@chromium.org Translator: Varyings and attrib/output are mutually exclusive
2026-03-17 sarath.singapati@huawei.com Maleoon: Force LUMA workaround for same-texture CopyTexImage2D
2026-03-17 angle-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from d2a8908cd9d2 to 459765ea146e (9 revisions)
2026-03-17 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Chromium from eda6e99add2e to a371ede85b90 (636 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/angle-skia-autoroll
Please CC brettos@google.com,jmadill@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry
To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Release-ANGLE;skia/skia.primary:Build-Mac-Clang-arm64-Release-ANGLE;skia/skia.primary:Test-Win11-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win11-Clang-Dell3930-GPU-GTX1660-x86_64-Debug-All-ANGLE
Tbr: brettos@google.com
Change-Id: I8f2d34981bcb55b2fc7ea951e8f68fa4005364bc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188638
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
https://chromium.googlesource.com/vulkan-deps.git/+log/98fee6234d16..7c625f80e8cc

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/vulkan-deps-skia-autoroll
Please CC brettos@google.com,skiabot@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win11-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE
Bug: None
Tbr: brettos@google.com
Change-Id: Id94ecd9aa76a7ecd8bcfd5983dedb3806f1e298d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188283
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8687007727700707857

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/d819b798b712d4064ad12b7bd9257acf78e34cb0
  d819b79 (wnwen@google.com)
      siso: Add ANTIGRAVITY_AGENT to AI_AGENT list

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

R=borenet@google.com

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I1e9323c479ed1f9e03417fdb1dc458baad98afa9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188642
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
This adds an optional finish proc to SubmitInfo. When provided, the proc
is attached to the new GPU work submission, or to the most recent
outstanding submission if there is no pending work. If the GPU is idle,
the proc is invoked immediately.

Bug: b/491840505
Change-Id: Ibaf5240eab2ab9177b5d13936f822f6987854862
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1185496
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Quyen Le <lehoangquyen@chromium.org>
https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git/+log/8e49998f003d693213b538ef765814c7d21abada..6154446fccefbf3ca644894f598969113b0c7bcd

Change-Id: Id634f9e429f813cf6e614021a1765983191b13e8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188616
Auto-Submit: Ben Wagner <bungeman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Florin Malita <fmalita@google.com>
This reverts commit 82d3bc1.

Reason for revert: Can now land after correcting this missed callsite http://ag/38975924

Original change's description:
> Revert "Delete staging functions for serialization and deserialization"
>
> This reverts commit ec20813.
>
> Reason for revert: Breaking Android roller
>
> Original change's description:
> > Delete staging functions for serialization and deserialization
> >
> > This can land after the following CL(s) land:
> > http://ag/38920053
> >
> > Change-Id: I36ac530014c83df18ac8c5f46de2d92332b27413
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188116
> > Auto-Submit: Jorge Betancourt <jmbetancourt@google.com>
> > Reviewed-by: Kaylee Lubick <kjlubick@google.com>
> > Commit-Queue: Jorge Betancourt <jmbetancourt@google.com>
>
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Change-Id: Iac803a74eae10230ca753ff61b27b8360cb2f851
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188296
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Commit-Queue: Jorge Betancourt <jmbetancourt@google.com>

Change-Id: Ic09449db0622d0d37c8e1dbfdaddb6589952858d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188996
Reviewed-by: Kaylee Lubick <kjlubick@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Jorge Betancourt <jmbetancourt@google.com>
This fixes a few problems:
 - We need X11 support for unix (don't disable it all the time in Dawn)
 - Use input from `dawn_enable_` GN args to control which backends
   viewer allows the user to toggle through. These defines
   (e.g. SK_DAWN_HAS_VULKAN) might be useful in other parts of Skia too.

Change-Id: I85758973436170132e266538016c1657a828c19b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1188376
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Once https://review.skia.org/c/skia/+/1171257 lands and clients
are updated, we can land this to remove the old APIs.

Client CLs:
 - https://crrev.com/c/7663839
 - https://crrev.com/c/7664720
 - http://cl/883233719
 - flutter/flutter#183731

Change-Id: If45eabe32830eb069544a79761c09e2fcc6556df
Bug: b/293490566
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1169976
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Change-Id: I7fe809bf14836832088d387dea1e78d8932f5952
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189456
Reviewed-by: Greg Daniel <egdaniel@google.com>
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8686966206734187233

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/8e07900125ba28f056008bded80053b297837aab
  8e07900 (sunnyps@chromium.org)
      gclient-new-workdir: Use git worktree

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

R=borenet@google.com

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I2ac59852170a5a8fcd02e51ad0c0a1e52140d471
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189336
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
https://chromium.googlesource.com/vulkan-deps.git/+log/7c625f80e8cc..ea5afb3f56cf

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/vulkan-deps-skia-autoroll
Please CC brettos@google.com,skiabot@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win11-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE
Bug: None
Tbr: brettos@google.com
Change-Id: I4ed3139a407aa26bd935356d6f4a77edab294d79
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189258
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
TextureFormat is always able to define a read swizzle to sample back
to a compatible SkColorType. It does not always have a defined write
swizzle because that determines renderability. This makes it difficult
to just use the read vs. write swizzle as part of the new
format transfer function API.

Instead, CPU->GPU transfers will use the inverse of the read swizzle,
which is generally always the write swizzle except that it is also
well-defined when we disable write swizzles for rendering.

This CL isolates the new Swizzle::invert function and adds a unit
test that shows how it behaves on different swizzles.

Bug: b/390473370
Change-Id: I015db225313cd41c9b806ddd6d816cd87a6bb856
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1187656
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Nicolette Prevost <nicolettep@google.com>
https://dawn.googlesource.com/dawn.git/+log/18eb229ef5f7..3510e36c0125

2026-03-19 rharrison@chromium.org [6/6] Remove `tint::Slice` and related cleanup
2026-03-19 jiawei.shao@intel.com Skip all `CaptureAndReplayTest` with dawn wire
2026-03-18 alanbaker@google.com Revert "[dawn] Switch indirect dispatch validation to use immediates"
2026-03-18 cwallez@chromium.org [YUV AHB] Use math::Mat for ExternalTexture color matrices
2026-03-18 rharrison@chromium.org [5/6] Remove tint::Slice from `src/tint/utils/containers/transform.h`
2026-03-18 rharrison@chromium.org [4/6] Remove tint::Slice usages from `src/tint/core/intrinsic/`
2026-03-18 rharrison@chromium.org [3/6] Remove tint::Slice usages from `src/tint/core/ir`
2026-03-18 rharrison@chromium.org [2/6] Remove tint::Slice usages from `src/tint/lang/hlsl/`
2026-03-18 dawn-automated-expectations@chops-service-accounts.iam.gserviceaccount.com Roll third_party/webgpu-cts/ 81bf5e91e..5ca78e551 (1 commit)
2026-03-18 kainino@chromium.org [github] Only publish releases on weekdays
2026-03-18 cwallez@chromium.org [YUV AHB] Pass a struct to vk::ShaderModule::GetHandleAndSpirv
2026-03-18 rharrison@chromium.org [1/6] Remove tint::Slice usages from `src/tint/utils/text/`
2026-03-18 rharrison@chromium.org [0/6] Remove debugging pretty printers
2026-03-18 gman@chromium.org Fix Mac cmake build for dawn.node
2026-03-18 gman@chromium.org [dawn.node] Fix dawn.node in workers.
2026-03-18 cwallez@chromium.org [YUV AHB] Inline PipelineVk in Render/ComputePipelineVk
2026-03-18 cwallez@chromium.org [YUV AHB] Remove unused PipelineLayout getters.
2026-03-18 dawn-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE from 599125448d7a to f7571cf4c526 (9 revisions)
2026-03-18 dawn-autoroll@skia-public.iam.gserviceaccount.com Roll DirectX Shader Compiler from f62b9b4be05f to 05de2c9fa9a4 (2 revisions)
2026-03-18 dawn-autoroll@skia-public.iam.gserviceaccount.com Roll Chromium from 4cd630e4209c to 97511f0e7c62 (709 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dawn-skia-autoroll
Please CC cwallez@google.com,senorblanco@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Dawn: https://bugs.chromium.org/p/dawn/issues/entry
To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Debug-Graphite_Dawn_Vulkan;skia/skia.primary:Test-Mac14-Clang-MacMini9.1-GPU-AppleM1-arm64-Debug-All-ASAN_Graphite_Dawn_Metal;skia/skia.primary:Test-Win11-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Graphite_Dawn_D3D12;skia/skia.primary:Test-Win11-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Graphite_Dawn_D3D11
Bug: None
Tbr: senorblanco@google.com
Change-Id: Id6fe2010bd480286ef98912c9f0dd332bb271148
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189737
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
https://skia.googlesource.com/buildbot.git/+log/f041daad5584..d1635669ba81

2026-03-19 jiaxindong@google.com Update object value to have JSON.stringify.
2026-03-18 zhanliang@google.com Partial reland "[CBB] Use readable IDs for some CBB workflows"
2026-03-18 sergeirudenkov@google.com be for chrome autopush
2026-03-18 viktarzinkou@google.com Provide use_anomaly_localization=true for fuchsia-exp-perf
2026-03-18 viktarzinkou@google.com Integration of the SuperAnomalyRefiner pipeline into Regression Detector.
2026-03-18 viktarzinkou@google.com Update Confirmed Regression Structure for Anomaly Localization.
2026-03-18 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle Perfserver Freeze - off - perf/FREEZELOCK
2026-03-18 louhi-prod-1-6316342352543744@louhi-prod-1.iam.gserviceaccount.com Toggle Perfserver Freeze - on - perf/FREEZELOCK
2026-03-18 sergeirudenkov@google.com cluster for autopush
2026-03-18 sergeirudenkov@google.com remove chrome-internal-lts
2026-03-18 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Depot Tools from 4e58caf8aa08 to 95d1432b5c50 (2 revisions)
2026-03-18 skia-autoroll@skia-public.iam.gserviceaccount.com Roll command_wrapper from 9afa792eeb82bbee5... to baf4400834954c63b... (1 revision)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/infra-skia
Please CC borenet@google.com,skiabot@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia Infra: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Bug: chromium:473025411,chromium:493535030
Tbr: borenet@google.com
Change-Id: Iccbb4445aeb0f10fca73e99ec190988fce7b98d7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189776
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
https://chromium.googlesource.com/angle/angle.git/+log/f7571cf4c526..aef03d88aba5

2026-03-19 syoussefi@chromium.org Add tricky sRGB decode vs SKIP_DECODE vs texelFetch tests
2026-03-18 vikassoni@chromium.org [ANGLE]: Allow matching GL_BGRA_EXT variants for sub-image updates.
2026-03-18 angle-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 459765ea146e to 313687770d81 (7 revisions)
2026-03-18 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Chromium from a371ede85b90 to c8d5fee03227 (719 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/angle-skia-autoroll
Please CC brettos@google.com,jmadill@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry
To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Release-ANGLE;skia/skia.primary:Build-Mac-Clang-arm64-Release-ANGLE;skia/skia.primary:Test-Win11-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win11-Clang-Dell3930-GPU-GTX1660-x86_64-Debug-All-ANGLE
Tbr: brettos@google.com
Change-Id: Ice148bb84ea1392ba7f969ea67de2080fcd140b8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189717
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8686924052489266433

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/983ff6c520f9703262d0c75d8038f2e6b9b0c701
  983ff6c (ovsienko@google.com)
      depot_tools: unify format folder for bots and developers.

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

R=borenet@google.com

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: Ibb8649c27000ffdb8aaad00cdf1ef578cdc69c4f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189719
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
https://chromium.googlesource.com/vulkan-deps.git/+log/ea5afb3f56cf..66b781cbf618

Also rolling transitive DEPS:
  https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/8d0044201984c645ef1d048a5c5a325b77a5146e..26fb01b92b00e4f40452d7c89494cf72a9f68a8f

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/vulkan-deps-skia-autoroll
Please CC brettos@google.com,skiabot@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win11-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE
Bug: None
Tbr: brettos@google.com
Change-Id: I8002c5299d5fc18e7c831bd6f4448f2b22309d52
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1190076
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
…o WebGPU

Change-Id: I5d4acd31a28019fba02d595896e97aaa94fab885
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189476
Reviewed-by: Kaylee Lubick <kjlubick@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Manual roll requested by robertphillips@google.com

https://dawn.googlesource.com/dawn.git/+log/3510e36c0125..5d5f225be2ed

2026-03-19 cwallez@chromium.org [YUV AHB] Factor state sync logic in CommandBufferVk.
2026-03-19 dawn-autoroll@skia-public.iam.gserviceaccount.com Roll DirectX Shader Compiler from 05de2c9fa9a4 to 21f060b7138e (1 revision)
2026-03-19 dawn-autoroll@skia-public.iam.gserviceaccount.com Roll Chromium from 97511f0e7c62 to 82da30b07f25 (724 revisions)
2026-03-19 dawn-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 459765ea146e to e65fb3bf6dc6 (16 revisions)
2026-03-19 dawn-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE from f7571cf4c526 to aef03d88aba5 (4 revisions)
2026-03-19 cwallez@chromium.org [YUV AHB] Store the full YCbCr info in SharedTextureMemoryContentsVk

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dawn-skia-autoroll
Please CC cwallez@google.com,robertphillips@google.com,senorblanco@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Dawn: https://bugs.chromium.org/p/dawn/issues/entry
To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Cq-Include-Trybots: skia/skia.primary:Build-Ubuntu24.04-Clang-x86_64-Debug-Graphite_Dawn_Vulkan;skia/skia.primary:Test-Mac14-Clang-MacMini9.1-GPU-AppleM1-arm64-Debug-All-ASAN_Graphite_Dawn_Metal;skia/skia.primary:Test-Win11-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Graphite_Dawn_D3D12;skia/skia.primary:Test-Win11-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Graphite_Dawn_D3D11
Bug: None
Tbr: senorblanco@google.com,robertphillips@google.com
Change-Id: I94f8109790344398b3cee9a6a4e56f486ef58efd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189731
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Bot-Commit: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Change-Id: I20fca4e1945f9f9afe73fb04610d1632aa757c86
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1190336
Commit-Queue: Alexis Cruz-Ayala <alexisdavidc@google.com>
Reviewed-by: Alexis Cruz-Ayala <alexisdavidc@google.com>
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
* This CL fixes extension mismanagement issues and includes updates for clarity and style modernization in the touched areas (verified by confirming that VK_KHR_driver_properties extension is included as expected after previously being inadvertently excluded).

The issue:
* This is a follow-up to the landed change "Remove redundant or outdated extension usage in Vulkan tests" (https://skia-review.git.corp.google.com/c/skia/+/1174856), which exposed an issue with our usage of VulkanPreferredFeatures where we would pass in only the list of extensions the tests want to enable. Instead, we should be providing the list of all *available* extensions on the device.

* This misuse, combined with TestUtils removing extension names that should be redundant (i.e. already checked for in VulkanPreferredFeatures), led to certain key extensions/features no longer being utilized. Notably, this included VK_KHR_driver_properties. This meant driver correctness workarounds could not be enabled, which also (likely artificially) led to perf improvements.

Anticipated impact of this fix:
* This change is anticipated to trigger perf regressions from the current state. In reality, we should just be returning to baseline performance just before the extension removal CL landed.

* Once this lands and we get perf numbers, I plan to determine whether actually not enabling certain extensions would get us performance wins without encountering driver correctness issues.

Bug: b/487695539
Change-Id: Idef9ac665485a50b6bd032d5138855f359f7858d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1181116
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Nicolette Prevost <nicolettep@google.com>
Appending simple shapes ends up calling addRaw, which calls incReserve,
which in turn always reserves exact storage size.

Reserving an exact size prevents storage buffer overallocation, but it
also causes pathological behavior where we end up reallocating on every
append.

Update incReserve to use reserve() instead of reserve_exact(), to match
previous SkPathRef behavior.  This addresses the pathological perf
issue.

In some cases (when the final counts are known), exact allocations are
desirable.  Add an explicit reserve option to addRaw, to allow call
sites to opt in to exact allocations as needed.

Bench before:

min	median	mean	max	bench
115ms	115ms	116ms	120ms	pathbuilder_many_circles
115ms	115ms	115ms	116ms	pathbuilder_many_ovals
38.3ms	38.5ms	38.4ms	38.6ms	pathbuilder_many_rrects
38ms	38.3ms	38.3ms	38.5ms	pathbuilder_many_rects


Bench after:

min	median	mean	max	bench
1.16ms	1.16ms	1.17ms	1.2ms	pathbuilder_many_circles
1.12ms	1.15ms	1.15ms	1.18ms	pathbuilder_many_ovals
677µs	712µs	699µs	715µs	pathbuilder_many_rrects
614µs	653µs	640µs	666µs	pathbuilder_many_rects

Bug: 493156315
Change-Id: I169459b29f9c25fb0309de4c5700bc5197ea695a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1189676
Commit-Queue: Florin Malita <fmalita@google.com>
Reviewed-by: Kaylee Lubick <kjlubick@google.com>
kjlubick and others added 21 commits April 28, 2026 05:59
…tack

Consider an sksl snippet like:
```
half4 main(float2 xy) {
    float4 v = float4(xy.x, -1.0, -2.0, -3.0);
    v = abs(v);
    return half4(v);
}
```

this could be turned into (unoptimized) instructions like [1]
```
store_src_rg                   xy = src.rg
init_lane_masks                CondMask = LoopMask = RetMask = true
copy_slot_unmasked             v(0) = xy(0)
copy_constant                  v(1) = 0xBF800000 (-1.0)
copy_constant                  v(2) = 0xC0000000 (-2.0)
copy_constant                  v(3) = 0xC0400000 (-3.0)
copy_4_slots_unmasked          $0..3 = v            # unnecessary
bitwise_and_imm_4_ints         $0..3 &= 0x7FFFFFFF
copy_4_slots_unmasked          v = $0..3
load_src                       src.rgba = $0..3
```
( the bitwise_and_imm_4_ints instruction is the abs() part, masking
off the sign bit)

We can optimize cases where we push to the stack (e.g.
the copy_4_slots_unmasked), do an operation (the &=) and then
pop the value off the stack into just doing the operation w/o
involving the stack. (We might have to push the result to the
stack for further use).
```
...
copy_constant                  v(3) = 0xC0400000 (-3.0)
bitwise_and_imm_4_ints         v &= 0x7FFFFFFF
copy_4_slots_unmasked          $0..3 = v
load_src                       src.rgba = $0..3
```

There was a bug in the optimization where we removed *all* the
slots for an instruction (4 in this case because it's a float4)
even though the call was discard_stack(1). This would be followed
up by a call to discard_stack(3) (the remainder of the previous
instruction's stack) and we'd underflow the stack.

Problematic sksl:
```
half4 main(float2 xy) {
  float4 v;
  v.x += xy.x;
  (v = abs(v)).xyz;  # drop 1 channel (the .w)
  return half4(v);
}
# This was in the output
bitwise_and_imm_4_ints         v &= 0x7FFFFFFF
copy_4_slots_unmasked          ExternalPtr(0..3) = v
load_src                       src.rgba = ExternalPtr(0..3)
```

where ExternalPtr is referring to memory outside any variables,
uniforms, or the temporary stack. Yikes! I'll keep that in mind
for the future.

Anyway, for the fix, we'll only remove N slots if the previous
call was N slots wide.

[1] e.g. bazel build //tools/skslc && bazel-bin/tools/skslc/skslc input.sksl output.skrp

Bug: 500080194
Fixed: 507053173
Change-Id: Ib43c62dbec9a2c1d03c2d4960a2925b131504550
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1218502
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Florin Malita <fmalita@google.com>
(cherry picked from commit 2b94912)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1219879
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
Previously (before https://skia-review.git.corp.google.com/c/skia/+/1172916)
DawnCaps was validating the planar aspect for the 420 yuv formats, but
ignored the 422 and 444 formats (implicitly treating them as valid).

After the above CL, is_valid_view became stricter, expecting that if it
encountered a texture view with a planar aspect, it would go through the
switch statement; anything skipping the switch would then be a regular
texture or an external texture (either case expecting the All aspect).

This adds the 422 and 444 wgpu::TextureFormats to the switch
statement so that they get validated as well. I confirmed that this
fixes the display of HEVC video in Chrome.

Bug: 504680933
Fixed: 507069055
Change-Id: Id9f1b4853a28588aeb8eee8d80ce39f4b4d9db1a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1218120
Commit-Queue: Thomas Smith <thomsmit@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Thomas Smith <thomsmit@google.com>
(cherry picked from commit bd51184)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1221017
Since SkRuntimeImageFilter doesn't create its runtime shaders until
actually evaluating the image filter, SkRuntimeShader's CreateProc
was not being reached; it must be responsible for validating allowSkSL.

Updates the unit test to confirm that all sources of runtime effects
in drawables are detected when allowSkSl is false.

Bug: 502636904
Fixed: 511231535
Change-Id: I391ba2608010431429ac3e3c03e106f380304edb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1214636
Reviewed-by: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Jorge Betancourt <jmbetancourt@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
(cherry picked from commit 3150bdd)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1230739
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Thomas Smith <thomsmit@google.com>
Reviewed-by: Thomas Smith <thomsmit@google.com>
I added some logging to SkOpCoincidence::fixUp and ::release and,
with the new test case (which has multiple coincidences [1]), observed

```
fixUp: release(0x...7378, 0x...7378)
release: head_arg=0x...7378, remove=0x...7378, global fHead=...7378
release: updated global fHead to 0x...72b8
fixUp: after release global fHead=0x...72b8
fixUp: release(0x...7378, 0x...6ec8)
```

As per the linked bug, this leads to a faulty state because the
old head pointer 0x...7378 is being used after it was "released".
I could not get ASAN to fire on this but it is worth fixing for
correctness and consistency.

My change fixes that particular issue and adds some asserts to avoid
this happening again.

I also rewrote some do while loops to
avoid iffy behavior where we were releasing coin and then for
the next iteration still calling coin->next(). This worked because
we had an SkArenaAlloc and that memory wasn't "fully" released.

[1] a coincidence is an overlap between two path segments that
lasts for more than a single point. e.g. two squares sharing an edge.

Bug: 513001309
Fixed: 514925954
Change-Id: Ie3f6cea575acf9575e984b2b0d2eb788bb4b2052
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1238176
Reviewed-by: Thomas Smith <thomsmit@google.com>
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
(cherry picked from commit 33b70be)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1240537
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
Commit-Queue: Thomas Smith <thomsmit@google.com>
Follow-up to https://review.skia.org/1209996

Bug: 499152771
Fixed: 514923404
Change-Id: I487f64d92aa7177a84c1754e275852373a3cc40e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1219717
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
(cherry picked from commit 8ac48d9)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1240536
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
Commit-Queue: Thomas Smith <thomsmit@google.com>
Reviewed-by: Thomas Smith <thomsmit@google.com>
Bug: 500393328
Fixed: 514924430
Bug: b/500393328
Change-Id: I35ad93eaba08fcb4c0896993ff857902622581a0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1217456
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
(cherry picked from commit 04ff020)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1241018
Bug: 514063977
Fixed: 514927047
Change-Id: I03ccdf8224f6d6413c4632adf1d75216d8093e81
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1238257
Commit-Queue: Thomas Smith <thomsmit@google.com>
Reviewed-by: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
(cherry picked from commit d93793d)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1241057
Bug: 513972075
Fixed: 515275773
Change-Id: Ieeaf92c87343aa328479302d9cffeb36b5b0c8e4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1238159
Auto-Submit: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
(cherry picked from commit 3471ebf)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1242276
Commit-Queue: Greg Daniel <egdaniel@google.com>
I found the ES 2 spec [1] helpful for reference here.

The calculate_count_neq_int is not strictly necessary (I was unable
to find a case that tricked the existing floats with ints), but
I like the refactoring and it mirrors the gt/lt cases nicely.

[1] https://registry.khronos.org/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf

Change-Id: I0b9117f347e4b7d5d336de0f14337b9bec510ff2
Bug: 513337118
Fixed: 515275385
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1236656
Commit-Queue: Florin Malita <fmalita@google.com>
Reviewed-by: Florin Malita <fmalita@google.com>
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
(cherry picked from commit 5f4f454)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1242039
I was unable to make a test case that caused an overflow
and didn't timeout, but I think the possibility exists
for both.

This removes that, adds a few defensive asserts, and
makes one assert actually checked at runtime, just to be safe.

Change-Id: I4ce112624cb346ac7597466ac9c78402c5061e1c
Bug: 513973560
Fixed: 515275615
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1239556
Reviewed-by: Thomas Smith <thomsmit@google.com>
(cherry picked from commit 7c9ffcb)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1242040
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Florin Malita <fmalita@google.com>
Bug: 514017326
Fixed: 515628358
Change-Id: I9425c1f86aa8762333ba72b4ba30f5a056cdbfa9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1239738
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
(cherry picked from commit 43f969a)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1243596
Reviewed-by: Thomas Smith <thomsmit@google.com>
Commit-Queue: Thomas Smith <thomsmit@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Original change's description:
> Report and handle failure for inlineUpload(...) calls
>
> * The bug associated with this change called out that we should not attempt to perform an upload on an externally-owned secondary command buffer.
>
> * Exiting early does not appropriately signal that an upload failed, so modify `GrOpsRenderPass::inlineUpload(...)` base class to return a bool indicating success or failure. Upon failure, do not attempt the associated immediate draw call and report that the draw failed.
>
> * To maintain current behavior, have `inlineUpload(...)` return true in nearly all cases except that identified in the associated bug.
>
> Bug: b/513948178
> Change-Id: Idfeb2527062818e5fa63a38112dd1c26f7847998
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1239496
> Commit-Queue: Nicolette Prevost <nicolettep@google.com>
> Auto-Submit: Nicolette Prevost <nicolettep@google.com>
> Commit-Queue: Greg Daniel <egdaniel@google.com>
> Reviewed-by: Greg Daniel <egdaniel@google.com>

(cherry picked from commit defc3a5)

Bug: 515628467,b/513948178
Change-Id: Idfeb2527062818e5fa63a38112dd1c26f7847998
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1245676
Auto-Submit: Chrome Cherry Picker <chrome-cherry-picker@chops-service-accounts.iam.gserviceaccount.com>
Commit-Queue: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Other than these two sites, kForInputAttachment and
kForNonCoherentAdvBlend are not treated as mutually exclusive.

When using only == kForInputAttachment, the layout and bindings wouldn't
apply correctly for a renderpass that was using both forms of self
dependencies.

Bug: 512995705
Fixed: 515953625
Change-Id: I40aff60a9209be77e6743d7a2f73dac46985507a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1242516
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Nicolette Prevost <nicolettep@google.com>
(cherry picked from commit 544395a)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1245716
This skips recording draws with more than 1M color stops, primarily as
a way to avoid worrying about overflowing during intermediate
calculations. We can increase it if necessary, but hopefully this is
healthy enough no one is trying to make shaders this large.

This also skips recording draws when the FSM has maxed out its
allocatable size for a single buffer. Given how large that is,
we shouldn't encounter it in the wild but this lets us fail semi
gracefully. If needed, we can revisit by either flushing the entire
Recorder when reaching a limit, or by allowing a recording to use
multiple buffers

Bug: 515467789
Fixed: 517017693
Change-Id: Ie032f9ed35b6cf0316a18b32bb36e3ec3c047097
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1243936
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Thomas Smith <thomsmit@google.com>
(cherry picked from commit 5ecba66)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1247056
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Thomas Smith <thomsmit@google.com>
This also removes the unique ID from SkShaderBase as the FSM was the
only system that relied on it.

Bug: 512986879
Fixed: 517018045
Change-Id: Icd43c13a75a1cdd212eea2b9db03033d13be47f4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1243937
Reviewed-by: Thomas Smith <thomsmit@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
(cherry picked from commit 2e4a568)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1247097
Original change's description:
> [ganesh] Use submitted proc to confirm async reads were issued
>
> Ganesh's finish proc doesn't have a status, but if flushSurface()
> failed for unrelated reasons (due to queued operations before the
> asyncRead was requested), the finish proc would be executed without
> actually submitting the copy command to the GPU.
>
> This tracks whether or not it was successfully submitted and makes
> that a requirement before handing the result to the original callback.
> The code is updated to more closely match Graphite's structure,
> including unmapping any buffers on failure.
>
> Bug: 513340227
> Change-Id: If2998749a754d114b70e26e312a9a4cb08ea20e2
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1242617
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> Reviewed-by: Greg Daniel <egdaniel@google.com>

(cherry picked from commit e6c23e3)

Bug: 517405773,513340227
Change-Id: If2998749a754d114b70e26e312a9a4cb08ea20e2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1247658
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Chrome Cherry Picker <chrome-cherry-picker@chops-service-accounts.iam.gserviceaccount.com>
Original change's description:
> Remove serialization of drawables from SkCustomTypeface
>
> We added it here https://review.skia.org/540736 but ended up not
> using it for Skottie (only paths). This will help reduce the attack
> surface of deserializing fonts.
>
> Change-Id: Id890c3d0f56f11377563f795f9bfede5a7d84d66
> Bug: 513820666
> Fixed: 513820666
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1245976
> Reviewed-by: Alexis Cruz-Ayala <alexisdavidc@google.com>
> Auto-Submit: Kaylee Lubick <kjlubick@google.com>
> Commit-Queue: Kaylee Lubick <kjlubick@google.com>
> Commit-Queue: Alexis Cruz-Ayala <alexisdavidc@google.com>

(cherry picked from commit 9da67e2)

Bug: 517793645,513820666,513820666
Change-Id: Id890c3d0f56f11377563f795f9bfede5a7d84d66
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1249196
Commit-Queue: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Chrome Cherry Picker <chrome-cherry-picker@chops-service-accounts.iam.gserviceaccount.com>
…n reset"

* `getMappedUniformBuffer` was changed after M148 but before M149. This caused comments in the unit test to be wrong, causing M148 cherry pick to fail CQ.

* Change the unit test to instead use `getMappedIndexBuffer`, which is stable across the relevant releases, and has been confirmed to trigger the bug.

* These changes purely affect the unit test and not the fix itself.

This reverts commit c329e87.

Original change's description:
> Revert "[graphite] BufferSubAllocator respects failed mapping on reset"
>
> This reverts commit e7bff78.
>
> Fails clang-tidy
>
> Original change's description:
> > [graphite] BufferSubAllocator respects failed mapping on reset
> >
> > Bug: b/516981393
> > Change-Id: If6837e26ee520ad34c8df46a34850220ec5b538c
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1247536
> > Commit-Queue: Thomas Smith <thomsmit@google.com>
> > Reviewed-by: Michael Ludwig <michaelludwig@google.com>
>
> Bug: b/516981393
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Change-Id: I8cf69a8ba2ff318aab65033af821954e4493e5cb
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1249556
> Auto-Submit: Thomas Smith <thomsmit@google.com>
> Commit-Queue: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>

Bug: 516981393
Fixed: 517794115
Change-Id: I3688a446d9042ffdb79a6c91d73f72bd5016716e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1249557
Commit-Queue: Thomas Smith <thomsmit@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
(cherry picked from commit 04b084c)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1249856
Reviewed-by: Kaylee Lubick <kjlubick@google.com>
Importantly, we don't want typefaces or textblobs in
SkPictureBackedGlyphDrawable. In fact, we can look at
the code used to make the drawables by our various backends
[1][2][3][4] and see we only draw paths and use paints. Thus, we can
restrict deserializing these to just those (and the helper tags).

The SVG fonts could be a bit more complex [5] but chromium doesn't
use those (SkGraphics::SetOpenTypeSVGDecoderFactory is never called)

See also http://graphviz/#57cc93d0c3c73546055bec64fa8e27cb

[1] https://skia.googlesource.com/skia/+/9da67e212e59fbe4f144a92315ca6f8b876c9c01/src/ports/SkFontHost_FreeType_common.cpp#1567
[2] https://skia.googlesource.com/skia/+/9da67e212e59fbe4f144a92315ca6f8b876c9c01/src/ports/SkFontHost_FreeType_common.cpp#1078
[3] https://skia.googlesource.com/skia/+/9da67e212e59fbe4f144a92315ca6f8b876c9c01/src/ports/SkScalerContext_win_dw.cpp#677
[4] https://skia.googlesource.com/skia/+/9da67e212e59fbe4f144a92315ca6f8b876c9c01/src/ports/SkTypeface_fontations.cpp#1336

[4] https://skia.googlesource.com/skia/+/9da67e212e59fbe4f144a92315ca6f8b876c9c01/modules/svg/src/SkSVGOpenTypeSVGDecoder.cpp#160

Bug: 516457532
Fixed: 517794293
Change-Id: If852aac417e04f5574dd073138abbe74f792734d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1245617
Reviewed-by: Florin Malita <fmalita@google.com>
(cherry picked from commit f1b8ba8)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1249736
Owners-Override: Kaylee Lubick <kjlubick@google.com>
Commit-Queue: Alexis Cruz-Ayala <alexisdavidc@google.com>
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Alexis Cruz-Ayala <alexisdavidc@google.com>
Upstream merge of Google Skia chrome/m148 into mono/skia fork.

Conflicts resolved:
- src/gpu/graphite/mtl/MtlCaps.mm: Took upstream (no fork patches)
- src/utils/SkEventTracer.cpp: Took upstream (onExit atexit callback)
- include/utils/SkEventTracer.h: Took upstream (onExit comment)
- third_party/harfbuzz/BUILD.gn: Kept fork (harfbuzz 14.2.0 - fork-managed)
- DEPS: Kept fork pins for expat/freetype/harfbuzz/libjpeg-turbo/libpng/libwebp/VMA
- RELEASE_NOTES.md: Took upstream
- infra/bots/tasks.json: Took upstream
- modules/skcms/version.sha1: Took upstream

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
New color type inserted between kA16_float and kR16G16_float in m148.
Added R16_FLOAT_SK_COLORTYPE to sk_colortype_t enum and corresponding
static_assert to maintain enum value alignment.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Thomas Smith and others added 5 commits June 8, 2026 08:55
* Allow subRuns which are drawn with drawable or path rendering to exit gracefully instead of failing.

* Remove erroneous SFINAE

This reverts commit c480ba2.

Original change's description:
> Revert "Reconstruct subRun bounds from glyphs"
>
> This reverts commit f93ed13.
>
> Reason for revert: SkRemoteGlyphCacheTest failures and build failures
>
>          ../../../../../skia/tests/SkRemoteGlyphCacheTest.cpp:193:37: error: unused function template 'get_container_ptr' [-Werror,-Wunused-template]
>   193 | const sktext::gpu::SubRunContainer* get_container_ptr(const T& t) {
>       |                                     ^~~~~~~~~~~~~~~~~
> ../../../../../skia/tests/SkRemoteGlyphCacheTest.cpp:212:37: error: unused function template 'get_container' [-Werror,-Wunused-template]
>   212 | const sktext::gpu::SubRunContainer* get_container(T* slugImpl) {
>       |                                     ^~~~~~~~~~~~~
> 2 errors generated.
>
> and
>
>
>               ../../../../../skia/tests/SkRemoteGlyphCacheTest.cpp:660	Dst subrun is null for TransformedMaskSubRun [SkRemoteGlyphCache_SubRunBoundsReconstruction, OpenGL]
>
> Original change's description:
> > Reconstruct subRun bounds from glyphs
> >
> > * Reconstruct the bounds of a subRun after deserialization instead of packaging onto the VertexFiller.
> >
> > * An attacker could create a VertexFiller with creation bounds that did not contain its glyphs but were entirely contained within the current clip, enabling to the glyphs to ignore the creation bounds clip and sample from stale scratch textures
> >
> > Bug: b/513948227
> > Change-Id: Ib4902657e6a50dd5675db4d73a1576b77c4ce88e
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1239916
> > Commit-Queue: Thomas Smith <thomsmit@google.com>
> > Reviewed-by: Michael Ludwig <michaelludwig@google.com>
>
> Bug: b/513948227
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Change-Id: Ide85466e17b870d2cc738bd25602d6cbf65d332b
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1249276
> Auto-Submit: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>

Bug: 520918735
Change-Id: I7f5bff928f1b58830075c1ec6ca15600d49519c9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1249536
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Thomas Smith <thomsmit@google.com>
(cherry picked from commit b854499)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1257318
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Thomas Smith <thomsmit@google.com>
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
The chrome/m148 upstream merge changed gn/toolchain/BUILD.gn in three ways
that break SkiaSharp's native builds. Re-apply the downstream patches while
keeping the genuine upstream improvements (the current_os refactor and the
wasm solink -sSIDE_MODULE=1 flag).

1. WASM emsdk activate dependency
   Upstream added `deps = [ "//gn/toolchain/emsdk:activate(...)" ]` to the
   wasm toolchain to provision the DEPS-bundled emsdk via bin/activate-emsdk.
   SkiaSharp supplies its own version-pinned emsdk through skia_emsdk_dir and
   skips the DEPS emsdk entirely (GIT_SYNC_DEPS_SKIP_EMSDK=1), so the activate
   action fails with "emsdk.py: No such file or directory". Remove the dep.

2. WASM static/shared library suffix
   Upstream flipped the wasm alink/solink output extension from ".a.wasm"/
   ".so.wasm" to ".wasm.a"/".wasm.so". SkiaSharp's standalone wasm build
   (native/wasm/build.cake) globs "*.a.wasm" to merge the static archives, so
   the flip silently produced a near-empty libSkiaSharp.a and broke the
   HarfBuzz copy. Restore the ".a.wasm"/".so.wasm" suffixes.

3. Apple toolchain platform set (Mac Catalyst / watchOS)
   Upstream replaced `is_mac || is_ios` with explicit
   `current_os == "mac"/"ios"/"tvos"`, dropping maccatalyst and watchos (both
   are part of is_ios in gn/BUILDCONFIG.gn). Without them, Mac Catalyst static
   libs fall through to the BSD `ar @rspfile` branch, which macOS ar does not
   support ("ar: @libzlib.a.rsp: No such file or directory"). Introduce an
   _is_apple helper covering the full set and use it for every Apple branch.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
LCD text samples the glyph at 1/3 offsets derived from screen-space
derivatives of its local coords. Each SDF atlas only has 2px of
transparent padding that these offsets can read into.

If an LCD slug was downscaled after creating its masks by a scale
of ~0.2, its R and B samples could extend into adjacent glyphs.
At such a downscaling, the SDF is already fairly low quality because
it's not sampled by mipmaps. IMO switching to grayscale SDF looked
better because it approached smooth gray vs. randomized colors.

This applies to both Ganesh and Graphite, although Graphite is able to
continue to use LCD with SDFs when there's perspective. Since Ganesh
only uses SkMatrix and not Transform, there's no easy way to estimate
the perspective scale factors applied over the slug's bounding box.

I tested by modifying GM_slug to use LCD and SDF fonts and interacted
with viewer's dynamic transforms to trigger the switch between modes.

Bug: 516915337
Change-Id: Idfa838cfe4ff9443bf2c15078ff52d34a5a5c8f3
Fixed: 519445030
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1251156
Reviewed-by: Thomas Smith <thomsmit@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
(cherry picked from commit 95dbfa2)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1256456
Commit-Queue: Thomas Smith <thomsmit@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
This shouldn't happen during normal use [1] but if the data
is corrupted, there are some assumptions that can can cause
issues, like the ones linked in the bug.

This rejects those and turns one assert into an actual runtime
check to provide defense in depth.

[1] https://github.com/google/skia/blob/9eecbdc30f7da675edab96974b23174a9d521e0c/src/text/gpu/SubRunContainer.cpp#L1578-L1581

Bug: 520113415
Fixed: 520918735
Change-Id: I6ec23df9a23ea588fa89f7a62dc1f197fe3905ff
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1256016
Commit-Queue: Kaylee Lubick <kjlubick@google.com>
Reviewed-by: Thomas Smith <thomsmit@google.com>
(cherry picked from commit a145861)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1257077
Auto-Submit: Kaylee Lubick <kjlubick@google.com>
Cherry-pick: [m148] Reject Slugs that have creationMatrix with perspective
  - Fixes corrupted data handling in text Slug deserialization
  - Adds runtime checks to prevent issues from unexpected perspective matrices

Upstream commit: a48e911

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@mattleibow

Copy link
Copy Markdown
Collaborator Author

Closing as superseded by the m148 update in #4125 (submodule #250, already merged). This auto-generated skia-sync PR is redundant.

@mattleibow mattleibow closed this Jun 11, 2026
@mattleibow mattleibow deleted the skia-sync/m148 branch June 11, 2026 11:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.