WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
WIP
bug-219468-20210205144840.patch (text/plain), 122.25 KB, created by
Said Abou-Hallawa
on 2021-02-05 14:48:41 PST
(
hide
)
Description:
WIP
Filename:
MIME Type:
Creator:
Said Abou-Hallawa
Created:
2021-02-05 14:48:41 PST
Size:
122.25 KB
patch
obsolete
>Subversion Revision: 272431 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index a76ab5edf8c54474e01aeabdd3bc55693a35da86..4550c0e65a2fc3d7ae634562482fa4a5a72386a6 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,82 @@ >+2021-02-05 Said Abou-Hallawa <said@apple.com> >+ >+ [GPU Process]: Implement SetState DisplayList item >+ https://bugs.webkit.org/show_bug.cgi?id=219468 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * inspector/InspectorCanvas.cpp: >+ (WebCore::InspectorCanvas::buildArrayForCanvasPattern): >+ * platform/graphics/GraphicsContext.cpp: >+ (WebCore::GraphicsContextState::GraphicsContextState): Deleted. >+ * platform/graphics/GraphicsContext.h: >+ (WebCore::GraphicsContextInlineState::GraphicsContextInlineState): >+ (WebCore::GraphicsContextState::GraphicsContextState): >+ * platform/graphics/Image.h: >+ * platform/graphics/Pattern.cpp: >+ (WebCore::Pattern::create): >+ (WebCore::Pattern::Pattern): >+ (WebCore::Pattern::setTileImage): >+ (WebCore::Pattern::tileImage const): >+ * platform/graphics/Pattern.h: >+ (WebCore::Pattern::encode const): >+ (WebCore::Pattern::decode): >+ * platform/graphics/cairo/CairoOperations.cpp: >+ (WebCore::Cairo::FillSource::FillSource): >+ * platform/graphics/cairo/PatternCairo.cpp: >+ (WebCore::Pattern::createPlatformPattern const): >+ * platform/graphics/cg/PatternCG.cpp: >+ (WebCore::Pattern::createPlatformPattern const): >+ * platform/graphics/displaylists/DisplayList.cpp: >+ (WebCore::DisplayList::DisplayList::shouldDumpForFlags): >+ (WebCore::DisplayList::DisplayList::append): >+ * platform/graphics/displaylists/DisplayListItemBuffer.cpp: >+ (WebCore::DisplayList::ItemHandle::apply): >+ (WebCore::DisplayList::ItemHandle::destroy): >+ (WebCore::DisplayList::ItemHandle::safeCopy const): >+ * platform/graphics/displaylists/DisplayListItemType.cpp: >+ (WebCore::DisplayList::sizeOfItemInBytes): >+ (WebCore::DisplayList::isDrawingItem): >+ (WebCore::DisplayList::isInlineItem): >+ * platform/graphics/displaylists/DisplayListItemType.h: >+ * platform/graphics/displaylists/DisplayListItems.cpp: >+ (WebCore::DisplayList::SetInlineState::SetInlineState): >+ (WebCore::DisplayList::SetInlineState::apply const): >+ (WebCore::DisplayList::operator<<): >+ (WebCore::DisplayList::SetState::SetState): >+ (WebCore::DisplayList::SetState::apply const): >+ (WebCore::DisplayList::SetInlineFillGradient::SetInlineFillGradient): Deleted. >+ (WebCore::DisplayList::SetInlineFillGradient::gradient const): Deleted. >+ (WebCore::DisplayList::SetInlineFillGradient::apply const): Deleted. >+ (WebCore::DisplayList::SetInlineFillGradient::isInline): Deleted. >+ (WebCore::DisplayList::SetInlineFillColor::apply const): Deleted. >+ (WebCore::DisplayList::SetInlineStrokeColor::apply const): Deleted. >+ * platform/graphics/displaylists/DisplayListItems.h: >+ (WebCore::DisplayList::SetState::stateChange const): >+ (WebCore::DisplayList::SetState::strokePatternImageIdentifier const): >+ (WebCore::DisplayList::SetState::fillPatternImageIdentifier const): >+ (WebCore::DisplayList::SetState::encode const): >+ (WebCore::DisplayList::SetState::decode): >+ (WebCore::DisplayList::SetInlineFillColor::SetInlineFillColor): Deleted. >+ (WebCore::DisplayList::SetInlineFillColor::color const): Deleted. >+ (WebCore::DisplayList::SetInlineStrokeColor::SetInlineStrokeColor): Deleted. >+ (WebCore::DisplayList::SetInlineStrokeColor::color const): Deleted. >+ (WebCore::DisplayList::SetState::state const): Deleted. >+ * platform/graphics/displaylists/DisplayListRecorder.cpp: >+ (WebCore::DisplayList::containsOnlyInlineStateChanges): >+ (WebCore::DisplayList::Recorder::appendStateChangeItem): >+ (WebCore::DisplayList::Recorder::willAppendItemOfType): >+ * platform/graphics/displaylists/DisplayListRecorder.h: >+ * platform/graphics/displaylists/DisplayListReplayer.cpp: >+ (WebCore::DisplayList::applySetStateItem): >+ (WebCore::DisplayList::Replayer::applyItem): >+ * platform/graphics/filters/FETile.cpp: >+ (WebCore::FETile::platformApplySoftware): >+ * rendering/RenderLayerBacking.cpp: >+ (WebCore::patternForDescription): >+ * rendering/svg/RenderSVGResourcePattern.cpp: >+ (WebCore::RenderSVGResourcePattern::buildPattern): >+ > 2021-02-05 Chris Dumez <cdumez@apple.com> > > [GPUProcess] If the GPUProcess crashes during fullscreen playback, video pauses and exits fullscreen >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 2f9417e56f1d353af8fcde5f3461c113e37cbc30..be456b583c58f8fbff1584cb041383bab17349c6 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,18 @@ >+2021-02-05 Said Abou-Hallawa <said@apple.com> >+ >+ [GPU Process]: Implement SetState DisplayList item >+ https://bugs.webkit.org/show_bug.cgi?id=219468 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * GPUProcess/graphics/RemoteRenderingBackend.cpp: >+ (WebKit::RemoteRenderingBackend::decodeItem): >+ * Shared/WebCoreArgumentCoders.cpp: >+ (IPC::ArgumentCoder<ImageHandle>::encode): Deleted. >+ (IPC::ArgumentCoder<ImageHandle>::decode): Deleted. >+ * Shared/WebCoreArgumentCoders.h: >+ * WebProcess/GPU/graphics/RemoteImageBufferProxy.h: >+ > 2021-02-05 Kate Cheney <katherine_cheney@apple.com> > > ASSERTION FAILED: Completion handler should always be called under WebKit::VideoFullscreenManagerProxy::forEachSession >diff --git a/Source/WebCore/inspector/InspectorCanvas.cpp b/Source/WebCore/inspector/InspectorCanvas.cpp >index 0c85f8a83767966ba26b5c333ed60c01a50aa116..e5f2210ae98733e984ab584f6f9a3c847b5a8049 100644 >--- a/Source/WebCore/inspector/InspectorCanvas.cpp >+++ b/Source/WebCore/inspector/InspectorCanvas.cpp >@@ -1202,9 +1202,10 @@ Ref<JSON::ArrayOf<JSON::Value>> InspectorCanvas::buildArrayForCanvasGradient(con > > Ref<JSON::ArrayOf<JSON::Value>> InspectorCanvas::buildArrayForCanvasPattern(const CanvasPattern& canvasPattern) > { >- Image& tileImage = canvasPattern.pattern().tileImage(); >+ auto& tileImage = canvasPattern.pattern().tileImage(); >+ FloatRect rect = { { }, tileImage.size() }; > auto imageBuffer = ImageBuffer::create(tileImage.size(), RenderingMode::Unaccelerated); >- imageBuffer->context().drawImage(tileImage, FloatPoint(0, 0)); >+ imageBuffer->context().drawNativeImage(tileImage, tileImage.size(), rect, rect); > > String repeat; > bool repeatX = canvasPattern.pattern().repeatX(); >diff --git a/Source/WebCore/platform/graphics/GraphicsContext.cpp b/Source/WebCore/platform/graphics/GraphicsContext.cpp >index 2a0675a137ea22694fb0dacfa5cded1371619c3b..1e594cbee77b96755f53b9f8f43a9cfb9d56632f 100644 >--- a/Source/WebCore/platform/graphics/GraphicsContext.cpp >+++ b/Source/WebCore/platform/graphics/GraphicsContext.cpp >@@ -77,26 +77,6 @@ private: > if (m_changeFlags.contains(GraphicsContextState::flag) && (m_state.property != state.property)) \ > changeFlags.add(GraphicsContextState::flag); > >-GraphicsContextState::GraphicsContextState() >- : shouldAntialias(true) >- , shouldSmoothFonts(true) >- , shouldSubpixelQuantizeFonts(true) >- , shadowsIgnoreTransforms(false) >-#if USE(CG) >- // Core Graphics incorrectly renders shadows with radius > 8px (<rdar://problem/8103442>), >- // but we need to preserve this buggy behavior for canvas and -webkit-box-shadow. >- , shadowsUseLegacyRadius(false) >-#endif >- , drawLuminanceMask(false) >-{ >-} >- >-GraphicsContextState::~GraphicsContextState() = default; >-GraphicsContextState::GraphicsContextState(const GraphicsContextState&) = default; >-GraphicsContextState::GraphicsContextState(GraphicsContextState&&) = default; >-GraphicsContextState& GraphicsContextState::operator=(const GraphicsContextState&) = default; >-GraphicsContextState& GraphicsContextState::operator=(GraphicsContextState&&) = default; >- > GraphicsContextState::StateChangeFlags GraphicsContextStateChange::changesFromState(const GraphicsContextState& state) const > { > GraphicsContextState::StateChangeFlags changeFlags; >diff --git a/Source/WebCore/platform/graphics/GraphicsContext.h b/Source/WebCore/platform/graphics/GraphicsContext.h >index 406428e84bf40d6c5e4f15aafedc0e186b831602..b27c7facae3723da23771c0d093a3a4d019a212b 100644 >--- a/Source/WebCore/platform/graphics/GraphicsContext.h >+++ b/Source/WebCore/platform/graphics/GraphicsContext.h >@@ -30,6 +30,7 @@ > #include "DashArray.h" > #include "FloatRect.h" > #include "FontCascade.h" >+#include "Gradient.h" > #include "GraphicsTypes.h" > #include "Image.h" > #include "ImageOrientation.h" >@@ -79,7 +80,6 @@ namespace WebCore { > > class AffineTransform; > class FloatRoundedRect; >-class Gradient; > class GraphicsContextImpl; > class GraphicsContextPlatformPrivate; > class ImageBuffer; >@@ -150,16 +150,7 @@ Optional<DocumentMarkerLineStyle> DocumentMarkerLineStyle::decode(Decoder& decod > return {{ *mode, *shouldUseDarkAppearance }}; > } > >-struct GraphicsContextState { >- WEBCORE_EXPORT GraphicsContextState(); >- WEBCORE_EXPORT ~GraphicsContextState(); >- >- GraphicsContextState(const GraphicsContextState&); >- WEBCORE_EXPORT GraphicsContextState(GraphicsContextState&&); >- >- GraphicsContextState& operator=(const GraphicsContextState&); >- WEBCORE_EXPORT GraphicsContextState& operator=(GraphicsContextState&&); >- >+struct GraphicsContextInlineState { > enum Change : uint32_t { > StrokeGradientChange = 1 << 0, > StrokePatternChange = 1 << 1, >@@ -186,12 +177,20 @@ struct GraphicsContextState { > #endif > }; > using StateChangeFlags = OptionSet<Change>; >- >- RefPtr<Gradient> strokeGradient; >- RefPtr<Pattern> strokePattern; > >- RefPtr<Gradient> fillGradient; >- RefPtr<Pattern> fillPattern; >+ GraphicsContextInlineState() >+ : shouldAntialias(true) >+ , shouldSmoothFonts(true) >+ , shouldSubpixelQuantizeFonts(true) >+ , shadowsIgnoreTransforms(false) >+#if USE(CG) >+ // Core Graphics incorrectly renders shadows with radius > 8px (<rdar://problem/8103442>), >+ // but we need to preserve this buggy behavior for canvas and -webkit-box-shadow. >+ , shadowsUseLegacyRadius(false) >+#endif >+ , drawLuminanceMask(false) >+ { >+ } > > FloatSize shadowOffset; > >@@ -200,10 +199,6 @@ struct GraphicsContextState { > > TextDrawingModeFlags textDrawingMode { TextDrawingMode::Fill }; > >- Color strokeColor { Color::black }; >- Color fillColor { Color::black }; >- Color shadowColor; >- > AffineTransform strokeGradientSpaceTransform; > AffineTransform fillGradientSpaceTransform; > >@@ -228,6 +223,24 @@ struct GraphicsContextState { > #endif > }; > >+struct GraphicsContextState : public GraphicsContextInlineState { >+ GraphicsContextState() = default; >+ GraphicsContextState(const GraphicsContextInlineState& other) >+ : GraphicsContextInlineState(other) >+ { >+ } >+ >+ RefPtr<Gradient> strokeGradient; >+ RefPtr<Pattern> strokePattern; >+ >+ RefPtr<Gradient> fillGradient; >+ RefPtr<Pattern> fillPattern; >+ >+ Color strokeColor { Color::black }; >+ Color fillColor { Color::black }; >+ Color shadowColor; >+}; >+ > struct GraphicsContextStateChange { > GraphicsContextStateChange() = default; > GraphicsContextStateChange(const GraphicsContextState& state, GraphicsContextState::StateChangeFlags flags) >diff --git a/Source/WebCore/platform/graphics/Image.h b/Source/WebCore/platform/graphics/Image.h >index 436b37d6c8ec6f00f4feb4dd36f4a2923c7f96ea..da010f3fdcd06805628b860cae32bd9be9a45480 100644 >--- a/Source/WebCore/platform/graphics/Image.h >+++ b/Source/WebCore/platform/graphics/Image.h >@@ -210,11 +210,6 @@ private: > std::unique_ptr<Timer> m_animationStartTimer; > }; > >-class ImageHandle { >-public: >- RefPtr<Image> image; >-}; >- > WTF::TextStream& operator<<(WTF::TextStream&, const Image&); > > } // namespace WebCore >diff --git a/Source/WebCore/platform/graphics/Pattern.cpp b/Source/WebCore/platform/graphics/Pattern.cpp >index 796a07c186b62ff4e6b6ea26107ff9fc4c438e71..a413496556c2d26aa566024de78ab309c938bd29 100644 >--- a/Source/WebCore/platform/graphics/Pattern.cpp >+++ b/Source/WebCore/platform/graphics/Pattern.cpp >@@ -27,24 +27,62 @@ > #include "config.h" > #include "Pattern.h" > >+#include "GraphicsContext.h" > #include "Image.h" >+#include "ImageBuffer.h" > > namespace WebCore { > > Ref<Pattern> Pattern::create(Ref<Image>&& tileImage, bool repeatX, bool repeatY) >+{ >+ if (auto nativeImage = tileImage->nativeImage()) >+ return adoptRef(*new Pattern(nativeImage.releaseNonNull(), repeatX, repeatY)); >+ >+ auto imageBuffer = ImageBuffer::create(tileImage->size(), RenderingMode::Unaccelerated); >+ imageBuffer->context().drawImage(tileImage, FloatPoint(0, 0)); >+ >+ auto nativeImage = ImageBuffer::sinkIntoNativeImage(WTFMove(imageBuffer)); >+ return adoptRef(*new Pattern(nativeImage.releaseNonNull(), repeatX, repeatY)); >+} >+ >+Ref<Pattern> Pattern::create(Ref<NativeImage>&& tileImage, bool repeatX, bool repeatY) > { > return adoptRef(*new Pattern(WTFMove(tileImage), repeatX, repeatY)); > } > >-Pattern::Pattern(Ref<Image>&& image, bool repeatX, bool repeatY) >+Ref<Pattern> Pattern::create(bool repeatX, bool repeatY, const AffineTransform& patternSpaceTransformation) >+{ >+ return adoptRef(*new Pattern(repeatX, repeatY, patternSpaceTransformation)); >+} >+ >+Pattern::Pattern(Ref<NativeImage>&& image, bool repeatX, bool repeatY) > : m_tileImage(WTFMove(image)) > , m_repeatX(repeatX) > , m_repeatY(repeatY) > { > } > >+Pattern::Pattern(bool repeatX, bool repeatY, const AffineTransform& patternSpaceTransformation) >+ : m_repeatX(repeatX) >+ , m_repeatY(repeatY) >+ , m_patternSpaceTransformation(patternSpaceTransformation) >+{ >+} >+ > Pattern::~Pattern() = default; > >+void Pattern::setTileImage(Ref<NativeImage>&& tileImage) >+{ >+ ASSERT(!m_tileImage); >+ m_tileImage = WTFMove(tileImage); >+} >+ >+NativeImage& Pattern::tileImage() const >+{ >+ ASSERT(m_tileImage); >+ return *m_tileImage; >+} >+ > void Pattern::setPatternSpaceTransform(const AffineTransform& patternSpaceTransformation) > { > m_patternSpaceTransformation = patternSpaceTransformation; >diff --git a/Source/WebCore/platform/graphics/Pattern.h b/Source/WebCore/platform/graphics/Pattern.h >index 2a563da2617d1b04248b90ab0639db2caf9a88c0..f8e32e1ae2390fc48151bb787a52e2cc40482943 100644 >--- a/Source/WebCore/platform/graphics/Pattern.h >+++ b/Source/WebCore/platform/graphics/Pattern.h >@@ -53,14 +53,15 @@ namespace WebCore { > class AffineTransform; > class GraphicsContext; > class Image; >-class ImageHandle; > > class Pattern final : public RefCounted<Pattern> { > public: >- WEBCORE_EXPORT static Ref<Pattern> create(Ref<Image>&& tileImage, bool repeatX, bool repeatY); >+ static Ref<Pattern> create(Ref<Image>&& tileImage, bool repeatX, bool repeatY); >+ static Ref<Pattern> create(Ref<NativeImage>&& tileImage, bool repeatX, bool repeatY); > WEBCORE_EXPORT ~Pattern(); > >- Image& tileImage() const { return m_tileImage.get(); } >+ WEBCORE_EXPORT void setTileImage(Ref<NativeImage>&&); >+ WEBCORE_EXPORT NativeImage& tileImage() const; > > // Pattern space is an abstract space that maps to the default user space by the transformation 'userSpaceTransformation' > #if !USE(DIRECT2D) >@@ -77,20 +78,20 @@ public: > template<class Decoder> static Optional<Ref<Pattern>> decode(Decoder&); > > private: >- Pattern(Ref<Image>&&, bool repeatX, bool repeatY); >+ WEBCORE_EXPORT static Ref<Pattern> create(bool repeatX, bool repeatY, const AffineTransform& patternSpaceTransformation = { }); > >- Ref<Image> m_tileImage; >- AffineTransform m_patternSpaceTransformation; >+ Pattern(Ref<NativeImage>&&, bool repeatX, bool repeatY); >+ Pattern(bool repeatX, bool repeatY, const AffineTransform&); >+ >+ RefPtr<NativeImage> m_tileImage; > bool m_repeatX; > bool m_repeatY; >+ AffineTransform m_patternSpaceTransformation; > }; > > template<class Encoder> > void Pattern::encode(Encoder& encoder) const > { >- ImageHandle imageHandle; >- imageHandle.image = m_tileImage.ptr(); >- encoder << imageHandle; > encoder << m_patternSpaceTransformation; > encoder << m_repeatX; > encoder << m_repeatY; >@@ -99,11 +100,6 @@ void Pattern::encode(Encoder& encoder) const > template<class Decoder> > Optional<Ref<Pattern>> Pattern::decode(Decoder& decoder) > { >- Optional<ImageHandle> imageHandle; >- decoder >> imageHandle; >- if (!imageHandle) >- return WTF::nullopt; >- > Optional<AffineTransform> patternSpaceTransformation; > decoder >> patternSpaceTransformation; > if (!patternSpaceTransformation) >@@ -119,9 +115,7 @@ Optional<Ref<Pattern>> Pattern::decode(Decoder& decoder) > if (!repeatY) > return WTF::nullopt; > >- auto pattern = Pattern::create(imageHandle->image.releaseNonNull(), *repeatX, *repeatY); >- pattern->setPatternSpaceTransform(*patternSpaceTransformation); >- return pattern; >+ return Pattern::create(*repeatX, *repeatY, *patternSpaceTransformation); > } > > } //namespace >diff --git a/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp b/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp >index 7320da1cbfe9285fd126f00241438c4dba39ecc9..7fae777c3966b4c486de2232b19113231fd92df0 100644 >--- a/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp >+++ b/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp >@@ -567,7 +567,7 @@ FillSource::FillSource(const GraphicsContextState& state) > pattern.object = adoptRef(state.fillPattern->createPlatformPattern(AffineTransform())); > > auto& patternImage = state.fillPattern->tileImage(); >- pattern.size = FloatSize(patternImage.width(), patternImage.height()); >+ pattern.size = patternImage.size(); > pattern.transform = state.fillPattern->patternSpaceTransform(); > pattern.repeatX = state.fillPattern->repeatX(); > pattern.repeatY = state.fillPattern->repeatY(); >diff --git a/Source/WebCore/platform/graphics/cairo/PatternCairo.cpp b/Source/WebCore/platform/graphics/cairo/PatternCairo.cpp >index 560f747a8fb6481be4a301858500aa9fa160f786..12342474a6518b3fe0d9557fc3fcc02274b8ca25 100644 >--- a/Source/WebCore/platform/graphics/cairo/PatternCairo.cpp >+++ b/Source/WebCore/platform/graphics/cairo/PatternCairo.cpp >@@ -35,11 +35,11 @@ namespace WebCore { > > cairo_pattern_t* Pattern::createPlatformPattern(const AffineTransform&) const > { >- auto nativeImage = tileImage().nativeImageForCurrentFrame(); >- if (!nativeImage) >+ PlatformImagePtr platformImage = tileImage().platformImage(); >+ if (!platformImage) > return nullptr; > >- cairo_pattern_t* pattern = cairo_pattern_create_for_surface(nativeImage->platformImage().get()); >+ cairo_pattern_t* pattern = cairo_pattern_create_for_surface(platformImage.get()); > > // cairo merges patter space and user space itself > cairo_matrix_t matrix = toCairoMatrix(m_patternSpaceTransformation); >diff --git a/Source/WebCore/platform/graphics/cg/PatternCG.cpp b/Source/WebCore/platform/graphics/cg/PatternCG.cpp >index 6954c566570ad7ae6c1e760f0787d3770acaa694..ee1756409acb8e7dbd49772f4420ec90cc00b494 100644 >--- a/Source/WebCore/platform/graphics/cg/PatternCG.cpp >+++ b/Source/WebCore/platform/graphics/cg/PatternCG.cpp >@@ -57,16 +57,13 @@ static void patternReleaseCallback(void* info) > > CGPatternRef Pattern::createPlatformPattern(const AffineTransform& userSpaceTransformation) const > { >- FloatRect tileRect = tileImage().rect(); >+ FloatRect tileRect = { { }, tileImage().size() }; > > AffineTransform patternTransform = userSpaceTransformation * m_patternSpaceTransformation; > patternTransform.scaleNonUniform(1, -1); > patternTransform.translate(0, -tileRect.height()); > >- PlatformImagePtr platformImage; >- if (auto nativeImage = tileImage().nativeImage()) >- platformImage = nativeImage->platformImage(); >- >+ PlatformImagePtr platformImage = tileImage().platformImage(); > if (!platformImage) > return nullptr; > >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayList.cpp b/Source/WebCore/platform/graphics/displaylists/DisplayList.cpp >index d153dfa45c21ad873e4d484671f3d04acb74854b..52e118dc9c03481546232b1ee55ccefb38f86cb5 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayList.cpp >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayList.cpp >@@ -91,10 +91,10 @@ bool DisplayList::shouldDumpForFlags(AsTextFlags flags, ItemHandle item) > if (!(flags & AsTextFlag::IncludesPlatformOperations)) { > const auto& stateItem = item.get<SetState>(); > // FIXME: for now, only drop the item if the only state-change flags are platform-specific. >- if (stateItem.state().m_changeFlags == GraphicsContextState::ShouldSubpixelQuantizeFontsChange) >+ if (stateItem.stateChange().m_changeFlags == GraphicsContextState::ShouldSubpixelQuantizeFontsChange) > return false; > >- if (stateItem.state().m_changeFlags == GraphicsContextState::ShouldSubpixelQuantizeFontsChange) >+ if (stateItem.stateChange().m_changeFlags == GraphicsContextState::ShouldSubpixelQuantizeFontsChange) > return false; > } > break; >@@ -203,16 +203,12 @@ void DisplayList::append(ItemHandle item) > return append<ConcatenateCTM>(item.get<ConcatenateCTM>()); > case ItemType::SetCTM: > return append<SetCTM>(item.get<SetCTM>()); >- case ItemType::SetInlineFillGradient: >- return append<SetInlineFillGradient>(item.get<SetInlineFillGradient>()); >- case ItemType::SetInlineFillColor: >- return append<SetInlineFillColor>(item.get<SetInlineFillColor>()); >- case ItemType::SetInlineStrokeColor: >- return append<SetInlineStrokeColor>(item.get<SetInlineStrokeColor>()); >- case ItemType::SetStrokeThickness: >- return append<SetStrokeThickness>(item.get<SetStrokeThickness>()); >+ case ItemType::SetInlineState: >+ return append<SetInlineState>(item.get<SetInlineState>()); > case ItemType::SetState: > return append<SetState>(item.get<SetState>()); >+ case ItemType::SetStrokeThickness: >+ return append<SetStrokeThickness>(item.get<SetStrokeThickness>()); > case ItemType::SetLineCap: > return append<SetLineCap>(item.get<SetLineCap>()); > case ItemType::SetLineDash: >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp b/Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp >index 50c8d8f7577a16705ecf855ad169818b6df98bba..9b6aebecec85267db6fa7f863ed50bd501acd1be 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp >@@ -72,26 +72,18 @@ void ItemHandle::apply(GraphicsContext& context) > get<SetCTM>().apply(context); > return; > } >- case ItemType::SetInlineFillGradient: { >- get<SetInlineFillGradient>().apply(context); >+ case ItemType::SetInlineState: { >+ get<SetInlineState>().apply(context); > return; > } >- case ItemType::SetInlineFillColor: { >- get<SetInlineFillColor>().apply(context); >- return; >- } >- case ItemType::SetInlineStrokeColor: { >- get<SetInlineStrokeColor>().apply(context); >+ case ItemType::SetState: { >+ ASSERT_NOT_REACHED(); > return; > } > case ItemType::SetStrokeThickness: { > get<SetStrokeThickness>().apply(context); > return; > } >- case ItemType::SetState: { >- get<SetState>().apply(context); >- return; >- } > case ItemType::SetLineCap: { > get<SetLineCap>().apply(context); > return; >@@ -121,7 +113,7 @@ void ItemHandle::apply(GraphicsContext& context) > return; > } > case ItemType::ClipToImageBuffer: { >- get<ClipToImageBuffer>().apply(context); >+ ASSERT_NOT_REACHED(); > return; > } > case ItemType::ClipOutToPath: { >@@ -140,15 +132,15 @@ void ItemHandle::apply(GraphicsContext& context) > ASSERT_NOT_REACHED(); > return; > case ItemType::DrawImageBuffer: { >- get<DrawImageBuffer>().apply(context); >+ ASSERT_NOT_REACHED(); > return; > } > case ItemType::DrawNativeImage: { >- get<DrawNativeImage>().apply(context); >+ ASSERT_NOT_REACHED(); > return; > } > case ItemType::DrawPattern: { >- get<DrawPattern>().apply(context); >+ ASSERT_NOT_REACHED(); > return; > } > case ItemType::DrawRect: { >@@ -486,16 +478,8 @@ void ItemHandle::destroy() > static_assert(std::is_trivially_destructible<SetCTM>::value); > return; > } >- case ItemType::SetInlineFillColor: { >- static_assert(std::is_trivially_destructible<SetInlineFillColor>::value); >- return; >- } >- case ItemType::SetInlineFillGradient: { >- static_assert(std::is_trivially_destructible<SetInlineFillGradient>::value); >- return; >- } >- case ItemType::SetInlineStrokeColor: { >- static_assert(std::is_trivially_destructible<SetInlineStrokeColor>::value); >+ case ItemType::SetInlineState: { >+ static_assert(std::is_trivially_destructible<SetInlineState>::value); > return; > } > case ItemType::SetLineCap: { >@@ -662,12 +646,8 @@ bool ItemHandle::safeCopy(ItemHandle destination) const > return copyInto<Scale>(*this, itemOffset); > case ItemType::SetCTM: > return copyInto<SetCTM>(*this, itemOffset); >- case ItemType::SetInlineFillColor: >- return copyInto<SetInlineFillColor>(*this, itemOffset); >- case ItemType::SetInlineFillGradient: >- return copyInto<SetInlineFillGradient>(*this, itemOffset); >- case ItemType::SetInlineStrokeColor: >- return copyInto<SetInlineStrokeColor>(*this, itemOffset); >+ case ItemType::SetInlineState: >+ return copyInto<SetInlineState>(*this, itemOffset); > case ItemType::SetLineCap: > return copyInto<SetLineCap>(*this, itemOffset); > case ItemType::SetLineJoin: >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.cpp b/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.cpp >index c0c73b83bd52eaa04a951781804453947bbc95e9..9df697b2100fe221e1fe4c1263dca401b2857126 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.cpp >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.cpp >@@ -48,16 +48,12 @@ static size_t sizeOfItemInBytes(ItemType type) > return sizeof(ConcatenateCTM); > case ItemType::SetCTM: > return sizeof(SetCTM); >- case ItemType::SetInlineFillGradient: >- return sizeof(SetInlineFillGradient); >- case ItemType::SetInlineFillColor: >- return sizeof(SetInlineFillColor); >- case ItemType::SetInlineStrokeColor: >- return sizeof(SetInlineStrokeColor); >- case ItemType::SetStrokeThickness: >- return sizeof(SetStrokeThickness); >+ case ItemType::SetInlineState: >+ return sizeof(SetInlineState); > case ItemType::SetState: > return sizeof(SetState); >+ case ItemType::SetStrokeThickness: >+ return sizeof(SetStrokeThickness); > case ItemType::SetLineCap: > return sizeof(SetLineCap); > case ItemType::SetLineDash: >@@ -189,9 +185,7 @@ bool isDrawingItem(ItemType type) > case ItemType::Save: > case ItemType::Scale: > case ItemType::SetCTM: >- case ItemType::SetInlineFillColor: >- case ItemType::SetInlineFillGradient: >- case ItemType::SetInlineStrokeColor: >+ case ItemType::SetInlineState: > case ItemType::SetLineCap: > case ItemType::SetLineDash: > case ItemType::SetLineJoin: >@@ -302,9 +296,7 @@ bool isInlineItem(ItemType type) > case ItemType::Save: > case ItemType::Scale: > case ItemType::SetCTM: >- case ItemType::SetInlineFillColor: >- case ItemType::SetInlineFillGradient: >- case ItemType::SetInlineStrokeColor: >+ case ItemType::SetInlineState: > case ItemType::SetLineCap: > case ItemType::SetLineJoin: > case ItemType::SetMiterLimit: >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.h b/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.h >index 0e947a06dab5a2dfb4769082f8cac548af89343b..615e3ab34b81d9b97a09b56f004471ffdcbe081a 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.h >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListItemType.h >@@ -36,11 +36,9 @@ enum class ItemType : uint8_t { > Scale, > ConcatenateCTM, > SetCTM, >- SetInlineFillGradient, >- SetInlineFillColor, >- SetInlineStrokeColor, >- SetStrokeThickness, >+ SetInlineState, > SetState, >+ SetStrokeThickness, > SetLineCap, > SetLineDash, > SetLineJoin, >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp b/Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp >index 213db9c8cf42ec1ae2d1339375d9f5630e76d743..793b9356729958a18a1c2c9f3eacdb6b4f32a471 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp >@@ -115,88 +115,24 @@ static TextStream& operator<<(TextStream& ts, const ConcatenateCTM& item) > return ts; > } > >-SetInlineFillGradient::SetInlineFillGradient(const Gradient& gradient, const AffineTransform& gradientSpaceTransform) >- : m_data(gradient.data()) >- , m_gradientSpaceTransform(gradientSpaceTransform) >- , m_spreadMethod(gradient.spreadMethod()) >- , m_colorStopCount(static_cast<uint8_t>(gradient.stops().size())) >-{ >- RELEASE_ASSERT(m_colorStopCount <= maxColorStopCount); >- for (uint8_t i = 0; i < m_colorStopCount; ++i) { >- m_offsets[i] = gradient.stops()[i].offset; >- m_colors[i] = gradient.stops()[i].color.asInline(); >- } >-} >- >-SetInlineFillGradient::SetInlineFillGradient(float offsets[maxColorStopCount], SRGBA<uint8_t> colors[maxColorStopCount], const Gradient::Data& data, const AffineTransform& gradientSpaceTransform, GradientSpreadMethod spreadMethod, uint8_t colorStopCount) >- : m_data(data) >- , m_gradientSpaceTransform(gradientSpaceTransform) >- , m_spreadMethod(spreadMethod) >- , m_colorStopCount(colorStopCount) >-{ >- RELEASE_ASSERT(m_colorStopCount <= maxColorStopCount); >- for (uint8_t i = 0; i < m_colorStopCount; ++i) { >- m_offsets[i] = offsets[i]; >- m_colors[i] = colors[i]; >- } >-} >- >-Ref<Gradient> SetInlineFillGradient::gradient() const >+SetInlineState::SetInlineState(const GraphicsContextInlineState& state, GraphicsContextState::StateChangeFlags changeFlags) >+ : m_state(state) >+ , m_changeFlags(changeFlags) > { >- auto gradient = Gradient::create(Gradient::Data(m_data)); >- for (uint8_t i = 0; i < m_colorStopCount; ++i) >- gradient->addColorStop({ m_offsets[i], Color(m_colors[i]) }); >- gradient->setSpreadMethod(m_spreadMethod); >- return gradient; > } > >-void SetInlineFillGradient::apply(GraphicsContext& context) const >+void SetInlineState::apply(GraphicsContext& context) const > { >- if (m_colorStopCount <= maxColorStopCount) >- context.setFillGradient(gradient(), m_gradientSpaceTransform); >-} >- >-bool SetInlineFillGradient::isInline(const Gradient& gradient) >-{ >- if (gradient.stops().size() > SetInlineFillGradient::maxColorStopCount) >- return false; >- >- for (auto& colorStop : gradient.stops()) { >- if (!colorStop.color.isInline()) >- return false; >- } >- >- return true; >+ GraphicsContextStateChange stateChange = { m_state, m_changeFlags }; >+ stateChange.apply(context); > } > >-static TextStream& operator<<(TextStream& ts, const SetInlineFillGradient&) >+static TextStream& operator<<(TextStream& ts, const SetInlineState&) > { > // FIXME: Dump gradient data. > return ts; > } > >-void SetInlineFillColor::apply(GraphicsContext& context) const >-{ >- context.setFillColor(color()); >-} >- >-static TextStream& operator<<(TextStream& ts, const SetInlineFillColor& state) >-{ >- ts.dumpProperty("color", state.color()); >- return ts; >-} >- >-void SetInlineStrokeColor::apply(GraphicsContext& context) const >-{ >- context.setStrokeColor(color()); >-} >- >-static TextStream& operator<<(TextStream& ts, const SetInlineStrokeColor& state) >-{ >- ts.dumpProperty("color", state.color()); >- return ts; >-} >- > void SetStrokeThickness::apply(GraphicsContext& context) const > { > context.setStrokeThickness(m_thickness); >@@ -209,23 +145,29 @@ static TextStream& operator<<(TextStream& ts, const SetStrokeThickness& state) > } > > SetState::SetState(const GraphicsContextState& state, GraphicsContextState::StateChangeFlags flags) >- : m_state(state, flags) >+ : m_stateChange(state, flags) > { > } > >-SetState::SetState(const GraphicsContextStateChange& stateChange) >- : m_state(stateChange) >+SetState::SetState(const GraphicsContextStateChange& stateChange, RenderingResourceIdentifier strokePatternImageIdentifier, RenderingResourceIdentifier fillPatternImageIdentifier) >+ : m_stateChange(stateChange) >+ , m_strokePatternImageIdentifier(strokePatternImageIdentifier) >+ , m_fillPatternImageIdentifier(fillPatternImageIdentifier) > { > } > >-void SetState::apply(GraphicsContext& context) const >+void SetState::apply(GraphicsContext& context, NativeImage* strokePatternImage, NativeImage* fillPatternImage) const > { >- m_state.apply(context); >+ if (m_stateChange.m_state.strokePattern && strokePatternImage) >+ m_stateChange.m_state.strokePattern->setTileImage(makeRef(*strokePatternImage)); >+ if (m_stateChange.m_state.fillPattern && fillPatternImage) >+ m_stateChange.m_state.fillPattern->setTileImage(makeRef(*fillPatternImage)); >+ m_stateChange.apply(context); > } > >-static TextStream& operator<<(TextStream& ts, const SetState& state) >+static TextStream& operator<<(TextStream& ts, const SetState& setState) > { >- ts << state.state(); >+ ts << setState.stateChange(); > return ts; > } > >@@ -301,11 +243,6 @@ static TextStream& operator<<(TextStream& ts, const ClipOut& item) > return ts; > } > >-NO_RETURN_DUE_TO_ASSERT void ClipToImageBuffer::apply(GraphicsContext&) const >-{ >- ASSERT_NOT_REACHED(); >-} >- > void ClipToImageBuffer::apply(GraphicsContext& context, WebCore::ImageBuffer& imageBuffer) const > { > context.clipToImageBuffer(imageBuffer, m_destinationRect); >@@ -420,11 +357,6 @@ static TextStream& operator<<(TextStream& ts, const DrawGlyphs& item) > return ts; > } > >-NO_RETURN_DUE_TO_ASSERT void DrawImageBuffer::apply(GraphicsContext&) const >-{ >- ASSERT_NOT_REACHED(); >-} >- > void DrawImageBuffer::apply(GraphicsContext& context, WebCore::ImageBuffer& imageBuffer) const > { > context.drawImageBuffer(imageBuffer, m_destinationRect, m_srcRect, m_options); >@@ -438,11 +370,6 @@ static TextStream& operator<<(TextStream& ts, const DrawImageBuffer& item) > return ts; > } > >-NO_RETURN_DUE_TO_ASSERT void DrawNativeImage::apply(GraphicsContext&) const >-{ >- ASSERT_NOT_REACHED(); >-} >- > void DrawNativeImage::apply(GraphicsContext& context, NativeImage& image) const > { > context.drawNativeImage(image, m_imageSize, m_destinationRect, m_srcRect, m_options); >@@ -469,11 +396,6 @@ DrawPattern::DrawPattern(RenderingResourceIdentifier imageIdentifier, const Floa > { > } > >-NO_RETURN_DUE_TO_ASSERT void DrawPattern::apply(GraphicsContext&) const >-{ >- ASSERT_NOT_REACHED(); >-} >- > void DrawPattern::apply(GraphicsContext& context, NativeImage& image) const > { > context.drawPattern(image, m_imageSize, m_destination, m_tileRect, m_patternTransform, m_phase, m_spacing, m_options); >@@ -1023,11 +945,9 @@ static TextStream& operator<<(TextStream& ts, ItemType type) > case ItemType::Scale: ts << "scale"; break; > case ItemType::SetCTM: ts << "set-ctm"; break; > case ItemType::ConcatenateCTM: ts << "concatentate-ctm"; break; >- case ItemType::SetInlineFillGradient: ts << "set-inline-fill-gradient"; break; >- case ItemType::SetInlineFillColor: ts << "set-inline-fill-color"; break; >- case ItemType::SetInlineStrokeColor: ts << "set-inline-stroke-color"; break; >- case ItemType::SetStrokeThickness: ts << "set-stroke-thickness"; break; >+ case ItemType::SetInlineState: ts << "set-inline-state"; break; > case ItemType::SetState: ts << "set-state"; break; >+ case ItemType::SetStrokeThickness: ts << "set-stroke-thickness"; break; > case ItemType::SetLineCap: ts << "set-line-cap"; break; > case ItemType::SetLineDash: ts << "set-line-dash"; break; > case ItemType::SetLineJoin: ts << "set-line-join"; break; >@@ -1106,21 +1026,15 @@ TextStream& operator<<(TextStream& ts, ItemHandle item) > case ItemType::ConcatenateCTM: > ts << item.get<ConcatenateCTM>(); > break; >- case ItemType::SetInlineFillGradient: >- ts << item.get<SetInlineFillGradient>(); >+ case ItemType::SetInlineState: >+ ts << item.get<SetInlineState>(); > break; >- case ItemType::SetInlineFillColor: >- ts << item.get<SetInlineFillColor>(); >- break; >- case ItemType::SetInlineStrokeColor: >- ts << item.get<SetInlineStrokeColor>(); >+ case ItemType::SetState: >+ ts << item.get<SetState>(); > break; > case ItemType::SetStrokeThickness: > ts << item.get<SetStrokeThickness>(); > break; >- case ItemType::SetState: >- ts << item.get<SetState>(); >- break; > case ItemType::SetLineCap: > ts << item.get<SetLineCap>(); > break; >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h b/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h >index 1e03de764935ee35a2d0d0c292a234477247f418..0883a026eb3df782a8bd07ba4f17e8aa6236766c 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h >@@ -167,65 +167,19 @@ private: > AffineTransform m_transform; > }; > >-class SetInlineFillGradient { >+class SetInlineState { > public: >- static constexpr ItemType itemType = ItemType::SetInlineFillGradient; >+ static constexpr ItemType itemType = ItemType::SetInlineState; > static constexpr bool isInlineItem = true; > static constexpr bool isDrawingItem = false; >- static constexpr uint8_t maxColorStopCount = 4; > >- SetInlineFillGradient(const Gradient&, const AffineTransform& gradientSpaceTransform); >- WEBCORE_EXPORT SetInlineFillGradient(float offsets[maxColorStopCount], SRGBA<uint8_t> colors[maxColorStopCount], const Gradient::Data&, const AffineTransform& gradientSpaceTransform, GradientSpreadMethod, uint8_t colorStopCount); >- >- static bool isInline(const Gradient&); >- Ref<Gradient> gradient() const; >+ SetInlineState(const GraphicsContextInlineState&, GraphicsContextState::StateChangeFlags); > > void apply(GraphicsContext&) const; > > private: >- float m_offsets[maxColorStopCount]; >- SRGBA<uint8_t> m_colors[maxColorStopCount]; >- Gradient::Data m_data; >- AffineTransform m_gradientSpaceTransform; >- GradientSpreadMethod m_spreadMethod { GradientSpreadMethod::Pad }; >- uint8_t m_colorStopCount { 0 }; >-}; >- >-class SetInlineFillColor { >-public: >- static constexpr ItemType itemType = ItemType::SetInlineFillColor; >- static constexpr bool isInlineItem = true; >- static constexpr bool isDrawingItem = false; >- >- SetInlineFillColor(SRGBA<uint8_t> colorData) >- : m_colorData(colorData) >- { >- } >- >- Color color() const { return { m_colorData }; } >- void apply(GraphicsContext&) const; >- >-private: >- SRGBA<uint8_t> m_colorData; >-}; >- >-class SetInlineStrokeColor { >-public: >- static constexpr ItemType itemType = ItemType::SetInlineStrokeColor; >- static constexpr bool isInlineItem = true; >- static constexpr bool isDrawingItem = false; >- >- SetInlineStrokeColor(SRGBA<uint8_t> colorData) >- : m_colorData(colorData) >- { >- } >- >- Color color() const { return { m_colorData }; } >- >- void apply(GraphicsContext&) const; >- >-private: >- SRGBA<uint8_t> m_colorData; >+ GraphicsContextInlineState m_state; >+ GraphicsContextState::StateChangeFlags m_changeFlags; > }; > > class SetStrokeThickness { >@@ -254,30 +208,33 @@ public: > static constexpr bool isDrawingItem = false; > > WEBCORE_EXPORT SetState(const GraphicsContextState&, GraphicsContextState::StateChangeFlags); >- WEBCORE_EXPORT SetState(const GraphicsContextStateChange&); >+ WEBCORE_EXPORT SetState(const GraphicsContextStateChange&, RenderingResourceIdentifier strokePatternImageIdentifier, RenderingResourceIdentifier fillPatternImageIdentifier); > >- const GraphicsContextStateChange& state() const { return m_state; } >- >- static void builderState(GraphicsContext&, const GraphicsContextState&, GraphicsContextState::StateChangeFlags); >+ const GraphicsContextStateChange& stateChange() const { return m_stateChange; } >+ RenderingResourceIdentifier strokePatternImageIdentifier() const { return m_strokePatternImageIdentifier; } >+ RenderingResourceIdentifier fillPatternImageIdentifier() const { return m_fillPatternImageIdentifier; } > > static void dumpStateChanges(WTF::TextStream&, const GraphicsContextState&, GraphicsContextState::StateChangeFlags); > > template<class Encoder> void encode(Encoder&) const; > template<class Decoder> static Optional<SetState> decode(Decoder&); > >- void apply(GraphicsContext&) const; >+ void apply(GraphicsContext&, NativeImage* strokePatternImage, NativeImage* fillPatternImage) const; > > private: >- GraphicsContextStateChange m_state; >+ GraphicsContextStateChange m_stateChange; >+ RenderingResourceIdentifier m_strokePatternImageIdentifier; >+ RenderingResourceIdentifier m_fillPatternImageIdentifier; > }; > > template<class Encoder> > void SetState::encode(Encoder& encoder) const > { >- auto changeFlags = m_state.m_changeFlags; >+ auto changeFlags = m_stateChange.m_changeFlags; > encoder << changeFlags; > >- auto& state = m_state.m_state; >+ auto& state = m_stateChange.m_state; >+ encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(&state), sizeof(GraphicsContextInlineState), 1); > > if (changeFlags.contains(GraphicsContextState::StrokeGradientChange)) { > encoder << !!state.strokeGradient; >@@ -287,8 +244,10 @@ void SetState::encode(Encoder& encoder) const > > if (changeFlags.contains(GraphicsContextState::StrokePatternChange)) { > encoder << !!state.strokePattern; >- if (state.strokePattern) >+ if (state.strokePattern) { >+ encoder << state.strokePattern->tileImage().renderingResourceIdentifier(); > encoder << *state.strokePattern; >+ } > } > > if (changeFlags.contains(GraphicsContextState::FillGradientChange)) { >@@ -299,60 +258,20 @@ void SetState::encode(Encoder& encoder) const > > if (changeFlags.contains(GraphicsContextState::FillPatternChange)) { > encoder << !!state.fillPattern; >- if (state.fillPattern) >+ if (state.fillPattern) { >+ encoder << state.fillPattern->tileImage().renderingResourceIdentifier(); > encoder << *state.fillPattern; >+ } > } > >- if (changeFlags.contains(GraphicsContextState::ShadowChange)) { >- encoder << state.shadowOffset; >- encoder << state.shadowBlur; >- encoder << state.shadowColor; >-#if USE(CG) >- encoder << state.shadowsUseLegacyRadius; >-#endif // USE(CG) >- } >- >- if (changeFlags.contains(GraphicsContextState::StrokeThicknessChange)) >- encoder << state.strokeThickness; >- >- if (changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) >- encoder << state.textDrawingMode; >- > if (changeFlags.contains(GraphicsContextState::StrokeColorChange)) > encoder << state.strokeColor; > > if (changeFlags.contains(GraphicsContextState::FillColorChange)) > encoder << state.fillColor; > >- if (changeFlags.contains(GraphicsContextState::StrokeStyleChange)) >- encoder << state.strokeStyle; >- >- if (changeFlags.contains(GraphicsContextState::FillRuleChange)) >- encoder << state.fillRule; >- >- if (changeFlags.contains(GraphicsContextState::CompositeOperationChange)) >- encoder << state.compositeOperator; >- >- if (changeFlags.contains(GraphicsContextState::BlendModeChange)) >- encoder << state.blendMode; >- >- if (changeFlags.contains(GraphicsContextState::ImageInterpolationQualityChange)) >- encoder << state.imageInterpolationQuality; >- >- if (changeFlags.contains(GraphicsContextState::AlphaChange)) >- encoder << state.alpha; >- >- if (changeFlags.contains(GraphicsContextState::ShouldAntialiasChange)) >- encoder << state.shouldAntialias; >- >- if (changeFlags.contains(GraphicsContextState::ShouldSmoothFontsChange)) >- encoder << state.shouldSmoothFonts; >- >- if (changeFlags.contains(GraphicsContextState::ShouldSubpixelQuantizeFontsChange)) >- encoder << state.shouldSubpixelQuantizeFonts; >- >- if (changeFlags.contains(GraphicsContextState::ShadowsIgnoreTransformsChange)) >- encoder << state.shadowsIgnoreTransforms; >+ if (changeFlags.contains(GraphicsContextState::ShadowChange)) >+ encoder << state.shadowColor; > } > > template<class Decoder> >@@ -366,6 +285,13 @@ Optional<SetState> SetState::decode(Decoder& decoder) > GraphicsContextStateChange stateChange; > stateChange.m_changeFlags = *changeFlags; > >+ RenderingResourceIdentifier strokePatternImageIdentifier; >+ RenderingResourceIdentifier fillPatternImageIdentifier; >+ >+ auto& state = stateChange.m_state; >+ if (!decoder.decodeFixedLengthData(reinterpret_cast<uint8_t*>(&state), sizeof(GraphicsContextInlineState), 1)) >+ return WTF::nullopt; >+ > if (stateChange.m_changeFlags.contains(GraphicsContextState::StrokeGradientChange)) { > Optional<bool> hasStrokeGradient; > decoder >> hasStrokeGradient; >@@ -387,13 +313,17 @@ Optional<SetState> SetState::decode(Decoder& decoder) > if (!hasStrokePattern.hasValue()) > return WTF::nullopt; > >- if (hasStrokePattern.value()) { >- auto strokePattern = Pattern::decode(decoder); >- if (!strokePattern) >- return WTF::nullopt; >+ Optional<RenderingResourceIdentifier> imageIdentifier; >+ decoder >> imageIdentifier; >+ if (!imageIdentifier.hasValue()) >+ return WTF::nullopt; > >- stateChange.m_state.strokePattern = WTFMove(*strokePattern); >- } >+ auto strokePattern = Pattern::decode(decoder); >+ if (!strokePattern) >+ return WTF::nullopt; >+ >+ strokePatternImageIdentifier = *imageIdentifier; >+ stateChange.m_state.strokePattern = WTFMove(*strokePattern); > } > > if (stateChange.m_changeFlags.contains(GraphicsContextState::FillGradientChange)) { >@@ -416,64 +346,18 @@ Optional<SetState> SetState::decode(Decoder& decoder) > decoder >> hasFillPattern; > if (!hasFillPattern.hasValue()) > return WTF::nullopt; >- >- if (hasFillPattern.value()) { >- auto fillPattern = Pattern::decode(decoder); >- if (!fillPattern) >- return WTF::nullopt; >- >- stateChange.m_state.fillPattern = WTFMove(*fillPattern); >- } >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::ShadowChange)) { >- Optional<FloatSize> shadowOffset; >- decoder >> shadowOffset; >- if (!shadowOffset) >- return WTF::nullopt; >- >- stateChange.m_state.shadowOffset = *shadowOffset; >- >- Optional<float> shadowBlur; >- decoder >> shadowBlur; >- if (!shadowBlur) >- return WTF::nullopt; >- >- stateChange.m_state.shadowBlur = *shadowBlur; >- >- Optional<Color> shadowColor; >- decoder >> shadowColor; >- if (!shadowColor) >+ >+ Optional<RenderingResourceIdentifier> imageIdentifier; >+ decoder >> imageIdentifier; >+ if (!imageIdentifier.hasValue()) > return WTF::nullopt; > >- stateChange.m_state.shadowColor = *shadowColor; >- >-#if USE(CG) >- Optional<bool> shadowsUseLegacyRadius; >- decoder >> shadowsUseLegacyRadius; >- if (!shadowsUseLegacyRadius) >+ auto fillPattern = Pattern::decode(decoder); >+ if (!fillPattern) > return WTF::nullopt; > >- stateChange.m_state.shadowsUseLegacyRadius = *shadowsUseLegacyRadius; >-#endif // USE(CG) >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::StrokeThicknessChange)) { >- Optional<float> strokeThickness; >- decoder >> strokeThickness; >- if (!strokeThickness) >- return WTF::nullopt; >- >- stateChange.m_state.strokeThickness = *strokeThickness; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) { >- Optional<TextDrawingModeFlags> textDrawingMode; >- decoder >> textDrawingMode; >- if (!textDrawingMode) >- return WTF::nullopt; >- >- stateChange.m_state.textDrawingMode = WTFMove(*textDrawingMode); >+ fillPatternImageIdentifier = *imageIdentifier; >+ stateChange.m_state.fillPattern = WTFMove(*fillPattern); > } > > if (stateChange.m_changeFlags.contains(GraphicsContextState::StrokeColorChange)) { >@@ -494,96 +378,16 @@ Optional<SetState> SetState::decode(Decoder& decoder) > stateChange.m_state.fillColor = *fillColor; > } > >- if (stateChange.m_changeFlags.contains(GraphicsContextState::StrokeStyleChange)) { >- StrokeStyle strokeStyle; >- if (!decoder.decode(strokeStyle)) >- return WTF::nullopt; >- >- stateChange.m_state.strokeStyle = strokeStyle; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::FillRuleChange)) { >- Optional<WindRule> fillRule; >- decoder >> fillRule; >- if (!fillRule) >- return WTF::nullopt; >- >- stateChange.m_state.fillRule = *fillRule; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::CompositeOperationChange)) { >- Optional<CompositeOperator> compositeOperator; >- decoder >> compositeOperator; >- if (!compositeOperator) >- return WTF::nullopt; >- >- stateChange.m_state.compositeOperator = *compositeOperator; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::BlendModeChange)) { >- Optional<BlendMode> blendMode; >- decoder >> blendMode; >- if (!blendMode) >- return WTF::nullopt; >- >- stateChange.m_state.blendMode = *blendMode; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::ImageInterpolationQualityChange)) { >- Optional<InterpolationQuality> imageInterpolationQuality; >- decoder >> imageInterpolationQuality; >- if (!imageInterpolationQuality) >- return WTF::nullopt; >- >- stateChange.m_state.imageInterpolationQuality = *imageInterpolationQuality; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::AlphaChange)) { >- Optional<float> alpha; >- decoder >> alpha; >- if (!alpha) >- return WTF::nullopt; >- >- stateChange.m_state.alpha = *alpha; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::ShouldAntialiasChange)) { >- Optional<bool> shouldAntialias; >- decoder >> shouldAntialias; >- if (!shouldAntialias) >- return WTF::nullopt; >- >- stateChange.m_state.shouldAntialias = *shouldAntialias; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::ShouldSmoothFontsChange)) { >- Optional<bool> shouldSmoothFonts; >- decoder >> shouldSmoothFonts; >- if (!shouldSmoothFonts) >- return WTF::nullopt; >- >- stateChange.m_state.shouldSmoothFonts = *shouldSmoothFonts; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::ShouldSubpixelQuantizeFontsChange)) { >- Optional<bool> shouldSubpixelQuantizeFonts; >- decoder >> shouldSubpixelQuantizeFonts; >- if (!shouldSubpixelQuantizeFonts) >- return WTF::nullopt; >- >- stateChange.m_state.shouldSubpixelQuantizeFonts = *shouldSubpixelQuantizeFonts; >- } >- >- if (stateChange.m_changeFlags.contains(GraphicsContextState::ShadowsIgnoreTransformsChange)) { >- Optional<bool> shadowsIgnoreTransforms; >- decoder >> shadowsIgnoreTransforms; >- if (!shadowsIgnoreTransforms) >+ if (stateChange.m_changeFlags.contains(GraphicsContextState::ShadowChange)) { >+ Optional<Color> shadowColor; >+ decoder >> shadowColor; >+ if (!shadowColor) > return WTF::nullopt; > >- stateChange.m_state.shadowsIgnoreTransforms = *shadowsIgnoreTransforms; >+ stateChange.m_state.shadowColor = *shadowColor; > } > >- return { stateChange }; >+ return {{ stateChange, strokePatternImageIdentifier, fillPatternImageIdentifier }}; > } > > class SetLineCap { >@@ -757,8 +561,6 @@ public: > > void apply(GraphicsContext&, WebCore::ImageBuffer&) const; > >- NO_RETURN_DUE_TO_ASSERT void apply(GraphicsContext&) const; >- > private: > RenderingResourceIdentifier m_imageBufferIdentifier; > FloatRect m_destinationRect; >@@ -1039,8 +841,6 @@ public: > > void apply(GraphicsContext&, WebCore::ImageBuffer&) const; > >- NO_RETURN_DUE_TO_ASSERT void apply(GraphicsContext&) const; >- > Optional<FloatRect> globalBounds() const { return WTF::nullopt; } > Optional<FloatRect> localBounds(const GraphicsContext&) const { return m_destinationRect; } > >@@ -1072,7 +872,6 @@ public: > // FIXME: We might want to validate ImagePaintingOptions. > bool isValid() const { return !!m_imageIdentifier; } > >- NO_RETURN_DUE_TO_ASSERT void apply(GraphicsContext&) const; > void apply(GraphicsContext&, NativeImage&) const; > > Optional<FloatRect> globalBounds() const { return WTF::nullopt; } >@@ -1104,7 +903,6 @@ public: > // FIXME: We might want to validate ImagePaintingOptions. > bool isValid() const { return !!m_imageIdentifier; } > >- NO_RETURN_DUE_TO_ASSERT void apply(GraphicsContext&) const; > void apply(GraphicsContext&, NativeImage&) const; > > Optional<FloatRect> globalBounds() const { return WTF::nullopt; } >@@ -2301,11 +2099,9 @@ template<> struct EnumTraits<WebCore::DisplayList::ItemType> { > WebCore::DisplayList::ItemType::Scale, > WebCore::DisplayList::ItemType::SetCTM, > WebCore::DisplayList::ItemType::ConcatenateCTM, >- WebCore::DisplayList::ItemType::SetInlineFillGradient, >- WebCore::DisplayList::ItemType::SetInlineFillColor, >- WebCore::DisplayList::ItemType::SetInlineStrokeColor, >- WebCore::DisplayList::ItemType::SetStrokeThickness, >+ WebCore::DisplayList::ItemType::SetInlineState, > WebCore::DisplayList::ItemType::SetState, >+ WebCore::DisplayList::ItemType::SetStrokeThickness, > WebCore::DisplayList::ItemType::SetLineCap, > WebCore::DisplayList::ItemType::SetLineDash, > WebCore::DisplayList::ItemType::SetLineJoin, >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp >index eda0b559835e0d89ed0a57e58e53cf138963571b..41fa76226ae60358b205ccd3b864f728d5dc6d5b 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp >@@ -60,49 +60,40 @@ void Recorder::putImageData(WebCore::AlphaPremultiplication inputFormat, const W > append<PutImageData>(inputFormat, imageData, srcRect, destPoint, destFormat); > } > >-static bool containsOnlyInlineStateChanges(const GraphicsContextStateChange& changes, GraphicsContextState::StateChangeFlags changeFlags) >+static bool containsOnlyInlineStateChanges(GraphicsContextState::StateChangeFlags changeFlags) > { > static constexpr GraphicsContextState::StateChangeFlags inlineStateChangeFlags { >- GraphicsContextState::StrokeThicknessChange, >+ GraphicsContextState::StrokeGradientChange, >+ GraphicsContextState::StrokePatternChange, >+ GraphicsContextState::FillGradientChange, >+ GraphicsContextState::FillPatternChange, > GraphicsContextState::StrokeColorChange, > GraphicsContextState::FillColorChange, >- GraphicsContextState::FillGradientChange, >+ GraphicsContextState::ShadowChange > }; > >- if (changeFlags != (changeFlags & inlineStateChangeFlags)) >- return false; >- >- if (changeFlags.contains(GraphicsContextState::StrokeColorChange) && !changes.m_state.strokeColor.isInline()) >- return false; >- >- if (changeFlags.contains(GraphicsContextState::FillColorChange) && !changes.m_state.fillColor.isInline()) >- return false; >- >- if (changeFlags.contains(GraphicsContextState::FillGradientChange) >- && (!changes.m_state.fillGradient || !SetInlineFillGradient::isInline(*changes.m_state.fillGradient))) >- return false; >- >- return true; >+ return !changeFlags.containsAny(inlineStateChangeFlags); > } > >-void Recorder::appendStateChangeItem(const GraphicsContextStateChange& changes, GraphicsContextState::StateChangeFlags changeFlags) >+void Recorder::appendStateChangeItem(const GraphicsContextState& state, GraphicsContextState::StateChangeFlags changeFlags) > { >- if (!containsOnlyInlineStateChanges(changes, changeFlags)) { >- append<SetState>(changes.m_state, changeFlags); >- return; >- } >- >- if (changeFlags.contains(GraphicsContextState::StrokeColorChange)) >- append<SetInlineStrokeColor>(changes.m_state.strokeColor.asInline()); >- >- if (changeFlags.contains(GraphicsContextState::StrokeThicknessChange)) >- append<SetStrokeThickness>(changes.m_state.strokeThickness); >+ if (containsOnlyInlineStateChanges(changeFlags)) >+ append<SetInlineState>(state, changeFlags); >+ else { >+ if (state.strokePattern) { >+ if (m_delegate) >+ m_delegate->cacheNativeImage(state.strokePattern->tileImage()); >+ m_displayList.cacheNativeImage(state.strokePattern->tileImage()); >+ } > >- if (changeFlags.contains(GraphicsContextState::FillColorChange)) >- append<SetInlineFillColor>(changes.m_state.fillColor.asInline()); >+ if (state.fillPattern) { >+ if (m_delegate) >+ m_delegate->cacheNativeImage(state.fillPattern->tileImage()); >+ m_displayList.cacheNativeImage(state.fillPattern->tileImage()); >+ } > >- if (changeFlags.contains(GraphicsContextState::FillGradientChange)) >- append<SetInlineFillGradient>(*changes.m_state.fillGradient, changes.m_state.fillGradientSpaceTransform); >+ append<SetState>(state, changeFlags); >+ } > } > > void Recorder::willAppendItemOfType(ItemType type) >@@ -119,7 +110,7 @@ void Recorder::willAppendItemOfType(ItemType type) > GraphicsContextState::StateChangeFlags changesFromLastState = stateChanges.changesFromState(currentState().lastDrawingState); > if (changesFromLastState) { > LOG_WITH_STREAM(DisplayLists, stream << "pre-drawing, saving state " << GraphicsContextStateChange(stateChanges.m_state, changesFromLastState)); >- appendStateChangeItem(stateChanges, changesFromLastState); >+ appendStateChangeItem(stateChanges.m_state, changesFromLastState); > stateChanges.m_changeFlags = { }; > currentState().lastDrawingState = stateChanges.m_state; > } >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h >index 89a99086aad11eade0375f1df1864d333317958b..7fcea427d4317bcad0b08a344626f10ddf30f16a 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h >@@ -171,7 +171,7 @@ private: > > WEBCORE_EXPORT void willAppendItemOfType(ItemType); > >- void appendStateChangeItem(const GraphicsContextStateChange&, GraphicsContextState::StateChangeFlags); >+ void appendStateChangeItem(const GraphicsContextState&, GraphicsContextState::StateChangeFlags); > > FloatRect extentFromLocalBounds(const FloatRect&) const; > >diff --git a/Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp b/Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp >index 325db9739e9fcf2131e914e6ae5c85a82ebae1c9..3464362d677d4d6c8472ed9a7da35d8515af87a2 100644 >--- a/Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp >+++ b/Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp >@@ -70,6 +70,29 @@ inline static Optional<RenderingResourceIdentifier> applyNativeImageItem(Graphic > return resourceIdentifier; > } > >+inline static Optional<RenderingResourceIdentifier> applySetStateItem(GraphicsContext& context, const NativeImageHashMap& nativeImages, ItemHandle item) >+{ >+ auto& setStateItem = item.get<SetState>(); >+ >+ NativeImage* strokePatternImage = nullptr; >+ NativeImage* fillPatternImage = nullptr; >+ >+ if (auto resourceIdentifier = setStateItem.strokePatternImageIdentifier()) { >+ strokePatternImage = nativeImages.get(resourceIdentifier); >+ if (!strokePatternImage) >+ return resourceIdentifier; >+ } >+ >+ if (auto resourceIdentifier = setStateItem.fillPatternImageIdentifier()) { >+ fillPatternImage = nativeImages.get(resourceIdentifier); >+ if (!fillPatternImage) >+ return resourceIdentifier; >+ } >+ >+ setStateItem.apply(context, strokePatternImage, fillPatternImage); >+ return WTF::nullopt; >+} >+ > template<class T> > inline static Optional<RenderingResourceIdentifier> applyFontItem(GraphicsContext& context, const FontRenderingResourceMap& fonts, ItemHandle item) > { >@@ -105,14 +128,20 @@ std::pair<Optional<StopReplayReason>, Optional<RenderingResourceIdentifier>> Rep > return { WTF::nullopt, WTF::nullopt }; > } > >- if (item.is<DrawGlyphs>()) { >- if (auto missingCachedResourceIdentifier = applyFontItem<DrawGlyphs>(m_context, m_fonts, item)) >+ if (item.is<DrawPattern>()) { >+ if (auto missingCachedResourceIdentifier = applyNativeImageItem<DrawPattern>(m_context, m_nativeImages, item)) > return { StopReplayReason::MissingCachedResource, WTFMove(missingCachedResourceIdentifier) }; > return { WTF::nullopt, WTF::nullopt }; > } > >- if (item.is<DrawPattern>()) { >- if (auto missingCachedResourceIdentifier = applyNativeImageItem<DrawPattern>(m_context, m_nativeImages, item)) >+ if (item.is<SetState>()) { >+ if (auto missingCachedResourceIdentifier = applySetStateItem(m_context, m_nativeImages, item)) >+ return { StopReplayReason::MissingCachedResource, WTFMove(missingCachedResourceIdentifier) }; >+ return { WTF::nullopt, WTF::nullopt }; >+ } >+ >+ if (item.is<DrawGlyphs>()) { >+ if (auto missingCachedResourceIdentifier = applyFontItem<DrawGlyphs>(m_context, m_fonts, item)) > return { StopReplayReason::MissingCachedResource, WTFMove(missingCachedResourceIdentifier) }; > return { WTF::nullopt, WTF::nullopt }; > } >diff --git a/Source/WebCore/platform/graphics/filters/FETile.cpp b/Source/WebCore/platform/graphics/filters/FETile.cpp >index afbe706addc227da10cb78828886c129b19241cc..f33cceb1123280c8125cb284b6e78073d01b81a8 100644 >--- a/Source/WebCore/platform/graphics/filters/FETile.cpp >+++ b/Source/WebCore/platform/graphics/filters/FETile.cpp >@@ -72,7 +72,7 @@ void FETile::platformApplySoftware() > tileImageContext.translate(-inMaxEffectLocation.x(), -inMaxEffectLocation.y()); > tileImageContext.drawImageBuffer(*inBuffer, in->absolutePaintRect().location()); > >- auto tileImageCopy = ImageBuffer::sinkIntoImage(WTFMove(tileImage)); >+ auto tileImageCopy = ImageBuffer::sinkIntoNativeImage(WTFMove(tileImage)); > if (!tileImageCopy) > return; > >diff --git a/Source/WebCore/rendering/RenderLayerBacking.cpp b/Source/WebCore/rendering/RenderLayerBacking.cpp >index ad4e8dd9d71bac1a92192da7ae6a19d434a719e2..a14e5e0bcc2f2fb18ff7816f674e106dad4a4645 100644 >--- a/Source/WebCore/rendering/RenderLayerBacking.cpp >+++ b/Source/WebCore/rendering/RenderLayerBacking.cpp >@@ -3266,7 +3266,7 @@ static RefPtr<Pattern> patternForDescription(PatternDescription description, Flo > imageContext.drawText(font, textRun, { textGap, yOffset }, 0); > } > >- auto tileImage = ImageBuffer::sinkIntoImage(WTFMove(imageBuffer)); >+ auto tileImage = ImageBuffer::sinkIntoNativeImage(WTFMove(imageBuffer)); > auto fillPattern = Pattern::create(tileImage.releaseNonNull(), true, true); > AffineTransform patternOffsetTransform; > patternOffsetTransform.translate(contentOffset + description.phase); >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp >index a1f85f1762661a5d8b32a4504e65efa83ca3a4eb..c5652f5149697a857d9330554bb3a39e116d4d1c 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp >+++ b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp >@@ -112,7 +112,7 @@ PatternData* RenderSVGResourcePattern::buildPattern(RenderElement& renderer, Opt > > const IntSize tileImageSize = tileImage->logicalSize(); > >- RefPtr<Image> copiedImage = ImageBuffer::sinkIntoImage(WTFMove(tileImage)); >+ auto copiedImage = ImageBuffer::sinkIntoNativeImage(WTFMove(tileImage)); > if (!copiedImage) > return nullptr; > >diff --git a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp >index b0ac3586b0249b4abe1e4fcbce73e9d8fa865b45..da81481183c6e2810e23461eb8c086116fc8bcfc 100644 >--- a/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp >+++ b/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp >@@ -460,9 +460,7 @@ Optional<DisplayList::ItemHandle> WARN_UNUSED_RETURN RemoteRenderingBackend::dec > case DisplayList::ItemType::Save: > case DisplayList::ItemType::Scale: > case DisplayList::ItemType::SetCTM: >- case DisplayList::ItemType::SetInlineFillColor: >- case DisplayList::ItemType::SetInlineFillGradient: >- case DisplayList::ItemType::SetInlineStrokeColor: >+ case DisplayList::ItemType::SetInlineState: > case DisplayList::ItemType::SetLineCap: > case DisplayList::ItemType::SetLineJoin: > case DisplayList::ItemType::SetMiterLimit: >diff --git a/Source/WebKit/Shared/WebCoreArgumentCoders.cpp b/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >index 19af29966827d4b601d8cd527bf14c9a77d7089b..bb7c84bf81475ccc919f0783004d92971800fe5e 100644 >--- a/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >+++ b/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >@@ -1075,18 +1075,6 @@ static WARN_UNUSED_RETURN bool decodeOptionalImage(Decoder& decoder, RefPtr<Imag > return decodeImage(decoder, image); > } > >-void ArgumentCoder<ImageHandle>::encode(Encoder& encoder, const ImageHandle& imageHandle) >-{ >- encodeOptionalImage(encoder, imageHandle.image.get()); >-} >- >-bool ArgumentCoder<ImageHandle>::decode(Decoder& decoder, ImageHandle& imageHandle) >-{ >- if (!decodeOptionalImage(decoder, imageHandle.image)) >- return false; >- return true; >-} >- > void ArgumentCoder<Ref<Font>>::encode(Encoder& encoder, const Ref<WebCore::Font>& font) > { > encoder << font->origin(); >diff --git a/Source/WebKit/Shared/WebCoreArgumentCoders.h b/Source/WebKit/Shared/WebCoreArgumentCoders.h >index 074325b5a9cbdada130c091fc3d3b0528aafdf97..64a7cff35eba161e98da06e9055a6109b2f8f9fa 100644 >--- a/Source/WebKit/Shared/WebCoreArgumentCoders.h >+++ b/Source/WebKit/Shared/WebCoreArgumentCoders.h >@@ -109,7 +109,6 @@ class FixedPositionViewportConstraints; > class Font; > class FontPlatformData; > class HTTPHeaderMap; >-class ImageHandle; > class IntPoint; > class IntRect; > class IntSize; >@@ -418,11 +417,6 @@ template<> struct ArgumentCoder<Ref<WebCore::Font>> { > static Optional<WebCore::FontPlatformData> decodePlatformData(Decoder&); > }; > >-template<> struct ArgumentCoder<WebCore::ImageHandle> { >- static void encode(Encoder&, const WebCore::ImageHandle&); >- static WARN_UNUSED_RETURN bool decode(Decoder&, WebCore::ImageHandle&); >-}; >- > template<> struct ArgumentCoder<WebCore::ResourceRequest> { > static void encode(Encoder&, const WebCore::ResourceRequest&); > static WARN_UNUSED_RETURN bool decode(Decoder&, WebCore::ResourceRequest&); >diff --git a/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h b/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h >index d7b90b572da5fc13cd3bd086b47714b10cd35ca9..641a1c8e0657069dfae74bc0e9f67babf603de4f 100644 >--- a/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h >+++ b/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h >@@ -346,9 +346,7 @@ protected: > case WebCore::DisplayList::ItemType::Save: > case WebCore::DisplayList::ItemType::Scale: > case WebCore::DisplayList::ItemType::SetCTM: >- case WebCore::DisplayList::ItemType::SetInlineFillColor: >- case WebCore::DisplayList::ItemType::SetInlineFillGradient: >- case WebCore::DisplayList::ItemType::SetInlineStrokeColor: >+ case WebCore::DisplayList::ItemType::SetInlineState: > case WebCore::DisplayList::ItemType::SetLineCap: > case WebCore::DisplayList::ItemType::SetLineJoin: > case WebCore::DisplayList::ItemType::SetMiterLimit: >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 2741f52567efa7180fd953cd26a1bfdb93cb046c..6cddad956733ae248c6c99d847eace71ae4996c2 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,15 @@ >+2021-02-05 Said Abou-Hallawa <said@apple.com> >+ >+ [GPU Process]: Implement SetState DisplayList item >+ https://bugs.webkit.org/show_bug.cgi?id=219468 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp: >+ (TestWebKitAPI::TEST): >+ * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp: >+ (TestWebKitAPI::TEST): >+ > 2021-02-05 Aakash Jain <aakash_jain@apple.com> > > [ews] commit-queue should use commits.webkit.org url instead of trac url >diff --git a/Tools/TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp b/Tools/TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp >index e8717c79140bdea4b5f5355f0169089e60086733..602bdbf32eaa2b477fbdeb8e2ae62073aa41774c 100644 >--- a/Tools/TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp >@@ -65,11 +65,14 @@ TEST(DisplayListTests, AppendItems) > auto gradient = createGradient(); > auto path = createComplexPath(); > >+ GraphicsContextState state; >+ state.fillColor = Color::red; >+ > for (int i = 0; i < 50; ++i) { > list.append<SetStrokeThickness>(1.5); > list.append<FillPath>(path); > list.append<FillRectWithGradient>(FloatRect { 1., 1., 10., 10. }, gradient); >- list.append<SetInlineFillColor>(Color::red); >+ list.append<SetState>(state, GraphicsContextState::FillColorChange); > #if ENABLE(INLINE_PATH_DATA) > list.append<StrokeInlinePath>(InlinePathData { LineData {{ 0., 0. }, { 10., 15. }}}); > #endif >@@ -102,11 +105,11 @@ TEST(DisplayListTests, AppendItems) > EXPECT_EQ(&item.gradient(), gradient.ptr()); > break; > } >- case ItemType::SetInlineFillColor: { >+ case ItemType::SetState: { > EXPECT_FALSE(handle->isDrawingItem()); >- EXPECT_TRUE(handle->is<SetInlineFillColor>()); >- auto& item = handle->get<SetInlineFillColor>(); >- EXPECT_EQ(item.color(), Color::red); >+ EXPECT_TRUE(handle->is<SetState>()); >+ auto& item = handle->get<SetState>(); >+ EXPECT_EQ(item.stateChange().m_state.fillColor, Color::red); > break; > } > #if ENABLE(INLINE_PATH_DATA) >@@ -215,9 +218,9 @@ TEST(DisplayListTests, ItemBufferClient) > list.setItemBufferClient(&writer); > > auto path = createComplexPath(); >- list.append<SetInlineStrokeColor>(Color::blue); >+ list.append<SetStrokeThickness>(10); > list.append<StrokePath>(path); >- list.append<SetInlineStrokeColor>(Color::red); >+ list.append<SetStrokeThickness>(20); > list.append<StrokePath>(path); > > DisplayList shallowCopy {{ ItemBufferHandle { globalBufferIdentifier, globalItemBuffer, list.sizeInBytes() } }}; >@@ -230,9 +233,9 @@ TEST(DisplayListTests, ItemBufferClient) > > EXPECT_FALSE(shallowCopy.isEmpty()); > EXPECT_EQ(itemTypes.size(), 4U); >- EXPECT_EQ(itemTypes[0], ItemType::SetInlineStrokeColor); >+ EXPECT_EQ(itemTypes[0], ItemType::SetStrokeThickness); > EXPECT_EQ(itemTypes[1], ItemType::StrokePath); >- EXPECT_EQ(itemTypes[2], ItemType::SetInlineStrokeColor); >+ EXPECT_EQ(itemTypes[2], ItemType::SetStrokeThickness); > EXPECT_EQ(itemTypes[3], ItemType::StrokePath); > } > >diff --git a/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp b/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp >index 0fec5f765a42c9247a42a76901f0561732cdb9b8..bda4da9a621bf2e6375179f96353d56207d85a06 100644 >--- a/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp >@@ -53,11 +53,14 @@ TEST(DisplayListTests, ReplayWithMissingResource) > auto imageBufferIdentifier = RenderingResourceIdentifier::generate(); > > DisplayList list; >+ GraphicsContextState state; > >- list.append<SetInlineFillColor>(Color::green); >+ state.fillColor = Color::blue; >+ list.append<SetState>(state, GraphicsContextState::FillColorChange); > list.append<FillRect>(contextBounds); > list.append<DrawImageBuffer>(imageBufferIdentifier, contextBounds, contextBounds, ImagePaintingOptions { }); >- list.append<SetInlineStrokeColor>(Color::red); >+ state.strokeColor = Color::red; >+ list.append<SetState>(state, GraphicsContextState::StrokeColorChange); > list.append<StrokeLine>(FloatPoint { 0, contextHeight }, FloatPoint { contextWidth, 0 }); > > { >@@ -120,7 +123,7 @@ TEST(DisplayListTests, OutOfLineItemDecodingFailure) > path.moveTo({ 10., 10. }); > path.addLineTo({ 50., 50. }); > path.addLineTo({ 10., 10. }); >- originalList.append<SetInlineStrokeColor>(Color::blue); >+ originalList.append<SetStrokeThickness>(10); > originalList.append<FillPath>(WTFMove(path)); > > DisplayList shallowCopy {{ ItemBufferHandle { globalBufferIdentifier, globalItemBuffer, originalList.sizeInBytes() } }}; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index e83a8f8fc0324820b63c3913f0687ca78855124e..2cf2c4bc569eb15e3d06a6a985ff5248c0cd9b62 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2021-02-05 Said Abou-Hallawa <said@apple.com> >+ >+ [GPU Process]: Implement SetState DisplayList item >+ https://bugs.webkit.org/show_bug.cgi?id=219468 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * displaylists/canvas-display-list-expected.txt: >+ * gpu-process/TestExpectations: >+ > 2021-02-05 Rini Patel <rini_patel@apple.com> > > [GPU Process] Repopulate the TestExpectations file #2 >diff --git a/LayoutTests/displaylists/canvas-display-list-expected.txt b/LayoutTests/displaylists/canvas-display-list-expected.txt >index 1451b19253c3238928bbd9f5e5debb9274c50d57..43436a31658cca3bb959c26887cd196dccb534e1 100644 >--- a/LayoutTests/displaylists/canvas-display-list-expected.txt >+++ b/LayoutTests/displaylists/canvas-display-list-expected.txt >@@ -7,7 +7,8 @@ > (shadows-ignore-transforms 1)) > (fill-rect > (rect at (10,10) size 55x50) extent at (10,140) size 55x50) >-(set-inline-fill-color >- (color #0000C880)) >+(set-state >+ (change-flags 128) >+ (fill-color #0000C880)) > (fill-rect > (rect at (30,30) size 55x50) extent at (30,120) size 55x50) >diff --git a/LayoutTests/gpu-process/TestExpectations b/LayoutTests/gpu-process/TestExpectations >index c366fd9ad076f55ee285e6f7984a883e186bf5cf..dad8bca2811dcb9e6698b2ab6c3927cf8573cd0c 100644 >--- a/LayoutTests/gpu-process/TestExpectations >+++ b/LayoutTests/gpu-process/TestExpectations >@@ -1,49 +1,8 @@ >-canvas/philip/tests/2d.composite.globalAlpha.canvaspattern.html [ Crash ] >-canvas/philip/tests/2d.composite.globalAlpha.imagepattern.html [ Crash ] >-canvas/philip/tests/2d.composite.uncovered.pattern.copy.html [ Crash ] >-canvas/philip/tests/2d.composite.uncovered.pattern.destination-atop.html [ Crash ] >-canvas/philip/tests/2d.composite.uncovered.pattern.destination-in.html [ Crash ] >-canvas/philip/tests/2d.composite.uncovered.pattern.source-in.html [ Crash ] >-canvas/philip/tests/2d.composite.uncovered.pattern.source-out.html [ Crash ] >-canvas/philip/tests/2d.pattern.animated.gif.html [ Crash ] >-canvas/philip/tests/2d.pattern.basic.canvas.html [ Crash ] >-canvas/philip/tests/2d.pattern.basic.image.html [ Crash ] >-canvas/philip/tests/2d.pattern.basic.nocontext.html [ Crash ] >-canvas/philip/tests/2d.pattern.crosscanvas.html [ Crash ] >-canvas/philip/tests/2d.pattern.modify.canvas1.html [ Crash ] >-canvas/philip/tests/2d.pattern.modify.canvas2.html [ Crash ] >-canvas/philip/tests/2d.pattern.modify.image1.html [ Crash ] >-canvas/philip/tests/2d.pattern.modify.image2.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.norepeat.basic.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.norepeat.coord1.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.norepeat.coord2.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.norepeat.coord3.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.norepeat.outside.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.orientation.canvas.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.orientation.image.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeat.basic.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeat.coord1.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeat.coord2.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeat.coord3.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeat.outside.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeatx.basic.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeatx.coord1.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeatx.outside.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeaty.basic.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeaty.coord1.html [ Crash ] >-canvas/philip/tests/2d.pattern.paint.repeaty.outside.html [ Crash ] >-canvas/philip/tests/2d.pattern.repeat.empty.html [ Crash ] >-canvas/philip/tests/2d.pattern.repeat.null.html [ Crash ] >-canvas/philip/tests/2d.shadow.pattern.alpha.html [ Crash ] >-canvas/philip/tests/2d.shadow.pattern.basic.html [ Crash ] >-canvas/philip/tests/2d.shadow.pattern.transparent.1.html [ Crash ] >-canvas/philip/tests/2d.shadow.pattern.transparent.2.html [ Crash ] >-canvas/philip/tests/initial.reset.pattern.html [ Crash ] >- > compositing/canvas/accelerated-canvas-compositing.html [ Failure ] > compositing/layer-creation/spanOverlapsCanvas.html [ Failure ] > > css3/blending/blend-mode-clip-accelerated-blending-canvas.html [ Failure ] >+ > displaylists/canvas-display-list.html [ Failure ] > > fast/canvas/2d.fillText.gradient.html [ Failure ] >@@ -55,33 +14,11 @@ fast/canvas/canvas-blend-image.html [ Failure ] > fast/canvas/canvas-blend-solid.html [ Failure ] > fast/canvas/canvas-blending-clipping.html [ Failure ] > fast/canvas/canvas-blending-color-over-color.html [ Failure ] >-fast/canvas/canvas-blending-color-over-gradient.html [ Failure ] >-fast/canvas/canvas-blending-color-over-image.html [ Timeout ] >-fast/canvas/canvas-blending-color-over-pattern.html [ Crash ] >-fast/canvas/canvas-blending-gradient-over-pattern.html [ Crash ] >-fast/canvas/canvas-blending-image-over-pattern.html [ Crash ] >-fast/canvas/canvas-blending-pattern-over-color.html [ Crash ] >-fast/canvas/canvas-blending-pattern-over-gradient.html [ Crash ] >-fast/canvas/canvas-blending-pattern-over-image.html [ Crash ] >-fast/canvas/canvas-blending-pattern-over-pattern.html [ Crash ] >-fast/canvas/canvas-createPattern-fillRect-shadow.html [ Crash ] >-fast/canvas/canvas-createPattern-video-loading.html [ Crash ] >-fast/canvas/canvas-createPattern-video-modify.html [ Crash ] >+fast/canvas/canvas-blending-color-over-gradient.html [ Failure ]` > fast/canvas/canvas-drawImage-composite-copy.html [ ImageOnlyFailure ] >-fast/canvas/canvas-fillPath-pattern-shadow.html [ Crash ] >-fast/canvas/canvas-image-shadow.html [ Crash ] >-fast/canvas/canvas-imageSmoothingEnabled-patterns.html [ Crash ] > fast/canvas/canvas-large-dimensions.html [ Failure ] >-fast/canvas/canvas-pattern-behaviour.html [ Crash ] >-fast/canvas/canvas-pattern-modify.html [ Crash ] >-fast/canvas/canvas-pattern-transform.html [ Crash ] >-fast/canvas/canvas-pattern-with-transform.html [ Crash ] > fast/canvas/canvas-render-layer.html [ Failure ] > fast/canvas/hidpi-repaint-on-retina-leaves-bits-behind.html [ ImageOnlyFailure ] >-fast/canvas/image-object-in-canvas.html [ Crash ] >-fast/canvas/image-pattern-rotate.html [ Crash ] >-fast/canvas/pattern-with-transform.html [ Crash ] >-fast/canvas/patternfill-repeat.html [ Crash ] > fast/canvas/webgl/canvas-2d-webgl-texture.html [ Failure ] > fast/canvas/webgl/canvas-test.html [ Failure ] > fast/canvas/webgl/context-creation-attributes.html [ Failure ] >@@ -101,29 +38,26 @@ fast/canvas/webgl/texImage2D-video-flipY-true.html [ Failure ] > fast/canvas/webgl/texture-active-bind.html [ Failure ] > fast/canvas/webgl/uniform-samplers-test.html [ Timeout ] > fast/canvas/webgl/webglcontextchangedevent.html [ Timeout ] >- > fast/dom/navigator-detached-no-crash.html [ Failure ] > fast/images/animated-image-mp4-crash.html [ Timeout ] > fast/images/animated-image-mp4.html [ Timeout ] > fast/images/ordered-animated-image-frames.html [ ImageOnlyFailure ] >- > fast/mediacapturefromelement/CanvasCaptureMediaStream-exceptions.html [ Crash ] > fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html [ Timeout ] > fast/mediastream/captureStream/canvas3d.html [ Failure ] > fast/mediastream/getUserMedia-webaudio.html [ Failure ] > fast/mediastream/media-element-current-time.html [ Failure ] > fast/mediastream/media-stream-track-interrupted.html [ Failure ] >- > fast/repaint/canvas-object-fit.html [ Failure ] > fast/repaint/canvas-putImageData.html [ Failure ] > fast/speechrecognition/start-recognition-then-stop.html [ Timeout ] > fast/speechrecognition/start-second-recognition.html [ Failure ] >- > fast/text/canvas-color-fonts/fill-gradient-COLR-2.html [ ImageOnlyFailure ] > fast/text/canvas-color-fonts/stroke-gradient-COLR-2.html [ ImageOnlyFailure ] > fast/text/canvas-color-fonts/stroke-gradient-COLR-3.html [ ImageOnlyFailure ] > fast/text/canvas-color-fonts/stroke-gradient-COLR-4.html [ ImageOnlyFailure ] > fast/text/canvas-color-fonts/stroke-gradient-COLR-5.html [ ImageOnlyFailure ] >+ > http/tests/canvas/color-fonts/fill-gradient-sbix-2.html [ ImageOnlyFailure ] > http/tests/canvas/color-fonts/fill-gradient-sbix-3.html [ ImageOnlyFailure ] > http/tests/canvas/color-fonts/fill-gradient-sbix-4.html [ ImageOnlyFailure ] >@@ -182,9 +116,8 @@ http/tests/security/webaudio-render-remote-audio-allowed-crossorigin-redirect.ht > http/tests/security/webaudio-render-remote-audio-allowed-crossorigin.html [ Timeout ] > http/tests/security/webaudio-render-remote-audio-blocked-no-crossorigin-redirect.html [ Timeout ] > http/tests/security/webaudio-render-remote-audio-blocked-no-crossorigin.html [ Timeout ] >- >-http/wpt/mediarecorder/MediaRecorder-AV-audio-video-dataavailable.html [ Failure ] > http/wpt/mediarecorder/MediaRecorder-audio-bitrate.html [ Failure ] >+http/wpt/mediarecorder/MediaRecorder-AV-audio-video-dataavailable.html [ Failure ] > http/wpt/mediarecorder/MediaRecorder-multiple-start-stop.html [ Failure ] > http/wpt/mediarecorder/mute-tracks.html [ Crash ] > http/wpt/mediarecorder/pause-recording.html [ Failure ] >@@ -197,93 +130,10 @@ imported/blink/fast/canvas/canvas-state-persistence-no-dirty.html [ ImageOnlyFai > imported/blink/fast/canvas/canvas-unbalanced-save.html [ ImageOnlyFailure ] > imported/blink/svg/canvas/canvas-draw-pattern-size.html [ Crash ] > >-imported/w3c/canvas/2d.composite.globalAlpha.canvaspattern.html [ Crash ] >-imported/w3c/canvas/2d.composite.globalAlpha.imagepattern.html [ Crash ] >-imported/w3c/canvas/2d.composite.uncovered.pattern.copy.html [ Crash ] >-imported/w3c/canvas/2d.composite.uncovered.pattern.destination-atop.html [ Crash ] >-imported/w3c/canvas/2d.composite.uncovered.pattern.destination-in.html [ Crash ] >-imported/w3c/canvas/2d.composite.uncovered.pattern.source-in.html [ Crash ] >-imported/w3c/canvas/2d.composite.uncovered.pattern.source-out.html [ Crash ] >-imported/w3c/canvas/2d.pattern.basic.canvas.html [ Crash ] >-imported/w3c/canvas/2d.pattern.basic.image.html [ Crash ] >-imported/w3c/canvas/2d.pattern.basic.nocontext.html [ Crash ] >-imported/w3c/canvas/2d.pattern.crosscanvas.html [ Crash ] >-imported/w3c/canvas/2d.pattern.modify.canvas1.html [ Crash ] >-imported/w3c/canvas/2d.pattern.modify.canvas2.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.norepeat.basic.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.norepeat.coord1.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.norepeat.coord2.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.norepeat.coord3.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.norepeat.outside.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.orientation.canvas.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.orientation.image.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeat.basic.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeat.coord1.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeat.coord2.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeat.coord3.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeat.outside.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeatx.basic.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeatx.coord1.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeatx.outside.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeaty.basic.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeaty.coord1.html [ Crash ] >-imported/w3c/canvas/2d.pattern.paint.repeaty.outside.html [ Crash ] >-imported/w3c/canvas/2d.pattern.repeat.empty.html [ Crash ] >-imported/w3c/canvas/2d.pattern.repeat.null.html [ Crash ] >-imported/w3c/canvas/2d.shadow.pattern.alpha.html [ Crash ] >-imported/w3c/canvas/2d.shadow.pattern.basic.html [ Crash ] >-imported/w3c/canvas/2d.shadow.pattern.transparent.1.html [ Crash ] >-imported/w3c/canvas/2d.shadow.pattern.transparent.2.html [ Crash ] >-imported/w3c/canvas/initial.reset.pattern.html [ Crash ] >-imported/w3c/canvas/security.pattern.canvas.timing.html [ Crash ] >-imported/w3c/canvas/security.pattern.cross.html [ Crash ] > imported/w3c/web-platform-tests/fetch/range/general.window.html [ Failure ] > imported/w3c/web-platform-tests/fetch/range/sw.https.window.html [ Failure ] >-imported/w3c/web-platform-tests/html/canvas/element/compositing/2d.composite.globalAlpha.canvaspattern.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/compositing/2d.composite.globalAlpha.imagepattern.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/compositing/2d.composite.uncovered.pattern.copy.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/compositing/2d.composite.uncovered.pattern.destination-atop.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/compositing/2d.composite.uncovered.pattern.destination-in.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/compositing/2d.composite.uncovered.pattern.source-in.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/compositing/2d.composite.uncovered.pattern.source-out.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.animated.gif.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.basic.canvas.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.basic.image.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.basic.nocontext.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.crosscanvas.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.modify.canvas1.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.modify.canvas2.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.modify.image1.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.modify.image2.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.repeat.empty.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/fill-and-stroke-styles/2d.pattern.transform.identity.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/image-smoothing/imagesmoothing.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/imagebitmap/createImageBitmap-origin.sub.html [ Failure ] >-imported/w3c/web-platform-tests/html/canvas/element/line-styles/2d.line.cap.closed.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/path-objects/2d.path.arc.angle.2.html [ Crash ] >+ > imported/w3c/web-platform-tests/html/canvas/element/path-objects/2d.path.stroke.scale2.html [ Failure ] >-imported/w3c/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html [ Crash ] >-imported/w3c/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html [ Crash ] > imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress_noautoplay.html [ Failure ] > imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html [ Failure ] > imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/preserves-pitch.html [ Failure ] >@@ -342,9 +192,9 @@ svg/as-image/svg-canvas-pattern-with-link-tainted.html [ Crash ] > svg/canvas/canvas-global-alpha-svg.html [ ImageOnlyFailure ] > svg/canvas/canvas-pattern-svg.html [ Crash ] > >-webaudio/Panner/hrtf-database.html [ Timeout ] > webaudio/codec-tests/aac/vbr-128kbps-44khz.html [ Timeout ] > webaudio/codec-tests/mp3/128kbps-44khz.html [ Timeout ] >+webaudio/Panner/hrtf-database.html [ Timeout ] > > webgl/1.0.3/conformance/canvas/canvas-test.html [ Failure ] > webgl/1.0.3/conformance/canvas/draw-static-webgl-to-multiple-canvas-test.html [ Failure ] >@@ -417,68 +267,6 @@ webgl/2.0.0/conformance/textures/webgl_canvas/tex-2d-rgba-rgba-unsigned_short_5_ > webgl/2.0.0/conformance/uniforms/uniform-samplers-test.html [ Timeout ] > webgl/2.0.0/conformance2/reading/read-pixels-pack-parameters.html [ Failure ] > webgl/2.0.0/conformance2/state/gl-object-get-calls.html [ Timeout ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r16f-red-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r16f-red-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r32f-red-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r8-red-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r8ui-red_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg16f-rg-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg16f-rg-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg32f-rg-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg8-rg-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg8ui-rg_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb16f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb16f-rgb-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba16f-rgba-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba16f-rgba-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba32f-rgba-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba4-rgba-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r16f-red-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r16f-red-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r32f-red-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r8-red-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r8ui-red_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg16f-rg-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg16f-rg-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg32f-rg-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg8-rg-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg8ui-rg_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb16f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb16f-rgb-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba16f-rgba-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba16f-rgba-half_float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba32f-rgba-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba4-rgba-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >@@ -495,10 +283,10 @@ webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8ui-rg_integer-u > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-float.html [ Failure ] >@@ -510,8 +298,8 @@ webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigne > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >@@ -528,10 +316,10 @@ webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8ui-rg_integer-u > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-float.html [ Failure ] >@@ -543,8 +331,70 @@ webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigne > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r16f-red-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r16f-red-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r32f-red-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r8-red-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-r8ui-red_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg16f-rg-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg16f-rg-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg32f-rg-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg8-rg-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg8ui-rg_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb16f-rgb-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb16f-rgb-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb32f-rgb-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba16f-rgba-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba16f-rgba-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba32f-rgba-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba4-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r16f-red-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r16f-red-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r32f-red-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r8-red-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-r8ui-red_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg16f-rg-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg16f-rg-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg32f-rg-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg8-rg-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg8ui-rg_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb16f-rgb-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb16f-rgb-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb32f-rgb-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba16f-rgba-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba16f-rgba-half_float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba32f-rgba-float.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba4-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/canvas/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >@@ -561,10 +411,10 @@ webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rg8ui-rg > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb9_e5-rgb-float.html [ Failure ] >@@ -576,8 +426,8 @@ webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba4-rg > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >@@ -594,10 +444,10 @@ webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rg8ui-rg > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb9_e5-rgb-float.html [ Failure ] >@@ -609,8 +459,8 @@ webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba4-rg > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/misc/integer-cubemap-texture-sampling.html [ Crash ] > webgl/2.0.0/conformance2/textures/video/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] >@@ -628,10 +478,10 @@ webgl/2.0.0/conformance2/textures/video/tex-2d-rg8ui-rg_integer-unsigned_byte.ht > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/video/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/video/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/video/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/video/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgb9_e5-rgb-float.html [ Failure ] >@@ -643,8 +493,8 @@ webgl/2.0.0/conformance2/textures/video/tex-2d-rgba4-rgba-unsigned_byte.html [ F > webgl/2.0.0/conformance2/textures/video/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/video/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/video/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >@@ -661,10 +511,10 @@ webgl/2.0.0/conformance2/textures/video/tex-3d-rg8ui-rg_integer-unsigned_byte.ht > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/video/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/video/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/video/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/video/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgb9_e5-rgb-float.html [ Failure ] >@@ -676,8 +526,8 @@ webgl/2.0.0/conformance2/textures/video/tex-3d-rgba4-rgba-unsigned_byte.html [ F > webgl/2.0.0/conformance2/textures/video/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/video/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/video/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/video/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >@@ -694,10 +544,10 @@ webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rg8ui-rg_integer-unsigned_ > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgba16f-rgba-float.html [ Failure ] >@@ -707,8 +557,8 @@ webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgba4-rgba-unsigned_byte.h > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/webgl_canvas/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ] >@@ -725,10 +575,10 @@ webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rg8ui-rg_integer-unsigned_ > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb16f-rgb-float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb16f-rgb-half_float.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb32f-rgb-float.html [ Failure ] >-webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ] >+webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgba16f-rgba-float.html [ Failure ] >@@ -738,8 +588,9 @@ webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgba4-rgba-unsigned_byte.h > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ] >-webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] > webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ] >+webgl/2.0.0/conformance2/textures/webgl_canvas/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ] >+ > webgl/many-contexts-access-after-loss.html [ Failure ] > webgl/max-active-contexts-console-warning.html [ Failure ] > webgl/max-active-contexts-gc.html [ Failure ] >@@ -752,7 +603,7 @@ webrtc/captureCanvas-webrtc-software-h264-high.html [ Timeout ] > webrtc/captureCanvas-webrtc.html [ Timeout ] > webrtc/h264-baseline.html [ Failure ] > webrtc/h264-high.html [ Failure ] >-webrtc/video.html [ Failure ] > webrtc/video-rotation-no-cvo.html [ Timeout ] > webrtc/video-rotation.html [ Timeout ] >-webrtc/video-unmute.html [ Timeout ] >\ No newline at end of file >+webrtc/video-unmute.html [ Timeout ] >+webrtc/video.html [ Failure ]
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 219468
:
416572
|
416584
|
416597
|
419374
|
419375
|
419437
|
419468
|
419493
|
419497
|
420236
|
420249
|
420343
|
420601
|
420617