Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 893cb75bec40fc7ef8e4ea2d63a81b9b1de137e4
https://github.com/WebKit/WebKit/commit/893cb75bec40fc7ef8e4ea2d63a81b9b1de137e4
Author: Kimmo Kinnunen <[email protected]>
Date: 2026-09-08 (Tue, 08 Sep 2026)
Changed paths:
M LayoutTests/TestExpectations
M LayoutTests/ipc/cocoa/indexed-colorspace-null-inner-crash.html
M LayoutTests/ipc/convert-to-luminance-mask-float16.html
M LayoutTests/ipc/create-image-buffer-crash.html
M
LayoutTests/ipc/dynamic-content-scaling-display-list-during-prepare-for-display.html
M LayoutTests/ipc/empty-svgfilterrenderer-expression-crash.html
M LayoutTests/ipc/feComponentTransfer-empty-tableValues-accelerated.html
M LayoutTests/ipc/fecolormatrix-type-values-mismatch-crash.html
M LayoutTests/ipc/getpixelbuffer-layerbacking-heap-disclosure.html
M LayoutTests/ipc/insufficient-svgfilter-inputs-crash.html
M LayoutTests/ipc/invalid-feConvolveMatrix-crash.html
M LayoutTests/ipc/invalid-svgfilter-expression-crash.html
M LayoutTests/ipc/mark-surfaces-volatile-during-prepare-for-display.html
M LayoutTests/ipc/move-to-image-buffer-cross-thread-font-crash.html
M LayoutTests/ipc/nested-display-list-draw-control-part-crash.html
M LayoutTests/ipc/restore-empty-stack-crash.html
M Source/WebCore/platform/graphics/ArrayPixelBuffer.cpp
M Source/WebCore/platform/graphics/ImageBuffer.cpp
M Source/WebCore/platform/graphics/ImageBuffer.h
M Source/WebCore/platform/graphics/NativeImage.h
M Source/WebCore/platform/graphics/PixelBuffer.cpp
M Source/WebCore/platform/graphics/PixelBufferConversion.cpp
M Source/WebCore/platform/graphics/PixelFormat.cpp
M Source/WebCore/platform/graphics/PixelFormat.h
M Source/WebCore/platform/graphics/TypedArrayPixelBuffer.cpp
M Source/WebCore/platform/graphics/TypedArrayPixelBuffer.h
M Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLE.cpp
M Source/WebCore/platform/graphics/cairo/NativeImageCairo.cpp
M Source/WebCore/platform/graphics/cg/NativeImageCG.cpp
M Source/WebCore/platform/graphics/cocoa/IOSurface.h
M Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp
M Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp
M Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.cpp
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
M Tools/TestWebKitAPI/Tests/WebCore/NativeImageTests.cpp
M Tools/TestWebKitAPI/Tests/WebCore/PixelBufferConversionTests.cpp
Log Message:
-----------
Add PixelFormat::RGBX to support opaque RGB pixel data
https://bugs.webkit.org/show_bug.cgi?id=323331
rdar://186573422
Reviewed by Gerald Squelart and Sam Weinig.
Makes it possible to represent currently transferred pixel data with
PixelFormat instead of using platform specific types such as
CGBitmapInfo.
Now PixelBufferFormat can fully define the pixel format, with RGBX
marking "skip alpha" for RGB pixel data. Visible in
NativeImage::create(Ref<PixelBuffer>&&) constructor which does not need
redundant hasAlpha parameter.
In this commit, used in
GraphicsContextGLANGLE::readPixelsForPaintResults to capture
alpha=false WebGL context drawing/compositing buffer to NativeImage
on Skia platform.
Simplify PixelBufferConversion.cpp implementation to not have errorprone
template table generation + compiler workarounds. ACCELERATE path
does not need templates at all, since there is no innerloop to optimize.
All function call variants end up if'ed similarly as when templates
removed. Unaccelerated path uses simple linear 16-way switch instead of
64 cell compiletime template table that contained duplicate entries and
error cases (zeroing).
To simplify the "can use" conditions for Accelerate, implement
opaque -> non-opaque 8888 transfer via the specialized function that
sets the alpha to 255. This way there's no need to convoluted ifs
about source opaque needing to go to AnyToAny + comments explaining
this. This is appropriate for now added RGBX as well as before BGRX.
Tests: Tools/TestWebKitAPI/Tests/WebCore/NativeImageTests.cpp
Tools/TestWebKitAPI/Tests/WebCore/PixelBufferConversionTests.cpp
* Source/WebCore/platform/graphics/ArrayPixelBuffer.cpp:
(WebCore::ArrayPixelBuffer::tryCreate):
* Source/WebCore/platform/graphics/NativeImage.h:
* Source/WebCore/platform/graphics/PixelBuffer.cpp:
(WebCore::PixelBuffer::supportedPixelFormat):
* Source/WebCore/platform/graphics/PixelBufferConversion.cpp:
(WebCore::canCopyPixelsBetweenFormats):
(WebCore::copyImagePixels):
(WebCore::makeVImageCGImageFormat):
(WebCore::convertImagePixelsAcceleratedDifferentFormats):
(WebCore::ConvertImagePixelsAcceleratedFunctions::selectFunction):
(WebCore::isSupportedConversionFormat):
(WebCore::convertImagePixels):
(WebCore::convertImagePixelsAcceleratedMatchingSize):
(WebCore::platformConvertImagePixels):
(WebCore::convertImagePixelsUnacceleratedFunction):
(WebCore::convertImagePixelsUnacceleratedSelectAlphaFormats):
(WebCore::hasEnoughBytesForConversion):
(WebCore::canCopyPixels):
(WebCore::CountPackedEnums::static_assert): Deleted.
(WebCore::ConvertImagePixelsFunctionTable::ConvertImagePixelsFunctionTable):
Deleted.
(WebCore::ConvertImagePixelsFunctionTable::invoke const): Deleted.
(WebCore::ConvertImagePixelsFunctionTable::selectTableFunction): Deleted.
(WebCore::ConvertImagePixelsFunctionTable::createTableDepth4): Deleted.
(WebCore::ConvertImagePixelsFunctionTable::createTableDepth3): Deleted.
(WebCore::ConvertImagePixelsFunctionTable::createTableDepth2): Deleted.
(WebCore::ConvertImagePixelsFunctionTable::createTableDepth1): Deleted.
(WebCore::ConvertImagePixelsFunctionTable::createTable): Deleted.
(WebCore::convertImagePixelsAccelerated): Deleted.
(WebCore::ConvertImagePixelsUnacceleratedFunctions::selectFunction): Deleted.
(WebCore::convertImagePixelsUnaccelerated): Deleted.
* Source/WebCore/platform/graphics/PixelFormat.cpp:
(WebCore::operator<<):
* Source/WebCore/platform/graphics/PixelFormat.h:
(WebCore::convertToContentsFormat):
(WebCore::pixelFormatIsOpaque):
(WebCore::allowExtendedColorSpace):
* Source/WebCore/platform/graphics/TypedArrayPixelBuffer.cpp:
* Source/WebCore/platform/graphics/TypedArrayPixelBuffer.h:
* Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLE.cpp:
(WebCore::GraphicsContextGLANGLE::readPixelsForPaintResults):
(WebCore::flipPixelBufferRows):
(WebCore::GraphicsContextGLANGLE::copyNativeImage):
* Source/WebCore/platform/graphics/cairo/NativeImageCairo.cpp:
(WebCore::NativeImage::create):
* Source/WebCore/platform/graphics/cg/NativeImageCG.cpp:
(WebCore::alphaInfoForAlphaLast):
(WebCore::alphaInfoForAlphaFirst):
(WebCore::NativeImage::create):
* Source/WebCore/platform/graphics/cocoa/IOSurface.h:
(WebCore::convertToIOSurfaceFormat):
* Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp:
(WebCore::VideoFrameGStreamer::createFromPixelBuffer):
* Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp:
(WebCore::NativeImage::create):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Tools/TestWebKitAPI/Tests/WebCore/NativeImageTests.cpp:
(TestWebKitAPI::isSupportedImagePixelFormat):
(TestWebKitAPI::fillTestPattern):
(TestWebKitAPI::AnyPixelBufferFormatTest::hasAlpha const):
(TestWebKitAPI::AnyPixelBufferFormatTest::alphaFormat const):
(TestWebKitAPI::AnyPixelBufferFormatTest::createTestPatternPixelBuffer const):
(TestWebKitAPI::TEST_P):
(TestWebKitAPI::anyPixelBufferFormatTestName):
(TestWebKitAPI::testedPixelFormats):
(TestWebKitAPI::AnyPixelBufferFormatTest::alphaMode const): Deleted.
* Tools/TestWebKitAPI/Tests/WebCore/PixelBufferConversionTests.cpp:
(TestWebKitAPI::TEST(PixelBufferConversionTests, convertImagePixels)):
(TestWebKitAPI::TEST(PixelBufferConversionTests, convertImagePixels2)):
(TestWebKitAPI::TEST(PixelBufferConversionTests,
convertImagePixelsFloat16ToAndFromByte)):
* LayoutTests/ipc/create-image-buffer-crash.html:
* Source/WebCore/platform/graphics/ImageBuffer.cpp:
(WebCore::ImageBuffer::supportedPixelBufferFormats):
(WebCore::ImageBuffer::getPixelBuffer const):
* Source/WebCore/platform/graphics/ImageBuffer.h:
* Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.cpp:
(WebKit::RemoteImageBuffer::getPixelBuffer):
Canonical link: https://commits.webkit.org/320656@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications