Bug 1403459 - Passing transform-style from display item directly. r=kats
MozReview-Commit-ID: JVhjSFmvnAq
--- a/gfx/layers/wr/StackingContextHelper.cpp
+++ b/gfx/layers/wr/StackingContextHelper.cpp
@@ -22,36 +22,36 @@ StackingContextHelper::StackingContextHe
wr::DisplayListBuilder& aBuilder,
const nsTArray<wr::WrFilterOp>& aFilters,
const gfx::Matrix4x4* aBoundTransform,
uint64_t aAnimationsId,
float* aOpacityPtr,
gfx::Matrix4x4* aTransformPtr,
gfx::Matrix4x4* aPerspectivePtr,
const gfx::CompositionOp& aMixBlendMode,
- bool aBackfaceVisible)
+ bool aBackfaceVisible,
+ bool aIsPreserve3D)
: mBuilder(&aBuilder)
, mScale(1.0f, 1.0f)
{
- bool is2d = !aTransformPtr || (aTransformPtr->Is2D() && !aPerspectivePtr);
if (aTransformPtr) {
mTransform = *aTransformPtr;
}
// Compute scale for fallback rendering.
gfx::Matrix transform2d;
if (aBoundTransform && aBoundTransform->CanDraw2D(&transform2d)) {
mScale = transform2d.ScaleFactors(true) * aParentSC.mScale;
}
mBuilder->PushStackingContext(wr::LayoutRect(),
aAnimationsId,
aOpacityPtr,
aTransformPtr,
- is2d ? wr::TransformStyle::Flat : wr::TransformStyle::Preserve3D,
+ aIsPreserve3D ? wr::TransformStyle::Preserve3D : wr::TransformStyle::Flat,
aPerspectivePtr,
wr::ToMixBlendMode(aMixBlendMode),
aFilters,
aBackfaceVisible);
}
StackingContextHelper::~StackingContextHelper()
{
--- a/gfx/layers/wr/StackingContextHelper.h
+++ b/gfx/layers/wr/StackingContextHelper.h
@@ -32,17 +32,18 @@ public:
wr::DisplayListBuilder& aBuilder,
const nsTArray<wr::WrFilterOp>& aFilters = nsTArray<wr::WrFilterOp>(),
const gfx::Matrix4x4* aBoundTransform = nullptr,
uint64_t aAnimationsId = 0,
float* aOpacityPtr = nullptr,
gfx::Matrix4x4* aTransformPtr = nullptr,
gfx::Matrix4x4* aPerspectivePtr = nullptr,
const gfx::CompositionOp& aMixBlendMode = gfx::CompositionOp::OP_OVER,
- bool aBackfaceVisible = true);
+ bool aBackfaceVisible = true,
+ bool aIsPreserve3D = false);
// This version of the constructor should only be used at the root level
// of the tree, so that we have a StackingContextHelper to pass down into
// the RenderLayer traversal, but don't actually want it to push a stacking
// context on the display list builder.
StackingContextHelper();
// Pops the stacking context, if one was pushed during the constructor.
~StackingContextHelper();
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -8059,17 +8059,18 @@ nsDisplayTransform::CreateWebRenderComma
aBuilder,
filters,
&newTransformMatrix,
animationsId,
nullptr,
transformForSC,
nullptr,
gfx::CompositionOp::OP_OVER,
- !BackfaceIsHidden());
+ !BackfaceIsHidden(),
+ mFrame->Extend3DContext());
return mStoredList.CreateWebRenderCommands(aBuilder, aResources, sc,
aManager, aDisplayListBuilder);
}
bool
nsDisplayTransform::UpdateScrollData(mozilla::layers::WebRenderScrollData* aData,
mozilla::layers::WebRenderLayerScrollData* aLayerData)
@@ -8670,17 +8671,18 @@ nsDisplayPerspective::CreateWebRenderCom
aBuilder,
filters,
nullptr,
0,
nullptr,
&transformForSC,
&perspectiveMatrix,
gfx::CompositionOp::OP_OVER,
- !BackfaceIsHidden());
+ !BackfaceIsHidden(),
+ true);
return mList.CreateWebRenderCommands(aBuilder, aResources, sc,
aManager, aDisplayListBuilder);
}
int32_t
nsDisplayPerspective::ZIndex() const
{
--- a/layout/reftests/transform-3d/reftest.list
+++ b/layout/reftests/transform-3d/reftest.list
@@ -44,17 +44,17 @@ fuzzy-if(winWidget&&!layersGPUAccelerate
fuzzy-if(webrender,0-1,0-3) == perspective-origin-1b.html perspective-origin-1a.html
fuzzy(3,99) random-if(Android&&!browserIsRemote) == perspective-origin-2a.html perspective-origin-2-ref.html # subpixel AA, bug 732568
fuzzy-if(winWidget&&!layersGPUAccelerated,1,61) == perspective-origin-3a.html perspective-origin-3-ref.html
== perspective-origin-4a.html perspective-origin-4-ref.html
== perspective-zindex.html green-rect.html
== perspective-zindex-2.html green-rect.html
!= sorting-1a.html sorting-1-ref.html
# Parallel planes, different z depth
-fails-if(webrender) == sorting-2a.html sorting-2-ref.html
+== sorting-2a.html sorting-2-ref.html
# Parallel planes, same z depth (shouldn't be sorted!)
== sorting-2b.html sorting-2-ref.html
== sorting-3a.html green-rect.html
# Different, but equivalent (for the given transform) transform origins
fuzzy-if(webrender,0-1,0-2) == rotatex-transformorigin-1a.html rotatex-transformorigin-1-ref.html
fuzzy-if((gtkWidget&&layersOMTC)||(winWidget&&!layersGPUAccelerated),1,86) == overflow-hidden-1a.html overflow-hidden-1-ref.html
fails-if(webrender) == transform-style-flat-1a.html transform-style-flat-1-ref.html
== willchange-containing-block.html?willchange willchange-containing-block.html?ref
@@ -79,14 +79,14 @@ fuzzy(1,15000) == opacity-preserve3d-2.h
fuzzy(1,10000) == opacity-preserve3d-3.html opacity-preserve3d-3-ref.html
fuzzy(1,10000) == opacity-preserve3d-4.html opacity-preserve3d-4-ref.html
== opacity-preserve3d-5.html opacity-preserve3d-5-ref.html
== snap-perspective-1.html snap-perspective-1-ref.html
== mask-layer-1.html mask-layer-ref.html
== mask-layer-2.html mask-layer-ref.html
fails-if(webrender) == mask-layer-3.html mask-layer-ref.html
fails-if(webrender) == split-intersect1.html split-intersect1-ref.html
-fuzzy(255,150) fails-if(webrender) == split-intersect2.html split-intersect2-ref.html
+fuzzy(255,150) == split-intersect2.html split-intersect2-ref.html
fuzzy(255,100) fails-if(webrender) == split-non-ortho1.html split-non-ortho1-ref.html
fuzzy-if(winWidget,150,120) == component-alpha-1.html component-alpha-1-ref.html
== nested-transform-1.html nested-transform-1-ref.html
== transform-geometry-1.html transform-geometry-1-ref.html
== intermediate-1.html intermediate-1-ref.html