@@ -1694,7 +1694,8 @@ void WebRenderCommandBuilder::CreateWebRenderCommands(
1694
1694
void WebRenderCommandBuilder::CreateWebRenderCommandsFromDisplayList (
1695
1695
nsDisplayList* aDisplayList, nsDisplayItem* aWrappingItem,
1696
1696
nsDisplayListBuilder* aDisplayListBuilder, const StackingContextHelper& aSc,
1697
- wr::DisplayListBuilder& aBuilder, wr::IpcResourceUpdateQueue& aResources) {
1697
+ wr::DisplayListBuilder& aBuilder, wr::IpcResourceUpdateQueue& aResources,
1698
+ bool aNewClipList) {
1698
1699
if (mDoGrouping ) {
1699
1700
MOZ_RELEASE_ASSERT (
1700
1701
aWrappingItem,
@@ -1715,7 +1716,9 @@ void WebRenderCommandBuilder::CreateWebRenderCommandsFromDisplayList(
1715
1716
}
1716
1717
1717
1718
mDumpIndent ++;
1718
- mClipManager .BeginList (aSc);
1719
+ if (aNewClipList) {
1720
+ mClipManager .BeginList (aSc);
1721
+ }
1719
1722
1720
1723
bool apzEnabled = mManager ->AsyncPanZoomEnabled ();
1721
1724
@@ -1912,7 +1915,9 @@ void WebRenderCommandBuilder::CreateWebRenderCommandsFromDisplayList(
1912
1915
}
1913
1916
1914
1917
mDumpIndent --;
1915
- mClipManager .EndList (aSc);
1918
+ if (aNewClipList) {
1919
+ mClipManager .EndList (aSc);
1920
+ }
1916
1921
}
1917
1922
1918
1923
void WebRenderCommandBuilder::PushOverrideForASR (
@@ -2484,14 +2489,16 @@ Maybe<wr::ImageMask> WebRenderCommandBuilder::BuildWrMaskImage(
2484
2489
2485
2490
nsPoint maskOffset = aMaskItem->ToReferenceFrame () - bounds.TopLeft ();
2486
2491
2492
+ bool shouldHandleOpacity = aBuilder.GetInheritedOpacity () != 1 .0f ;
2493
+
2487
2494
nsRect dirtyRect;
2488
2495
// If this mask item is being painted for the first time, some members of
2489
2496
// WebRenderMaskData are still default initialized. This is intentional.
2490
2497
if (aMaskItem->IsInvalid (dirtyRect) ||
2491
2498
!itemRect.IsEqualInterior (maskData->mItemRect ) ||
2492
2499
!(aMaskItem->Frame ()->StyleSVGReset ()->mMask == maskData->mMaskStyle ) ||
2493
2500
maskOffset != maskData->mMaskOffset || !sameScale ||
2494
- aMaskItem-> ShouldHandleOpacity () != maskData->mShouldHandleOpacity ) {
2501
+ shouldHandleOpacity != maskData->mShouldHandleOpacity ) {
2495
2502
IntSize size = itemRect.Size ().ToUnknownSize ();
2496
2503
2497
2504
if (!Factory::AllowedSurfaceSize (size)) {
@@ -2535,8 +2542,8 @@ Maybe<wr::ImageMask> WebRenderCommandBuilder::BuildWrMaskImage(
2535
2542
.PreScale (scale.width , scale.height ));
2536
2543
2537
2544
bool maskPainted = false ;
2538
- bool maskIsComplete =
2539
- aMaskItem-> PaintMask ( aDisplayListBuilder, context, &maskPainted);
2545
+ bool maskIsComplete = aMaskItem-> PaintMask (
2546
+ aDisplayListBuilder, context, shouldHandleOpacity , &maskPainted);
2540
2547
if (!maskPainted) {
2541
2548
return Nothing ();
2542
2549
}
@@ -2587,7 +2594,7 @@ Maybe<wr::ImageMask> WebRenderCommandBuilder::BuildWrMaskImage(
2587
2594
maskData->mMaskOffset = maskOffset;
2588
2595
maskData->mScale = scale;
2589
2596
maskData->mMaskStyle = aMaskItem->Frame ()->StyleSVGReset ()->mMask ;
2590
- maskData->mShouldHandleOpacity = aMaskItem-> ShouldHandleOpacity () ;
2597
+ maskData->mShouldHandleOpacity = shouldHandleOpacity ;
2591
2598
}
2592
2599
}
2593
2600
0 commit comments