Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f42e74f7147c7a1d2dfc69021d103dcd85ff9c03
      
https://github.com/WebKit/WebKit/commit/f42e74f7147c7a1d2dfc69021d103dcd85ff9c03
  Author: Nikolas Zimmermann <[email protected]>
  Date:   2026-09-04 (Fri, 04 Sep 2026)

  Changed paths:
    M LayoutTests/platform/glib/TestExpectations
    M Source/WebCore/platform/graphics/skia/SkiaBackingStore.cpp
    M Source/WebCore/platform/graphics/skia/SkiaBackingStore.h
    M Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.cpp
    M 
Source/WebCore/platform/graphics/skia/SkiaCompositingLayerImageSetBatch.cpp
    M Source/WebCore/platform/graphics/skia/SkiaCompositingLayerImageSetBatch.h
    M Source/WebCore/platform/graphics/skia/SkiaUtilities.h

  Log Message:
  -----------
  [GTK][WPE] Skia compositor: backing store tiles ignore the layer transform 
when picking sampling options
https://bugs.webkit.org/show_bug.cgi?id=323260

Reviewed by Carlos Garcia Campos.

Layer tiles are always drawn with SkFilterMode::kNearest. That is fine as long 
as
each pixel of the tile ends up on exactly one screen pixel, at the same size and
without any rotation. Once the layer is shifted by a fraction of a pixel, every
screen pixel still takes its color from a single source pixel, rather than from 
a
mix of the two it now falls inbetween. Edges lose their smoothness and visibly
"snap" from one pixel to the next. TextureMapper does not have this problem,
because its GL path always uses GL_LINEAR.

The fix is to choose nearest or linear for each draw, depending on whether the
transform still maps tile pixels 1:1 onto screen pixels. Layers whose content
is a single image, already performed this test before they are drawn, so move
that functionality into a shared place and use it for backing store tiles as 
well.
Audit all other places that hardcoded linear vs. nearest and fast vs
strict srcRect constraint.

imported/w3c/web-platform-tests/css/css-animations/transform-animation-under-large-scale.html
loses its glib specific [ Pass ] override and falls back to the generic 
ImageOnlyFailure of
webkit.org/b/225407. The test scales a layer by 100 without re-rasterizing its 
contents at
that scale, since GraphicsLayerCoordinated keeps the root relative scale factor 
updates
turned off. Nearest sampling replicated each of the two content rows into a 
sharp block,
which happened to match the reference. Linear sampling blurs the magnified 
tile, the same
result all other ports produce.

Linear sampling reaches past the source rect, which only matters for a tile 
whose
texture is padded past its logical size (super-tiled textures) - keep
that into account when deciding which sampling strategy to use.

* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/platform/graphics/skia/SkiaBackingStore.cpp:
(WebCore::SkiaBackingStore::processPendingTileUpdates):
(WebCore::SkiaBackingStore::samplingOptionsForMatrix const):
(WebCore::SkiaBackingStore::paintToCanvas):
(WebCore::SkiaBackingStore::Tile::isPadded const):
* Source/WebCore/platform/graphics/skia/SkiaBackingStore.h:
(WebCore::SkiaBackingStore::requiresStrictSourceConstraint const):
* Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.cpp:
(WebCore::SkiaCompositingLayer::paintContents):
(WebCore::SkiaCompositingLayer::paintWithIntermediateSurface):
(WebCore::SkiaCompositingLayer::paintWithMaskAndBackdrop):
* Source/WebCore/platform/graphics/skia/SkiaCompositingLayerImageSetBatch.cpp:
(WebCore::SkiaCompositingLayerImageSetBatch::samplingOptionsForImage const):
(WebCore::SkiaCompositingLayerImageSetBatch::samplingOptionsForBackingStore 
const):
(WebCore::SkiaCompositingLayerImageSetBatch::addImageSet):
(WebCore::SkiaCompositingLayerImageSetBatch::addImage):
(WebCore::SkiaCompositingLayerImageSetBatch::imageRequiresLinearSampling 
const): Deleted.
* Source/WebCore/platform/graphics/skia/SkiaCompositingLayerImageSetBatch.h:
(WebCore::SkiaCompositingLayerImageSetBatch::planRestrictedDraw):
(WebCore::SkiaCompositingLayerImageSetBatch::drawOutsideBatch):
* Source/WebCore/platform/graphics/skia/SkiaUtilities.h:
(WebCore::SkiaUtilities::samplingOptionsForMatrix):
(WebCore::SkiaUtilities::samplingOptionsForImageDraw):

Canonical link: https://commits.webkit.org/320490@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to