Open Bug 1504834 Opened 2 years ago Updated 11 months ago

Skia needs to swizzle on big endian hosts

Categories

(Core :: Graphics, defect, P3)

65 Branch
Desktop
Linux
defect

Tracking

()

UNCONFIRMED
Tracking Status
firefox65 --- affected

People

(Reporter: awilfox, Unassigned)

References

(Blocks 1 open bug)

Details

Attachments

(5 files, 5 obsolete files)

Attached patch Naive widget fix (obsolete) — Splinter Review
This originally started as an attempt to fix Bug 1269654, but the further I've gone down the rabbit hole, the worse the situation actually seems.

Bug 1269654 is a bit deeper than it seems.  "Unknown image format 1" doesn't seem fatal since in *release* builds it won't crash Firefox and simply assume it's ARGB32.  However, that's not always correct.  Furthermore, trying to add the endian-swapped variant to HelpersCairo.h (like one patch somewhere here on bmo tried to do) caused wild and massive graphics corruption.

Instead of approaching it as "hammer it until it stops crashing", I decided to approach the problem differently - where was the unknown image format coming from?  After many days poking, I finally found a consistent crasher in DrawThemeWithCairo.  The attached patch to widget/gtk, which is naive and I highly recommend *not* pushing to inbound, allows us to run the browser without any of the "unknown image format 1" assertions.

Now it asserts almost all the time in VerifyRGBXCorners in the Skia draw target code.  Commenting out that assertion allows the browser to run surprisingly well without e10s (though when e10s is enabled, all the children die with "unknown image format 1" errors).  Unfortunately, something is still "off" colour-wise.  All of the VerifyRGBXCorners traces I could find were actually crashing in the compositor thread during composition; however, I don't *think* the compositor is necessarily to blame here.  An example of that crash follows.

Since Skia is always expecting pixels in LE mode, and since most of Mozilla's code actually manages to be endian-aware, my idea is to simply manipulate the Skia draw target to swizzle the pixels coming in to it on BE.  This *also* manages to work, with the same behaviour as the Cairo patch.  I've attached it, too, in case it may be helpful to look at.  Also attached is the current state of Firefox 65 on big endian targets with either of the two patches applied (without patches, it still asserts early with "unknown image format 1").


Crash Annotation GraphicsCriticalError: |[0][GFX1]: RGBX corner pixel at (0,0) in 1280x934 surface, bounded by (0,0,1280,934) is not opaque: 246,168,167,178 (t=82.9832) [GFX1]: RGBX corner pixel at (0,0) in 1280x934 surface, bounded by (0,0,1280,934) is not opaque: 246,168,167,178
Assertion failure: [GFX1]: RGBX corner pixel at (0,0) in 1280x934 surface, bounded by (0,0,1280,934) is not opaque: 246,168,167,178, at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:728
Thread 21 "Compositor" received signal SIGSEGV, Segmentation fault.
[Switching to LWP 22188]
0x00003fffb206bb60 in mozilla::gfx::Log<3, mozilla::gfx::BasicLogger>::WriteLog (aString=..., this=<optimized out>) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:729
729             MOZ_CRASH("GFX: An assert from the graphics logger");
(gdb) bt
#0  0x00003fffb206bb60 in mozilla::gfx::Log<3, mozilla::gfx::BasicLogger>::WriteLog(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (aString=..., this=<optimized out>) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:729
#1  0x00003fffb2d97f20 in mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::WriteLog(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (aString=..., this=0x3fffacc31730) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:727
#2  0x00003fffb2d97f20 in mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::Flush() (this=0x3fffacc31730) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:285
#3  0x00003fffb2d97f20 in mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::~Log() (this=0x3fffacc31730, __in_chrg=<optimized out>) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:277
#4  0x00003fffb2d97f20 in mozilla::gfx::VerifyRGBXCorners
    (aMatrix=0x500, aBounds=0x1400, aFormat=<optimized out>, aStride=5120, aSize=..., aData=0x3fffaa7bf020 "\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262\366\250\247\262"...) at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:219
#5  0x00003fffb2d97f20 in mozilla::gfx::GetSkImageForSurface(mozilla::gfx::SourceSurface*, mozilla::gfx::Rect const*, mozilla::gfx::Matrix const*) (aSurface=<optimized out>, aBounds=0x3fffacc32688, aMatrix=0x3fffacc31c8c)
    at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:271
#6  0x00003fffb2d98208 in mozilla::gfx::SetPaintPattern(SkPaint&, mozilla::gfx::Pattern const&, mozilla::gfx::Float, SkMatrix const*, mozilla::gfx::Rect const*) (aPaint=..., aPattern=..., aAlpha=<optimized out>, aMatrix=0x0, aBounds=0x3fffacc32688)
    at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:523
#7  0x00003fffb2d9a380 in mozilla::gfx::DrawTargetSkia::FillRect(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::Pattern const&, mozilla::gfx::DrawOptions const&) (this=0x157ae7de0, aRect=..., aPattern=..., aOptions=...)
    at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:804
#8  0x00003fffb2fcf430 in mozilla::layers::FillRectWithMask(mozilla::gfx::DrawTarget*, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::SourceSurface*, mozilla::gfx::SamplingFilter, mozilla::gfx::DrawOptions const&, mozilla::gfx::ExtendMode, mozilla::gfx::SourceSurface*, mozilla::gfx::BaseMatrix<float> const*, mozilla::gfx::BaseMatrix<float> const*)
    (aDT=0x157ae7de0, aRect=..., aSurface=0x157aedf80, aSamplingFilter=mozilla::gfx::SamplingFilter::LINEAR, aOptions=..., aExtendMode=<optimized out>, aMaskSource=0x0, aMaskTransform=0x3fffacc32118, aSurfaceTransform=0x3fffacc31e00)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicLayersImpl.cpp:151
#9  0x00003fffb2fdda94 in mozilla::layers::DrawTextureSurface
    (aSurfaceTransform=0x3fffacc31e00, aMaskTransform=0x3fffacc32118, aMask=0x0, aExtendMode=<optimized out>, aOptions=..., aSamplingFilter=mozilla::gfx::SamplingFilter::LINEAR, aSource=0x157aedf80, aDestRect=..., aDest=0x157ae7de0)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:425
#10 0x00003fffb2fdda94 in mozilla::layers::DrawSurfaceWithTextureCoords<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> >(mozilla::gfx::DrawTarget*, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::Rect const&, mozilla::gfx::SourceSurface*, mozilla::gfx::Rect const&, mozilla::gfx::SamplingFilter, mozilla::gfx::DrawOptions const&, mozilla::gfx::SourceSurface*, mozilla::gfx::Matrix const*)
    (aDest=0x157ae7de0, aGeometry=..., aDestRect=..., aSource=0x157aedf80, aTextureCoords=..., aSamplingFilter=<optimized out>, aOptions=..., aMask=0x0, aMaskTransform=0x3fffacc32118) at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:483
#11 0x00003fffb2fdf240 in mozilla::layers::BasicCompositor::DrawGeometry<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, bool)
    (this=<optimized out>, aGeometry=..., aRect=..., aClipRect=..., aEffectChain=..., aOpacity=1, aTransform=..., aVisibleRect=..., aEnableAA=true) at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:779
#12 0x00003fffb2fd4ab0 in mozilla::layers::BasicCompositor::DrawQuad(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&) (this=<optimized out>, aRect=..., aClipRect=..., aEffectChain=..., aOpacity=<optimized out>, aTransform=..., aVisibleRect=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:645
#13 0x00003fffb2ed8508 in mozilla::layers::Compositor::DrawGeometry(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (this=
    0x155291d40, aRect=..., aClipRect=..., aEffectChain=..., aOpacity=1, aTransform=..., aVisibleRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/Compositor.cpp:228
#14 0x00003fffb300ef68 in mozilla::layers::Compositor::DrawGeometry(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (aGeometry=..., aTransform=..., aOpacity=<optimized out>, aEffectChain=..., aClipRect=..., aRect=..., this=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/mozilla/layers/Compositor.h:341
#15 0x00003fffb300ef68 in mozilla::layers::ContentHostTexture::Composite(mozilla::layers::Compositor*, mozilla::layers::LayerComposite*, mozilla::layers::EffectChain&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::SamplingFilter, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const*, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&)
    (this=0x157ae1020, aCompositor=0x155291d40, aLayer=<optimized out>, aEffectChain=..., aOpacity=1, aTransform=..., aSamplingFilter=<optimized out>, aClipRect=..., aVisibleRegion=0x3fffacc329b8, aGeometry=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContentHost.cpp:187
#16 0x00003fffb3024be4 in mozilla::layers::PaintedLayerComposite::<lambda(mozilla::layers::EffectChain&, const IntRect&)>::operator()(mozilla::layers::EffectChain &, const mozilla::gfx::IntRect &) const (__closure=0x3fffacc329d0, effectChain=..., clipRect=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/PaintedLayerComposite.cpp:126
#17 0x00003fffb3032fe4 in mozilla::layers::RenderWithAllMasks<mozilla::layers::PaintedLayerComposite::RenderLayer(const IntRect&, const mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> >&)::<lambda(mozilla::layers::EffectChain&, const IntRect&)> >
    (aRenderCallback=..., aClipRect=..., aCompositor=<optimized out>, aLayer=0x157ae8480) at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/mozilla/layers/LayerManagerComposite.h:743
#18 0x00003fffb3032fe4 in mozilla::layers::PaintedLayerComposite::RenderLayer(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (this=0x157ae8480, aClipRect=..., aGeometry=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/PaintedLayerComposite.cpp:127
#19 0x00003fffb301dffc in mozilla::layers::RenderLayers<mozilla::layers::ContainerLayerComposite>(mozilla::layers::ContainerLayerComposite*, mozilla::layers::LayerManagerComposite*, mozilla::gfx::IntRectTyped<mozilla::RenderTargetPixel> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (aContainer=0x157ae8060, aManager=0x155291e40, aClipRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContainerLayerComposite.cpp:456
#20 0x00003fffb301ec38 in mozilla::layers::ContainerRender<mozilla::layers::ContainerLayerComposite>(mozilla::layers::ContainerLayerComposite*, mozilla::layers::LayerManagerComposite*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (aContainer=<optimized out>, aManager=<optimized out>, aClipRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContainerLayerComposite.cpp:622
#21 0x00003fffb3010910 in mozilla::layers::ContainerLayerComposite::RenderLayer(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&)
    (this=<optimized out>, aClipRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContainerLayerComposite.cpp:704
#22 0x00003fffb302ea74 in mozilla::layers::LayerManagerComposite::Render(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&) (this=0x155291e40, aInvalidRegion=..., aOpaqueRegion=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/LayerManagerComposite.cpp:964
#23 0x00003fffb30357c4 in mozilla::layers::LayerManagerComposite::UpdateAndRender() (this=0x155291e40) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/LayerManagerComposite.cpp:544
#24 0x00003fffb30359f8 in mozilla::layers::LayerManagerComposite::EndTransaction(mozilla::TimeStamp const&, mozilla::layers::LayerManager::EndTransactionFlags) (this=0x155291e40, aTimeStamp=..., aFlags=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/LayerManagerComposite.cpp:465
#25 0x00003fffb305c0e8 in mozilla::layers::CompositorBridgeParent::CompositeToTarget(mozilla::gfx::DrawTarget*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const*) (this=0x15526d440, aTarget=<optimized out>, aRect=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/ipc/CompositorBridgeParent.cpp:1101
#26 0x00003fffb304d728 in mozilla::layers::CompositorVsyncScheduler::Composite(mozilla::TimeStamp) (this=0x1552a0ec0, aVsyncTimestamp=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/ipc/CompositorVsyncScheduler.cpp:246
#27 0x00003fffb305ff8c in mozilla::detail::RunnableMethodArguments<mozilla::TimeStamp>::applyImpl<mozilla::layers::CompositorVsyncScheduler, void (mozilla::layers::CompositorVsyncScheduler::*)(mozilla::TimeStamp), StoreCopyPassByConstLRef<mozilla::TimeStamp>, 0ul>(mozilla::layers::CompositorVsyncScheduler*, void (mozilla::layers::CompositorVsyncScheduler::*)(mozilla::TimeStamp), mozilla::Tuple<StoreCopyPassByConstLRef<mozilla::TimeStamp> >&, std::integer_sequence<unsigned long, 0ul>) (args=..., m=<optimized out>, o=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/nsThreadUtils.h:1191
#28 0x00003fffb305ff8c in _ZN7mozilla6detail23RunnableMethodArgumentsIJNS_9TimeStampEEE5applyINS_6layers24CompositorVsyncSchedulerEMS6_FvS2_EEEDTcl9applyImplfp_fp0_dtdefpT10mArgumentstlSt16integer_sequenceImJLm0EEEEEEPT_T0_
    (m=<optimized out>, o=<optimized out>, this=<optimized out>) at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/nsThreadUtils.h:1198
#29 0x00003fffb305ff8c in mozilla::detail::RunnableMethodImpl<mozilla::layers::CompositorVsyncScheduler*, void (mozilla::layers::CompositorVsyncScheduler::*)(mozilla::TimeStamp), true, (mozilla::RunnableKind)1, mozilla::TimeStamp>::Run() (this=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/nsThreadUtils.h:1242
#30 0x00003fffb2648498 in MessageLoop::RunTask(already_AddRefed<nsIRunnable>) (this=0x3fffacc335e8, aTask=...) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:451
#31 0x00003fffb264a454 in MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask&&) (this=0x3fffacc335e8, pending_task=...) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:459
#32 0x00003fffb264dc58 in MessageLoop::DoWork() (this=0x3fffacc335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:534
#33 0x00003fffb26444dc in base::MessagePumpDefault::Run(base::MessagePump::Delegate*) (this=0x15597bd00, delegate=0x3fffacc335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_pump_default.cc:38
#34 0x00003fffb2646b84 in MessageLoop::RunInternal() (this=0x3fffacc335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:325
#35 0x00003fffb2646c38 in MessageLoop::RunHandler() (this=0x3fffacc335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:318
#36 0x00003fffb2646c38 in MessageLoop::Run() (this=0x3fffacc335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:298
#37 0x00003fffb265a77c in base::Thread::ThreadMain() (this=0x155979da0) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/thread.cc:198
#38 0x00003fffb263e3c0 in ThreadFunc(void*) (closure=<optimized out>) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/platform_thread_posix.cc:40
#39 0x00003fffbc65e7ec in start (p=0x3fffacc33870) at src/thread/pthread_create.c:147
#40 0x00003fffbc66a568 in __clone () at src/thread/powerpc64/clone.s:43
With layers.force-active, there's some rather interesting things to note.

1) All graphics are now rendered correctly.  There is no more 'blue tint' on PNGs, JPEGs, etc.

2) All text is invisible.  Enabling paint flashing shows what looks like yellow drop shadows on some bits of freshly-drawn text.  Highlighting areas with text shows the text properly (white text on navy blue highlight background, just as it should be).

3) See attachment for the way XUL UI elements look.  I moved the mouse cursor over the area with the proper colours.  Deactivating and reactivating the window makes the entire area look like "hot dog theme".

I re-enabled the VerifyRGBXCorners assertion to attempt to see what I could find with it.  The surface that is triggering it is of type SourceSurfaceRawData.  I noticed that the pixels were exact opposite of what they should be (255,239,240,241 instead of 241,240,239,255), so I added:

#if MOZ_BIG_ENDIAN
  if (aSurface->GetType() == SurfaceType::DATA) {
    if (surf->GetFormat() == SurfaceFormat::B8G8R8X8 && surf->GetData()[3] != 0xFF) {
      SwizzleData(surf->GetData(), surf->Stride(), SurfaceFormat::B8G8R8X8,
                  surf->GetData(), surf->Stride(), SurfaceFormat::X8R8G8B8,
                  surf->GetSize());
    }
  }
#endif

to GetSkImageForSurface.  This helped... but then further down in the surface, it was in the wrong order again (255,192,194,196 instead of 196,194,192,255).  Looking in gdb:

(gdb) x/20x aData
0x3fff9aaa3020: 0xf1f0efff      0xf1f0efff      0xf1f0efff      0xf1f0efff
0x3fff9aaa3030: 0xf1f0efff      0xf1f0efff      0xf1f0efff      0xf1f0efff
0x3fff9aaa3040: 0xf1f0efff      0xf1f0efff      0xf1f0efff      0xf1f0efff
0x3fff9aaa3050: 0xf1f0efff      0xf1f0efff      0xf1f0efff      0xf1f0efff
0x3fff9aaa3060: 0xf1f0efff      0xf1f0efff      0xf1f0efff      0xf1f0efff
(gdb) x/20x aData + 373760
0x3fff9aafe420: 0xffc0c2c4      0xffc0c2c4      0xffc0c2c4      0xffc0c2c4
0x3fff9aafe430: 0xffc0c2c4      0xffc0c2c4      0xffc0c2c4      0xffc0c2c4
0x3fff9aafe440: 0xffc0c2c4      0xffc0c2c4      0xffc0c2c4      0xffc0c2c4
0x3fff9aafe450: 0xffc0c2c4      0xffc0c2c4      0xffc0c2c4      0xffc0c2c4
0x3fff9aafe460: 0xffc0c2c4      0xffc0c2c4      0xffc0c2c4      0xffc0c2c4

Now I'm *really* lost.
Okay, here's a new angle: let's just make swizzling not required at all.  Looking at Oracle's Firefox 60 ESR patchset for Solaris SPARC64, I noticed they were just removing the endian casing from gfx/2d/Types.h.  I applied the same patch to central (I think my tree is 4 or 5 days old now) and now all the XUL elements are working properly, and VerifyRGBXCorners is able to verify corners without asserting.  In fact, pretty much the entire browser is working properly now.  The only issue is that some images and some text (but not all images, nor all text) still have some blue tint to them.  Using layers.force-active, the blue tint disappears from the images, and the blue text disappears entirely (but is still highlightable as before).
Attachment #9022741 - Attachment is obsolete: true
Attachment #9023138 - Attachment is obsolete: true
Again, this patch doesn't fix everything, but it is a massive step in the right direction towards fully working composition and display on BE.
Attachment #9022736 - Attachment is obsolete: true
Attachment #9022738 - Attachment is obsolete: true
Okay, without e10s enabled, it never crashes but it does have those small glitches.  If e10s *is* enabled, I'm able to get it to assert sometimes by switching tabs.  This matches with a behaviour that I see very infrequently with e10s off: sometimes, when I switch tabs, the graphics look okay for a brief moment before "gaining" the blue tint.  This really suggests to me there must a compositor issue somewhere.

Crash Annotation GraphicsCriticalError: |[0][GFX1]: RGBX corner pixel at (337,17) in 1280x934 surface, bounded by (0,1,675,32) is not opaque: 13,253,254,255 (t=123.36) [GFX1]: RGBX corner pixel at (337,17) in 1280x934 surface, bounded by (0,1,675,32) is not opaque: 13,253,254,255
Assertion failure: [GFX1]: RGBX corner pixel at (337,17) in 1280x934 surface, bounded by (0,1,675,32) is not opaque: 13,253,254,255, at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:728

Thread 20 "Compositor" received signal SIGSEGV, Segmentation fault.
[Switching to LWP 32872]
0x00003fff7e94ab68 in mozilla::gfx::Log<3, mozilla::gfx::BasicLogger>::WriteLog (aString=..., this=<optimized out>) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:729
729             MOZ_CRASH("GFX: An assert from the graphics logger");
(gdb) bt
#0  0x00003fff7e94ab68 in mozilla::gfx::Log<3, mozilla::gfx::BasicLogger>::WriteLog(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (aString=..., this=<optimized out>) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:729
#1  0x00003fff7f701494 in mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::WriteLog(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (aString=..., this=0x3fff79531720) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:727
#2  0x00003fff7f701494 in mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::Flush() (this=0x3fff79531720) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:285
#3  0x00003fff7f6f98d8 in mozilla::gfx::Log<1, mozilla::gfx::CriticalLogger>::~Log() (this=0x3fff79531710, __in_chrg=<optimized out>) at /var/clean/mozppc/mozilla-unified/gfx/2d/Logging.h:277
#4  0x00003fff7f6f98d8 in mozilla::gfx::VerifyRGBXCorners
    (aMatrix=0x3fff795319e8, aBounds=0x11, aFormat=<optimized out>, aStride=5120, aSize=..., aData=0x3fff72582020 "\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360\361\377\357\360", <incomplete sequence \361>...) at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:219
#5  0x00003fff7f6f98d8 in mozilla::gfx::GetSkImageForSurface(mozilla::gfx::SourceSurface*, mozilla::gfx::Rect const*, mozilla::gfx::Matrix const*) (aSurface=<optimized out>, aBounds=0x3fff79532668, aMatrix=0x3fff79531c6c)
    at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:271
#6  0x00003fff7f6f9b58 in mozilla::gfx::SetPaintPattern(SkPaint&, mozilla::gfx::Pattern const&, mozilla::gfx::Float, SkMatrix const*, mozilla::gfx::Rect const*) (aPaint=..., aPattern=..., aAlpha=<optimized out>, aMatrix=0x0, aBounds=0x3fff79532668)
    at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:523
#7  0x00003fff7f6fbd34 in mozilla::gfx::DrawTargetSkia::FillRect(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::Pattern const&, mozilla::gfx::DrawOptions const&) (this=0x10028f37160, aRect=..., aPattern=..., aOptions=...)
    at /var/clean/mozppc/mozilla-unified/gfx/2d/DrawTargetSkia.cpp:804
#8  0x00003fff7f92aea4 in mozilla::layers::FillRectWithMask(mozilla::gfx::DrawTarget*, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::SourceSurface*, mozilla::gfx::SamplingFilter, mozilla::gfx::DrawOptions const&, mozilla::gfx::ExtendMode, mozilla::gfx::SourceSurface*, mozilla::gfx::BaseMatrix<float> const*, mozilla::gfx::BaseMatrix<float> const*)
    (aDT=0x10028f37160, aRect=..., aSurface=0x1002b9237e0, aSamplingFilter=mozilla::gfx::SamplingFilter::LINEAR, aOptions=..., aExtendMode=<optimized out>, aMaskSource=0x0, aMaskTransform=0x3fff795320f8, aSurfaceTransform=0x3fff79531de0)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicLayersImpl.cpp:151
#9  0x00003fff7f939f24 in mozilla::layers::DrawTextureSurface
    (aSurfaceTransform=0x3fff79531de0, aMaskTransform=0x3fff795320f8, aMask=0x0, aExtendMode=<optimized out>, aOptions=..., aSamplingFilter=mozilla::gfx::SamplingFilter::LINEAR, aSource=0x1002b9237e0, aDestRect=..., aDest=0x10028f37160)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:425
#10 0x00003fff7f939f24 in mozilla::layers::DrawSurfaceWithTextureCoords<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> >(mozilla::gfx::DrawTarget*, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::Rect const&, mozilla::gfx::SourceSurface*, mozilla::gfx::Rect const&, mozilla::gfx::SamplingFilter, mozilla::gfx::DrawOptions const&, mozilla::gfx::SourceSurface*, mozilla::gfx::Matrix const*)
    (aDest=0x10028f37160, aGeometry=..., aDestRect=..., aSource=0x1002b9237e0, aTextureCoords=..., aSamplingFilter=<optimized out>, aOptions=..., aMask=0x0, aMaskTransform=0x3fff795320f8) at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:483
#11 0x00003fff7f93b758 in mozilla::layers::BasicCompositor::DrawGeometry<mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> >(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, bool)
    (this=<optimized out>, aGeometry=..., aRect=..., aClipRect=..., aEffectChain=..., aOpacity=1, aTransform=..., aVisibleRect=..., aEnableAA=true) at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:779
#12 0x00003fff7f9308f0 in mozilla::layers::BasicCompositor::DrawQuad(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&) (this=<optimized out>, aRect=..., aClipRect=..., aEffectChain=..., aOpacity=<optimized out>, aTransform=..., aVisibleRect=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/basic/BasicCompositor.cpp:645
#13 0x00003fff7f8421d4 in mozilla::layers::Compositor::DrawGeometry(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (this=
    0x100277a6280, aRect=..., aClipRect=..., aEffectChain=..., aOpacity=1, aTransform=..., aVisibleRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/Compositor.cpp:228
#14 0x00003fff7f96cc14 in mozilla::layers::Compositor::DrawGeometry(mozilla::gfx::RectTyped<mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::layers::EffectChain const&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (aGeometry=..., aTransform=..., aOpacity=<optimized out>, aEffectChain=..., aClipRect=..., aRect=..., this=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/mozilla/layers/Compositor.h:341
#15 0x00003fff7f96cc14 in mozilla::layers::ContentHostTexture::Composite(mozilla::layers::Compositor*, mozilla::layers::LayerComposite*, mozilla::layers::EffectChain&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits> const&, mozilla::gfx::SamplingFilter, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const*, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&)
    (this=0x100277a8d20, aCompositor=0x100277a6280, aLayer=<optimized out>, aEffectChain=..., aOpacity=1, aTransform=..., aSamplingFilter=<optimized out>, aClipRect=..., aVisibleRegion=0x3fff79532998, aGeometry=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContentHost.cpp:187
#16 0x00003fff7f98340c in mozilla::layers::PaintedLayerComposite::<lambda(mozilla::layers::EffectChain&, const IntRect&)>::operator()(mozilla::layers::EffectChain &, const mozilla::gfx::IntRect &) const (__closure=0x3fff795329b0, effectChain=..., clipRect=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/PaintedLayerComposite.cpp:126
#17 0x00003fff7f991dc4 in mozilla::layers::RenderWithAllMasks<mozilla::layers::PaintedLayerComposite::RenderLayer(const IntRect&, const mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> >&)::<lambda(mozilla::layers::EffectChain&, const IntRect&)> >
    (aRenderCallback=..., aClipRect=..., aCompositor=<optimized out>, aLayer=0x100293633a0) at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/mozilla/layers/LayerManagerComposite.h:743
#18 0x00003fff7f991dc4 in mozilla::layers::PaintedLayerComposite::RenderLayer(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&)
    (this=0x100293633a0, aClipRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/PaintedLayerComposite.cpp:127
#19 0x00003fff7f97c4c8 in mozilla::layers::RenderLayers<mozilla::layers::ContainerLayerComposite>(mozilla::layers::ContainerLayerComposite*, mozilla::layers::LayerManagerComposite*, mozilla::gfx::IntRectTyped<mozilla::RenderTargetPixel> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (aContainer=0x100291dea20, aManager=0x100277a6380, aClipRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContainerLayerComposite.cpp:456
#20 0x00003fff7f97d118 in mozilla::layers::ContainerRender<mozilla::layers::ContainerLayerComposite>(mozilla::layers::ContainerLayerComposite*, mozilla::layers::LayerManagerComposite*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) (aContainer=<optimized out>, aManager=<optimized out>, aClipRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContainerLayerComposite.cpp:622
#21 0x00003fff7f96e620 in mozilla::layers::ContainerLayerComposite::RenderLayer(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&)
    (this=<optimized out>, aClipRect=..., aGeometry=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/ContainerLayerComposite.cpp:704
#22 0x00003fff7f98d778 in mozilla::layers::LayerManagerComposite::Render(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&) (this=0x100277a6380, aInvalidRegion=..., aOpaqueRegion=...)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/LayerManagerComposite.cpp:964
#23 0x00003fff7f9946a8 in mozilla::layers::LayerManagerComposite::UpdateAndRender() (this=0x100277a6380) at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/LayerManagerComposite.cpp:544
#24 0x00003fff7f9948dc in mozilla::layers::LayerManagerComposite::EndTransaction(mozilla::TimeStamp const&, mozilla::layers::LayerManager::EndTransactionFlags) (this=0x100277a6380, aTimeStamp=..., aFlags=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/composite/LayerManagerComposite.cpp:465
#25 0x00003fff7f9bd3d4 in mozilla::layers::CompositorBridgeParent::CompositeToTarget(mozilla::gfx::DrawTarget*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const*) (this=0x100277a2d00, aTarget=<optimized out>, aRect=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/gfx/layers/ipc/CompositorBridgeParent.cpp:1105
#26 0x00003fff7f9adc74 in mozilla::layers::CompositorVsyncScheduler::Composite(mozilla::TimeStamp) (this=0x1002779d0e0, aVsyncTimestamp=...) at /var/clean/mozppc/mozilla-unified/gfx/layers/ipc/CompositorVsyncScheduler.cpp:246
#27 0x00003fff7f9c14f4 in mozilla::detail::RunnableMethodArguments<mozilla::TimeStamp>::applyImpl<mozilla::layers::CompositorVsyncScheduler, void (mozilla::layers::CompositorVsyncScheduler::*)(mozilla::TimeStamp), StoreCopyPassByConstLRef<mozilla::TimeStamp>, 0ul>(mozilla::layers::CompositorVsyncScheduler*, void (mozilla::layers::CompositorVsyncScheduler::*)(mozilla::TimeStamp), mozilla::Tuple<StoreCopyPassByConstLRef<mozilla::TimeStamp> >&, std::integer_sequence<unsigned long, 0ul>) (args=..., m=<optimized out>, o=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/nsThreadUtils.h:1191
#28 0x00003fff7f9c14f4 in _ZN7mozilla6detail23RunnableMethodArgumentsIJNS_9TimeStampEEE5applyINS_6layers24CompositorVsyncSchedulerEMS6_FvS2_EEEDTcl9applyImplfp_fp0_dtdefpT10mArgumentstlSt16integer_sequenceImJLm0EEEEEEPT_T0_
    (m=<optimized out>, o=<optimized out>, this=<optimized out>) at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/nsThreadUtils.h:1198
#29 0x00003fff7f9c14f4 in mozilla::detail::RunnableMethodImpl<mozilla::layers::CompositorVsyncScheduler*, void (mozilla::layers::CompositorVsyncScheduler::*)(mozilla::TimeStamp), true, (mozilla::RunnableKind)1, mozilla::TimeStamp>::Run() (this=<optimized out>)
    at /var/clean/mozppc/mozilla-unified/obj-powerpc64-foxkit-linux-musl/dist/include/nsThreadUtils.h:1242
#30 0x00003fff7ef5f164 in MessageLoop::RunTask(already_AddRefed<nsIRunnable>) (this=0x3fff795335e8, aTask=...) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:451
#31 0x00003fff7ef61184 in MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask&&) (this=0x3fff795335e8, pending_task=...) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:459
#32 0x00003fff7ef64ab4 in MessageLoop::DoWork() (this=0x3fff795335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:534
#33 0x00003fff7ef5b130 in base::MessagePumpDefault::Run(base::MessagePump::Delegate*) (this=0x10025b314a0, delegate=0x3fff795335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_pump_default.cc:38
#34 0x00003fff7ef5d828 in MessageLoop::RunInternal() (this=0x3fff795335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:325
#35 0x00003fff7ef5d8dc in MessageLoop::RunHandler() (this=0x3fff795335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:318
#36 0x00003fff7ef5d8dc in MessageLoop::Run() (this=0x3fff795335e8) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/message_loop.cc:298
#37 0x00003fff7ef71bf4 in base::Thread::ThreadMain() (this=0x10025b5eee0) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/thread.cc:198
#38 0x00003fff7ef54fc4 in ThreadFunc(void*) (closure=<optimized out>) at /var/clean/mozppc/mozilla-unified/ipc/chromium/src/base/platform_thread_posix.cc:40
#39 0x00003fff8962b76c in start (p=0x3fff79533870) at src/thread/pthread_create.c:147
#40 0x00003fff89637608 in __clone () at src/thread/powerpc64/clone.s:43

Just to follow up on the great work already done here:
Using the patches already posted here, I was able to find out where the blue overlay is coming from.

I followed the approach of "Skia only knows LE, so we have to modify its input".

With this patch almost all elements have the right color now, without setting layers.force-active to true.

Text is still white on white in menus and sometimes in the address bar.

The white text color comes from antialiasing, which seems to be broken on big endian.
But not for all text, only those coming from XULTextBox.

I couldn't yet find a difference between other text and XULText and why AA breaks for one and not the other.

I attached a very ugly, hacky workaround to deactivate AA only for XULText (which is mostly visible in the sandwhich-menu and plugins).

Now the text is pixely but readable.

Updated version of the XULText-AA-fix.
"Fixed" it inside skia -> Antialiasing now works

Attachment #9082934 - Attachment is obsolete: true

One more problem:
Tab-titles that are too long to fit into a tab get faded out.
On big endian this is broken and instead of fading out, the tab gets white and the font transparent, leading to an unreadable tab-title.

This patch is not a real solution, but a hack (once again).
The real solution would have been to byte-swap the correct buffer, but I could not find it.
So the next best thing is to deactivate the fading-effect. Now all tab-titles are readable, albeit not as pretty to look at as they could be.

Thanks for your continued work on this issue!

I think I see the same issues on Solaris SPARC:
https://bugzilla.mozilla.org/show_bug.cgi?id=1491297

I'm confused. This bug is closed?

(In reply to msirringhaus from comment #9)

Created attachment 9111146 [details] [diff] [review]
mozilla-bmo1504834-part3.patch

Updated version of the XULText-AA-fix.
"Fixed" it inside skia -> Antialiasing now works

I have tried to upstream the patch and it seems it would nice if you can help here:
https://bugs.chromium.org/p/skia/issues/detail?id=9781

Flags: needinfo?(msirringhaus)

(In reply to Petr Sumbera from comment #13)

(In reply to msirringhaus from comment #9)

Created attachment 9111146 [details] [diff] [review]
mozilla-bmo1504834-part3.patch

Updated version of the XULText-AA-fix.
"Fixed" it inside skia -> Antialiasing now works

I have tried to upstream the patch and it seems it would nice if you can help here:
https://bugs.chromium.org/p/skia/issues/detail?id=9781

As discussed privately: You are more than welcome to use this (or any other of my) patches and try to get it into skia.
Thanks for the effort!

Flags: needinfo?(msirringhaus)
You need to log in before you can comment on or make changes to this bug.