mozilla-skia-bmo1136958.patch
changeset 850 a2bdff616a0e
parent 845 a704b2a17e39
child 851 0855c4ac4793
child 856 c2e88e5c7aab
--- a/mozilla-skia-bmo1136958.patch	Wed Apr 08 00:59:13 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,282 +0,0 @@
-From a8ab3ec3542469c1d4e0741121eb1be17cc0acb0 Mon Sep 17 00:00:00 2001
-From: Mike Hommey <mh@glandium.org>
-Date: Mon, 9 Mar 2015 08:42:19 +0900
-Subject: [PATCH] Bug 1136958 - Reintroduce pixman code path removed in bug
- 1097776 for --disable-skia builds
-
----
- gfx/layers/basic/BasicCompositor.cpp   | 94 +++++++++++++++++++++++++++++++---
- gfx/layers/basic/BasicLayerManager.cpp | 88 +++++++++++++++++++++++++++++--
- 2 files changed, 171 insertions(+), 11 deletions(-)
-
-diff --git a/gfx/layers/basic/BasicCompositor.cpp b/gfx/layers/basic/BasicCompositor.cpp
-index 0bef076..000b591 100644
---- a/gfx/layers/basic/BasicCompositor.cpp
-+++ b/gfx/layers/basic/BasicCompositor.cpp
-@@ -17,8 +17,13 @@
- #include <algorithm>
- #include "ImageContainer.h"
- #include "gfxPrefs.h"
-+#ifdef MOZ_ENABLE_SKIA
- #include "skia/SkCanvas.h"              // for SkCanvas
- #include "skia/SkBitmapDevice.h"        // for SkBitmapDevice
-+#else
-+#define PIXMAN_DONT_DEFINE_STDINT
-+#include "pixman.h"                     // for pixman_f_transform, etc
-+#endif
- 
- namespace mozilla {
- using namespace mozilla::gfx;
-@@ -168,6 +173,7 @@ DrawSurfaceWithTextureCoords(DrawTarget *aDest,
-                    mode, aMask, aMaskTransform, &matrix);
- }
- 
-+#ifdef MOZ_ENABLE_SKIA
- static SkMatrix
- Matrix3DToSkia(const gfx3DMatrix& aMatrix)
- {
-@@ -186,10 +192,10 @@ Matrix3DToSkia(const gfx3DMatrix& aMatrix)
- }
- 
- static void
--SkiaTransform(DataSourceSurface* aDest,
--              DataSourceSurface* aSource,
--              const gfx3DMatrix& aTransform,
--              const Point& aDestOffset)
-+Transform(DataSourceSurface* aDest,
-+          DataSourceSurface* aSource,
-+          const gfx3DMatrix& aTransform,
-+          const Point& aDestOffset)
- {
-   if (aTransform.IsSingular()) {
-     return;
-@@ -225,6 +231,78 @@ SkiaTransform(DataSourceSurface* aDest,
-   SkRect destRect = SkRect::MakeXYWH(0, 0, srcSize.width, srcSize.height);
-   destCanvas.drawBitmapRectToRect(src, nullptr, destRect, &paint);
- }
-+#else
-+static pixman_transform
-+Matrix3DToPixman(const gfx3DMatrix& aMatrix)
-+{
-+  pixman_f_transform transform;
-+
-+  transform.m[0][0] = aMatrix._11;
-+  transform.m[0][1] = aMatrix._21;
-+  transform.m[0][2] = aMatrix._41;
-+  transform.m[1][0] = aMatrix._12;
-+  transform.m[1][1] = aMatrix._22;
-+  transform.m[1][2] = aMatrix._42;
-+  transform.m[2][0] = aMatrix._14;
-+  transform.m[2][1] = aMatrix._24;
-+  transform.m[2][2] = aMatrix._44;
-+
-+  pixman_transform result;
-+  pixman_transform_from_pixman_f_transform(&result, &transform);
-+
-+  return result;
-+}
-+
-+static void
-+Transform(DataSourceSurface* aDest,
-+          DataSourceSurface* aSource,
-+          const gfx3DMatrix& aTransform,
-+          const Point& aDestOffset)
-+{
-+  IntSize destSize = aDest->GetSize();
-+  pixman_image_t* dest = pixman_image_create_bits(PIXMAN_a8r8g8b8,
-+                                                  destSize.width,
-+                                                  destSize.height,
-+                                                  (uint32_t*)aDest->GetData(),
-+                                                  aDest->Stride());
-+
-+  IntSize srcSize = aSource->GetSize();
-+  pixman_image_t* src = pixman_image_create_bits(PIXMAN_a8r8g8b8,
-+                                                 srcSize.width,
-+                                                 srcSize.height,
-+                                                 (uint32_t*)aSource->GetData(),
-+                                                 aSource->Stride());
-+
-+  NS_ABORT_IF_FALSE(src && dest, "Failed to create pixman images?");
-+
-+  pixman_transform pixTransform = Matrix3DToPixman(aTransform);
-+  pixman_transform pixTransformInverted;
-+
-+  // If the transform is singular then nothing would be drawn anyway, return here
-+  if (!pixman_transform_invert(&pixTransformInverted, &pixTransform)) {
-+    pixman_image_unref(dest);
-+    pixman_image_unref(src);
-+    return;
-+  }
-+  pixman_image_set_transform(src, &pixTransformInverted);
-+
-+  pixman_image_composite32(PIXMAN_OP_SRC,
-+                           src,
-+                           nullptr,
-+                           dest,
-+                           aDestOffset.x,
-+                           aDestOffset.y,
-+                           0,
-+                           0,
-+                           0,
-+                           0,
-+                           destSize.width,
-+                           destSize.height);
-+
-+  pixman_image_unref(dest);
-+  pixman_image_unref(src);
-+}
-+#endif
- 
- static inline IntRect
- RoundOut(Rect r)
-@@ -364,12 +442,16 @@ BasicCompositor::DrawQuad(const gfx::Rect& aRect,
-     RefPtr<SourceSurface> snapshot = dest->Snapshot();
-     RefPtr<DataSourceSurface> source = snapshot->GetDataSurface();
-     RefPtr<DataSourceSurface> temp =
--      Factory::CreateDataSourceSurface(RoundOut(transformBounds).Size(), SurfaceFormat::B8G8R8A8, true);
-+      Factory::CreateDataSourceSurface(RoundOut(transformBounds).Size(), SurfaceFormat::B8G8R8A8
-+#ifdef MOZ_ENABLE_SKIA
-+        , true
-+#endif
-+        );
-     if (NS_WARN_IF(!temp)) {
-       return;
-     }
- 
--    SkiaTransform(temp, source, new3DTransform, transformBounds.TopLeft());
-+    Transform(temp, source, new3DTransform, transformBounds.TopLeft());
- 
-     transformBounds.MoveTo(0, 0);
-     buffer->DrawSurface(temp, transformBounds, transformBounds);
-diff --git a/gfx/layers/basic/BasicLayerManager.cpp b/gfx/layers/basic/BasicLayerManager.cpp
-index f4ec9e4..c849c27 100644
---- a/gfx/layers/basic/BasicLayerManager.cpp
-+++ b/gfx/layers/basic/BasicLayerManager.cpp
-@@ -46,8 +46,13 @@
- #include "nsRect.h"                     // for nsIntRect
- #include "nsRegion.h"                   // for nsIntRegion, etc
- #include "nsTArray.h"                   // for nsAutoTArray
-+#ifdef MOZ_ENABLE_SKIA
- #include "skia/SkCanvas.h"              // for SkCanvas
- #include "skia/SkBitmapDevice.h"        // for SkBitmapDevice
-+#else
-+#define PIXMAN_DONT_DEFINE_STDINT
-+#include "pixman.h"                     // for pixman_f_transform, etc
-+#endif
- class nsIWidget;
- 
- namespace mozilla {
-@@ -601,6 +606,7 @@ BasicLayerManager::SetRoot(Layer* aLayer)
-   mRoot = aLayer;
- }
- 
-+#ifdef MOZ_ENABLE_SKIA
- static SkMatrix
- BasicLayerManager_Matrix3DToSkia(const gfx3DMatrix& aMatrix)
- {
-@@ -619,10 +625,10 @@ BasicLayerManager_Matrix3DToSkia(const gfx3DMatrix& aMatrix)
- }
- 
- static void
--SkiaTransform(const gfxImageSurface* aDest,
--              RefPtr<DataSourceSurface> aSrc,
--              const gfx3DMatrix& aTransform,
--              gfxPoint aDestOffset)
-+Transform(const gfxImageSurface* aDest,
-+          RefPtr<DataSourceSurface> aSrc,
-+          const gfx3DMatrix& aTransform,
-+          gfxPoint aDestOffset)
- {
-   if (aTransform.IsSingular()) {
-     return;
-@@ -658,6 +664,78 @@ SkiaTransform(const gfxImageSurface* aDest,
-   SkRect destRect = SkRect::MakeXYWH(0, 0, srcSize.width, srcSize.height);
-   destCanvas.drawBitmapRectToRect(src, nullptr, destRect, &paint);
- }
-+#else
-+static pixman_transform
-+BasicLayerManager_Matrix3DToPixman(const gfx3DMatrix& aMatrix)
-+{
-+  pixman_f_transform transform;
-+
-+  transform.m[0][0] = aMatrix._11;
-+  transform.m[0][1] = aMatrix._21;
-+  transform.m[0][2] = aMatrix._41;
-+  transform.m[1][0] = aMatrix._12;
-+  transform.m[1][1] = aMatrix._22;
-+  transform.m[1][2] = aMatrix._42;
-+  transform.m[2][0] = aMatrix._14;
-+  transform.m[2][1] = aMatrix._24;
-+  transform.m[2][2] = aMatrix._44;
-+
-+  pixman_transform result;
-+  pixman_transform_from_pixman_f_transform(&result, &transform);
-+
-+  return result;
-+}
-+
-+static void
-+Transform(const gfxImageSurface* aDest,
-+          RefPtr<DataSourceSurface> aSrc,
-+          const gfx3DMatrix& aTransform,
-+          gfxPoint aDestOffset)
-+{
-+  IntSize destSize = ToIntSize(aDest->GetSize());
-+  pixman_image_t* dest = pixman_image_create_bits(aDest->Format() == gfxImageFormat::ARGB32 ? PIXMAN_a8r8g8b8 : PIXMAN_x8r8g8b8,
-+                                                  destSize.width,
-+                                                  destSize.height,
-+                                                  (uint32_t*)aDest->Data(),
-+                                                  aDest->Stride());
-+
-+  IntSize srcSize = aSrc->GetSize();
-+  pixman_image_t* src = pixman_image_create_bits(aSrc->GetFormat() == SurfaceFormat::B8G8R8A8 ? PIXMAN_a8r8g8b8 : PIXMAN_x8r8g8b8,
-+                                                 srcSize.width,
-+                                                 srcSize.height,
-+                                                 (uint32_t*)aSrc->GetData(),
-+                                                 aSrc->Stride());
-+
-+  NS_ABORT_IF_FALSE(src && dest, "Failed to create pixman images?");
-+
-+  pixman_transform pixTransform = BasicLayerManager_Matrix3DToPixman(aTransform);
-+  pixman_transform pixTransformInverted;
-+
-+  // If the transform is singular then nothing would be drawn anyway, return here
-+  if (!pixman_transform_invert(&pixTransformInverted, &pixTransform)) {
-+    pixman_image_unref(dest);
-+    pixman_image_unref(src);
-+    return;
-+  }
-+  pixman_image_set_transform(src, &pixTransformInverted);
-+
-+  pixman_image_composite32(PIXMAN_OP_SRC,
-+                           src,
-+                           nullptr,
-+                           dest,
-+                           aDestOffset.x,
-+                           aDestOffset.y,
-+                           0,
-+                           0,
-+                           0,
-+                           0,
-+                           destSize.width,
-+                           destSize.height);
-+
-+  pixman_image_unref(dest);
-+  pixman_image_unref(src);
-+}
-+#endif
- 
- /**
-  * Transform a surface using a gfx3DMatrix and blit to the destination if
-@@ -699,7 +777,7 @@ Transform3D(RefPtr<SourceSurface> aSource,
-   gfx3DMatrix translation = gfx3DMatrix::Translation(aBounds.x, aBounds.y, 0);
- 
-   // Transform the content and offset it such that the content begins at the origin.
--  SkiaTransform(destImage, aSource->GetDataSurface(), translation * aTransform, offset);
-+  Transform(destImage, aSource->GetDataSurface(), translation * aTransform, offset);
- 
-   // If we haven't actually drawn to aDest then return our temporary image so
-   // that the caller can do this.
--- 
-2.3.0.4.g34b1174
-