Mercurial > hg > CommitWatcher
comparison tests/4e1a3919e741.diff @ 12:a0ff003319ec
foo
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Sat, 28 Sep 2013 06:40:25 -0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 11:546695da018c | 12:a0ff003319ec |
|---|---|
| 1 | |
| 2 # HG changeset patch | |
| 3 # User Nicholas Cameron <ncameron@mozilla.com> | |
| 4 # Date 1380242239 -43200 | |
| 5 # Node ID 4e1a3919e741eb8e3a4f520535671df9711b5b9b | |
| 6 # Parent a11f8859f7d84ed1a7ab3596c9242074a8a4dc35 | |
| 7 Bug 882113. Azurification of compositor classes. r=mattwoodrow | |
| 8 | |
| 9 diff --git a/gfx/gl/GLContext.cpp b/gfx/gl/GLContext.cpp | |
| 10 --- a/gfx/gl/GLContext.cpp | |
| 11 +++ b/gfx/gl/GLContext.cpp | |
| 12 @@ -2080,16 +2080,33 @@ GetActualReadFormats(GLContext* gl, GLen | |
| 13 void | |
| 14 GLContext::ReadScreenIntoImageSurface(gfxImageSurface* dest) | |
| 15 { | |
| 16 ScopedBindFramebuffer autoFB(this, 0); | |
| 17 | |
| 18 ReadPixelsIntoImageSurface(dest); | |
| 19 } | |
| 20 | |
| 21 +TemporaryRef<SourceSurface> | |
| 22 +GLContext::ReadPixelsToSourceSurface(const gfx::IntSize &aSize) | |
| 23 +{ | |
| 24 + // XXX we should do this properly one day without using the gfxImageSurface | |
| 25 + RefPtr<DataSourceSurface> dataSourceSurface = | |
| 26 + Factory::CreateDataSourceSurface(aSize, gfx::FORMAT_B8G8R8A8); | |
| 27 + nsRefPtr<gfxImageSurface> surf = | |
| 28 + new gfxImageSurface(dataSourceSurface->GetData(), | |
| 29 + gfxIntSize(aSize.width, aSize.height), | |
| 30 + dataSourceSurface->Stride(), | |
| 31 + gfxImageFormatARGB32); | |
| 32 + ReadPixelsIntoImageSurface(surf); | |
| 33 + dataSourceSurface->MarkDirty(); | |
| 34 + | |
| 35 + return dataSourceSurface; | |
| 36 +} | |
| 37 + | |
| 38 void | |
| 39 GLContext::ReadPixelsIntoImageSurface(gfxImageSurface* dest) | |
| 40 { | |
| 41 MakeCurrent(); | |
| 42 MOZ_ASSERT(dest->GetSize() != gfxIntSize(0, 0)); | |
| 43 | |
| 44 /* gfxImageFormatARGB32: | |
| 45 * RGBA+UByte: be[RGBA], le[ABGR] | |
| 46 diff --git a/gfx/gl/GLContext.h b/gfx/gl/GLContext.h | |
| 47 --- a/gfx/gl/GLContext.h | |
| 48 +++ b/gfx/gl/GLContext.h | |
| 49 @@ -47,16 +47,17 @@ class nsIThread; | |
| 50 | |
| 51 namespace android { | |
| 52 class GraphicBuffer; | |
| 53 } | |
| 54 | |
| 55 namespace mozilla { | |
| 56 namespace gfx { | |
| 57 class SharedSurface; | |
| 58 + class SourceSurface; | |
| 59 class DataSourceSurface; | |
| 60 struct SurfaceCaps; | |
| 61 } | |
| 62 | |
| 63 namespace gl { | |
| 64 class GLContext; | |
| 65 class GLLibraryEGL; | |
| 66 class GLScreenBuffer; | |
| 67 @@ -2696,16 +2697,18 @@ public: | |
| 68 * ReadScreenIntoImageSurface call dest->Flush/MarkDirty. | |
| 69 */ | |
| 70 void ReadPixelsIntoImageSurface(gfxImageSurface* dest); | |
| 71 | |
| 72 // Similar to ReadPixelsIntoImageSurface, but pulls from the screen | |
| 73 // instead of the currently bound framebuffer. | |
| 74 void ReadScreenIntoImageSurface(gfxImageSurface* dest); | |
| 75 | |
| 76 + TemporaryRef<gfx::SourceSurface> ReadPixelsToSourceSurface(const gfx::IntSize &aSize); | |
| 77 + | |
| 78 /** | |
| 79 * Copy a rectangle from one TextureImage into another. The | |
| 80 * source and destination are given in integer coordinates, and | |
| 81 * will be converted to texture coordinates. | |
| 82 * | |
| 83 * For the source texture, the wrap modes DO apply -- it's valid | |
| 84 * to use REPEAT or PAD and expect appropriate behaviour if the source | |
| 85 * rectangle extends beyond its bounds. | |
| 86 diff --git a/gfx/layers/Compositor.h b/gfx/layers/Compositor.h | |
| 87 --- a/gfx/layers/Compositor.h | |
| 88 +++ b/gfx/layers/Compositor.h | |
| 89 @@ -2,17 +2,16 @@ | |
| 90 * This Source Code Form is subject to the terms of the Mozilla Public | |
| 91 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
| 92 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
| 93 | |
| 94 #ifndef MOZILLA_GFX_COMPOSITOR_H | |
| 95 #define MOZILLA_GFX_COMPOSITOR_H | |
| 96 | |
| 97 #include "Units.h" // for ScreenPoint | |
| 98 -#include "gfxPoint.h" // for gfxIntSize | |
| 99 #include "mozilla/Assertions.h" // for MOZ_ASSERT, etc | |
| 100 #include "mozilla/RefPtr.h" // for TemporaryRef, RefCounted | |
| 101 #include "mozilla/gfx/Point.h" // for IntSize, Point | |
| 102 #include "mozilla/gfx/Rect.h" // for Rect, IntRect | |
| 103 #include "mozilla/gfx/Types.h" // for Float | |
| 104 #include "mozilla/layers/CompositorTypes.h" // for DiagnosticTypes, etc | |
| 105 #include "mozilla/layers/LayersTypes.h" // for LayersBackend | |
| 106 #include "nsTraceRefcnt.h" // for MOZ_COUNT_CTOR, etc | |
| 107 @@ -97,24 +96,24 @@ | |
| 108 * under gfx/layers/. To add a new backend, implement at least the following | |
| 109 * interfaces: | |
| 110 * - Compositor (ex. CompositorOGL) | |
| 111 * - TextureHost (ex. SharedTextureHostOGL) | |
| 112 * Depending on the type of data that needs to be serialized, you may need to | |
| 113 * add specific TextureClient implementations. | |
| 114 */ | |
| 115 | |
| 116 -class gfxContext; | |
| 117 class nsIWidget; | |
| 118 struct gfxMatrix; | |
| 119 struct nsIntSize; | |
| 120 | |
| 121 namespace mozilla { | |
| 122 namespace gfx { | |
| 123 class Matrix4x4; | |
| 124 +class DrawTarget; | |
| 125 } | |
| 126 | |
| 127 namespace layers { | |
| 128 | |
| 129 struct Effect; | |
| 130 struct EffectChain; | |
| 131 class Image; | |
| 132 class ISurfaceAllocator; | |
| 133 @@ -205,27 +204,27 @@ public: | |
| 134 * across process or thread boundaries that are compatible with this | |
| 135 * compositor. | |
| 136 */ | |
| 137 virtual TextureFactoryIdentifier GetTextureFactoryIdentifier() = 0; | |
| 138 | |
| 139 /** | |
| 140 * Properties of the compositor. | |
| 141 */ | |
| 142 - virtual bool CanUseCanvasLayerForSize(const gfxIntSize& aSize) = 0; | |
| 143 + virtual bool CanUseCanvasLayerForSize(const gfx::IntSize& aSize) = 0; | |
| 144 virtual int32_t GetMaxTextureSize() const = 0; | |
| 145 | |
| 146 /** | |
| 147 * Set the target for rendering. Results will have been written to aTarget by | |
| 148 * the time that EndFrame returns. | |
| 149 * | |
| 150 * If this method is not used, or we pass in nullptr, we target the compositor's | |
| 151 * usual swap chain and render to the screen. | |
| 152 */ | |
| 153 - virtual void SetTargetContext(gfxContext* aTarget) = 0; | |
| 154 + virtual void SetTargetContext(gfx::DrawTarget* aTarget) = 0; | |
| 155 | |
| 156 typedef uint32_t MakeCurrentFlags; | |
| 157 static const MakeCurrentFlags ForceMakeCurrent = 0x1; | |
| 158 /** | |
| 159 * Make this compositor's rendering context the current context for the | |
| 160 * underlying graphics API. This may be a global operation, depending on the | |
| 161 * API. Our context will remain the current one until someone else changes it. | |
| 162 * | |
| 163 diff --git a/gfx/layers/Layers.cpp b/gfx/layers/Layers.cpp | |
| 164 --- a/gfx/layers/Layers.cpp | |
| 165 +++ b/gfx/layers/Layers.cpp | |
| 166 @@ -1166,19 +1166,20 @@ void WriteSnapshotToDumpFile(Layer* aLay | |
| 167 WriteSnapshotToDumpFile_internal(aLayer, aSurf); | |
| 168 } | |
| 169 | |
| 170 void WriteSnapshotToDumpFile(LayerManager* aManager, gfxASurface* aSurf) | |
| 171 { | |
| 172 WriteSnapshotToDumpFile_internal(aManager, aSurf); | |
| 173 } | |
| 174 | |
| 175 -void WriteSnapshotToDumpFile(Compositor* aCompositor, gfxASurface* aSurf) | |
| 176 +void WriteSnapshotToDumpFile(Compositor* aCompositor, DrawTarget* aTarget) | |
| 177 { | |
| 178 - WriteSnapshotToDumpFile_internal(aCompositor, aSurf); | |
| 179 + nsRefPtr<gfxASurface> surf = gfxPlatform::GetPlatform()->GetThebesSurfaceForDrawTarget(aTarget); | |
| 180 + WriteSnapshotToDumpFile_internal(aCompositor, surf); | |
| 181 } | |
| 182 #endif | |
| 183 | |
| 184 void | |
| 185 Layer::Dump(FILE* aFile, const char* aPrefix, bool aDumpHtml) | |
| 186 { | |
| 187 if (aDumpHtml) { | |
| 188 fprintf(aFile, "<li><a id=\"%p\" ", this); | |
| 189 diff --git a/gfx/layers/Layers.h b/gfx/layers/Layers.h | |
| 190 --- a/gfx/layers/Layers.h | |
| 191 +++ b/gfx/layers/Layers.h | |
| 192 @@ -1955,15 +1955,15 @@ protected: | |
| 193 Layer* mTempReferent; | |
| 194 // 0 is a special value that means "no ID". | |
| 195 uint64_t mId; | |
| 196 }; | |
| 197 | |
| 198 #ifdef MOZ_DUMP_PAINTING | |
| 199 void WriteSnapshotToDumpFile(Layer* aLayer, gfxASurface* aSurf); | |
| 200 void WriteSnapshotToDumpFile(LayerManager* aManager, gfxASurface* aSurf); | |
| 201 -void WriteSnapshotToDumpFile(Compositor* aCompositor, gfxASurface* aSurf); | |
| 202 +void WriteSnapshotToDumpFile(Compositor* aCompositor, gfx::DrawTarget* aTarget); | |
| 203 #endif | |
| 204 | |
| 205 } | |
| 206 } | |
| 207 | |
| 208 #endif /* GFX_LAYERS_H */ | |
| 209 diff --git a/gfx/layers/basic/BasicCompositor.cpp b/gfx/layers/basic/BasicCompositor.cpp | |
| 210 --- a/gfx/layers/basic/BasicCompositor.cpp | |
| 211 +++ b/gfx/layers/basic/BasicCompositor.cpp | |
| 212 @@ -464,30 +464,27 @@ BasicCompositor::BeginFrame(const gfx::R | |
| 213 } | |
| 214 } | |
| 215 | |
| 216 void | |
| 217 BasicCompositor::EndFrame() | |
| 218 { | |
| 219 mRenderTarget->mDrawTarget->PopClip(); | |
| 220 | |
| 221 + RefPtr<SourceSurface> source = mRenderTarget->mDrawTarget->Snapshot(); | |
| 222 if (mCopyTarget) { | |
| 223 - nsRefPtr<gfxASurface> thebes = gfxPlatform::GetPlatform()->GetThebesSurfaceForDrawTarget(mRenderTarget->mDrawTarget); | |
| 224 - gfxContextAutoSaveRestore restore(mCopyTarget); | |
| 225 - mCopyTarget->SetOperator(gfxContext::OPERATOR_SOURCE); | |
| 226 - mCopyTarget->SetSource(thebes); | |
| 227 - mCopyTarget->Paint(); | |
| 228 - mCopyTarget = nullptr; | |
| 229 + mCopyTarget->CopySurface(source, | |
| 230 + IntRect(0, 0, mWidgetSize.width, mWidgetSize.height), | |
| 231 + IntPoint(0, 0)); | |
| 232 } else { | |
| 233 // Most platforms require us to buffer drawing to the widget surface. | |
| 234 // That's why we don't draw to mDrawTarget directly. | |
| 235 - RefPtr<SourceSurface> source = mRenderTarget->mDrawTarget->Snapshot(); | |
| 236 mDrawTarget->CopySurface(source, | |
| 237 - IntRect(0, 0, mWidgetSize.width, mWidgetSize.height), | |
| 238 - IntPoint(0, 0)); | |
| 239 + IntRect(0, 0, mWidgetSize.width, mWidgetSize.height), | |
| 240 + IntPoint(0, 0)); | |
| 241 mWidget->EndRemoteDrawing(); | |
| 242 } | |
| 243 mDrawTarget = nullptr; | |
| 244 mRenderTarget = nullptr; | |
| 245 } | |
| 246 | |
| 247 void | |
| 248 BasicCompositor::AbortFrame() | |
| 249 diff --git a/gfx/layers/basic/BasicCompositor.h b/gfx/layers/basic/BasicCompositor.h | |
| 250 --- a/gfx/layers/basic/BasicCompositor.h | |
| 251 +++ b/gfx/layers/basic/BasicCompositor.h | |
| 252 @@ -89,20 +89,20 @@ public: | |
| 253 virtual void EndFrame() MOZ_OVERRIDE; | |
| 254 virtual void EndFrameForExternalComposition(const gfxMatrix& aTransform) MOZ_OVERRIDE | |
| 255 { | |
| 256 NS_RUNTIMEABORT("We shouldn't ever hit this"); | |
| 257 } | |
| 258 virtual void AbortFrame() MOZ_OVERRIDE; | |
| 259 | |
| 260 virtual bool SupportsPartialTextureUpdate() { return true; } | |
| 261 - virtual bool CanUseCanvasLayerForSize(const gfxIntSize &aSize) MOZ_OVERRIDE { return true; } | |
| 262 + virtual bool CanUseCanvasLayerForSize(const gfx::IntSize &aSize) MOZ_OVERRIDE { return true; } | |
| 263 virtual int32_t GetMaxTextureSize() const MOZ_OVERRIDE { return INT32_MAX; } | |
| 264 virtual void SetDestinationSurfaceSize(const gfx::IntSize& aSize) MOZ_OVERRIDE { } | |
| 265 - virtual void SetTargetContext(gfxContext* aTarget) MOZ_OVERRIDE | |
| 266 + virtual void SetTargetContext(gfx::DrawTarget* aTarget) MOZ_OVERRIDE | |
| 267 { | |
| 268 mCopyTarget = aTarget; | |
| 269 } | |
| 270 | |
| 271 virtual void SetScreenRenderOffset(const ScreenPoint& aOffset) MOZ_OVERRIDE { | |
| 272 } | |
| 273 | |
| 274 virtual void MakeCurrent(MakeCurrentFlags aFlags = 0) { } | |
| 275 @@ -128,15 +128,15 @@ private: | |
| 276 nsIntSize mWidgetSize; | |
| 277 | |
| 278 // The final destination surface | |
| 279 RefPtr<gfx::DrawTarget> mDrawTarget; | |
| 280 // The current render target for drawing | |
| 281 RefPtr<BasicCompositingRenderTarget> mRenderTarget; | |
| 282 // An optional destination target to copy the results | |
| 283 // to after drawing is completed. | |
| 284 - nsRefPtr<gfxContext> mCopyTarget; | |
| 285 + RefPtr<gfx::DrawTarget> mCopyTarget; | |
| 286 }; | |
| 287 | |
| 288 } // namespace layers | |
| 289 } // namespace mozilla | |
| 290 | |
| 291 #endif /* MOZILLA_GFX_BASICCOMPOSITOR_H */ | |
| 292 diff --git a/gfx/layers/composite/LayerManagerComposite.cpp b/gfx/layers/composite/LayerManagerComposite.cpp | |
| 293 --- a/gfx/layers/composite/LayerManagerComposite.cpp | |
| 294 +++ b/gfx/layers/composite/LayerManagerComposite.cpp | |
| 295 @@ -143,17 +143,17 @@ LayerManagerComposite::UpdateRenderBound | |
| 296 | |
| 297 void | |
| 298 LayerManagerComposite::BeginTransaction() | |
| 299 { | |
| 300 mInTransaction = true; | |
| 301 } | |
| 302 | |
| 303 void | |
| 304 -LayerManagerComposite::BeginTransactionWithTarget(gfxContext *aTarget) | |
| 305 +LayerManagerComposite::BeginTransactionWithDrawTarget(DrawTarget* aTarget) | |
| 306 { | |
| 307 mInTransaction = true; | |
| 308 | |
| 309 #ifdef MOZ_LAYERS_HAVE_LOG | |
| 310 MOZ_LAYERS_LOG(("[----- BeginTransaction")); | |
| 311 Log(); | |
| 312 #endif | |
| 313 | |
| 314 @@ -757,17 +757,18 @@ void | |
| 315 LayerManagerComposite::NotifyShadowTreeTransaction() | |
| 316 { | |
| 317 mCompositor->NotifyLayersTransaction(); | |
| 318 } | |
| 319 | |
| 320 bool | |
| 321 LayerManagerComposite::CanUseCanvasLayerForSize(const gfxIntSize &aSize) | |
| 322 { | |
| 323 - return mCompositor->CanUseCanvasLayerForSize(aSize); | |
| 324 + return mCompositor->CanUseCanvasLayerForSize(gfx::IntSize(aSize.width, | |
| 325 + aSize.height)); | |
| 326 } | |
| 327 | |
| 328 TextureFactoryIdentifier | |
| 329 LayerManagerComposite::GetTextureFactoryIdentifier() | |
| 330 { | |
| 331 return mCompositor->GetTextureFactoryIdentifier(); | |
| 332 } | |
| 333 | |
| 334 diff --git a/gfx/layers/composite/LayerManagerComposite.h b/gfx/layers/composite/LayerManagerComposite.h | |
| 335 --- a/gfx/layers/composite/LayerManagerComposite.h | |
| 336 +++ b/gfx/layers/composite/LayerManagerComposite.h | |
| 337 @@ -97,18 +97,22 @@ public: | |
| 338 */ | |
| 339 virtual LayerManagerComposite* AsLayerManagerComposite() MOZ_OVERRIDE | |
| 340 { | |
| 341 return this; | |
| 342 } | |
| 343 | |
| 344 void UpdateRenderBounds(const nsIntRect& aRect); | |
| 345 | |
| 346 - void BeginTransaction() MOZ_OVERRIDE; | |
| 347 - void BeginTransactionWithTarget(gfxContext* aTarget) MOZ_OVERRIDE; | |
| 348 + virtual void BeginTransaction() MOZ_OVERRIDE; | |
| 349 + virtual void BeginTransactionWithTarget(gfxContext* aTarget) MOZ_OVERRIDE | |
| 350 + { | |
| 351 + MOZ_CRASH("Use BeginTransactionWithDrawTarget"); | |
| 352 + } | |
| 353 + void BeginTransactionWithDrawTarget(gfx::DrawTarget* aTarget); | |
| 354 | |
| 355 void NotifyShadowTreeTransaction(); | |
| 356 | |
| 357 virtual bool EndEmptyTransaction(EndTransactionFlags aFlags = END_DEFAULT) MOZ_OVERRIDE; | |
| 358 virtual void EndTransaction(DrawThebesLayerCallback aCallback, | |
| 359 void* aCallbackData, | |
| 360 EndTransactionFlags aFlags = END_DEFAULT) MOZ_OVERRIDE; | |
| 361 | |
| 362 diff --git a/gfx/layers/d3d11/CompositorD3D11.cpp b/gfx/layers/d3d11/CompositorD3D11.cpp | |
| 363 --- a/gfx/layers/d3d11/CompositorD3D11.cpp | |
| 364 +++ b/gfx/layers/d3d11/CompositorD3D11.cpp | |
| 365 @@ -344,17 +344,17 @@ CompositorD3D11::GetTextureFactoryIdenti | |
| 366 TextureFactoryIdentifier ident; | |
| 367 ident.mMaxTextureSize = GetMaxTextureSize(); | |
| 368 ident.mParentProcessId = XRE_GetProcessType(); | |
| 369 ident.mParentBackend = LAYERS_D3D11; | |
| 370 return ident; | |
| 371 } | |
| 372 | |
| 373 bool | |
| 374 -CompositorD3D11::CanUseCanvasLayerForSize(const gfxIntSize& aSize) | |
| 375 +CompositorD3D11::CanUseCanvasLayerForSize(const gfx::IntSize& aSize) | |
| 376 { | |
| 377 int32_t maxTextureSize = GetMaxTextureSize(); | |
| 378 | |
| 379 if (aSize.width > maxTextureSize || aSize.height > maxTextureSize) { | |
| 380 return false; | |
| 381 } | |
| 382 | |
| 383 return true; | |
| 384 @@ -903,23 +903,23 @@ CompositorD3D11::PaintToTarget() | |
| 385 nsRefPtr<ID3D11Texture2D> readTexture; | |
| 386 | |
| 387 HRESULT hr = mDevice->CreateTexture2D(&softDesc, nullptr, getter_AddRefs(readTexture)); | |
| 388 mContext->CopyResource(readTexture, backBuf); | |
| 389 | |
| 390 D3D11_MAPPED_SUBRESOURCE map; | |
| 391 mContext->Map(readTexture, 0, D3D11_MAP_READ, 0, &map); | |
| 392 | |
| 393 - nsRefPtr<gfxImageSurface> tmpSurface = | |
| 394 - new gfxImageSurface((unsigned char*)map.pData, | |
| 395 - gfxIntSize(bbDesc.Width, bbDesc.Height), | |
| 396 - map.RowPitch, | |
| 397 - gfxImageFormatARGB32); | |
| 398 - | |
| 399 - mTarget->SetSource(tmpSurface); | |
| 400 - mTarget->SetOperator(gfxContext::OPERATOR_SOURCE); | |
| 401 - mTarget->Paint(); | |
| 402 - | |
| 403 + destSurf->LockRect(&rect, NULL, D3DLOCK_READONLY); | |
| 404 + RefPtr<DataSourceSurface> sourceSurface = | |
| 405 + Factory::CreateWrappingDataSourceSurface((uint8_t*)map.pData, | |
| 406 + map.RowPitch, | |
| 407 + IntSize(bbDesc.Width, bbDesc.Height), | |
| 408 + FORMAT_B8G8R8A8); | |
| 409 + mTarget->CopySurface(sourceSurface, | |
| 410 + IntRect(0, 0, bbDesc.Width, bbDesc.Height), | |
| 411 + IntPoint()); | |
| 412 + mTarget->Flush(); | |
| 413 mContext->Unmap(readTexture, 0); | |
| 414 } | |
| 415 | |
| 416 } | |
| 417 } | |
| 418 diff --git a/gfx/layers/d3d11/CompositorD3D11.h b/gfx/layers/d3d11/CompositorD3D11.h | |
| 419 --- a/gfx/layers/d3d11/CompositorD3D11.h | |
| 420 +++ b/gfx/layers/d3d11/CompositorD3D11.h | |
| 421 @@ -1,16 +1,17 @@ | |
| 422 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- | |
| 423 * This Source Code Form is subject to the terms of the Mozilla Public | |
| 424 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
| 425 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
| 426 | |
| 427 #ifndef MOZILLA_GFX_COMPOSITORD3D11_H | |
| 428 #define MOZILLA_GFX_COMPOSITORD3D11_H | |
| 429 | |
| 430 +#include "mozilla/gfx/2D.h" | |
| 431 #include "mozilla/layers/Compositor.h" | |
| 432 #include "TextureD3D11.h" | |
| 433 #include <d3d11.h> | |
| 434 | |
| 435 class nsWidget; | |
| 436 | |
| 437 namespace mozilla { | |
| 438 namespace layers { | |
| 439 @@ -45,20 +46,20 @@ public: | |
| 440 virtual void Destroy() MOZ_OVERRIDE {} | |
| 441 | |
| 442 virtual TextureFactoryIdentifier | |
| 443 GetTextureFactoryIdentifier() MOZ_OVERRIDE; | |
| 444 | |
| 445 virtual TemporaryRef<DataTextureSource> | |
| 446 CreateDataTextureSource(TextureFlags aFlags = 0) MOZ_OVERRIDE { return nullptr; } | |
| 447 | |
| 448 - virtual bool CanUseCanvasLayerForSize(const gfxIntSize& aSize) MOZ_OVERRIDE; | |
| 449 + virtual bool CanUseCanvasLayerForSize(const gfx::IntSize& aSize) MOZ_OVERRIDE; | |
| 450 virtual int32_t GetMaxTextureSize() const MOZ_FINAL; | |
| 451 | |
| 452 - virtual void SetTargetContext(gfxContext* aTarget) MOZ_OVERRIDE | |
| 453 + virtual void SetTargetContext(gfx::DrawTarget* aTarget) MOZ_OVERRIDE | |
| 454 { | |
| 455 mTarget = aTarget; | |
| 456 } | |
| 457 | |
| 458 virtual void MakeCurrent(MakeCurrentFlags aFlags = 0) MOZ_OVERRIDE {} | |
| 459 | |
| 460 virtual TemporaryRef<CompositingRenderTarget> | |
| 461 CreateRenderTarget(const gfx::IntRect &aRect, | |
| 462 @@ -162,17 +163,17 @@ private: | |
| 463 RefPtr<ID3D11DeviceContext> mContext; | |
| 464 RefPtr<ID3D11Device> mDevice; | |
| 465 RefPtr<IDXGISwapChain> mSwapChain; | |
| 466 RefPtr<CompositingRenderTargetD3D11> mDefaultRT; | |
| 467 RefPtr<CompositingRenderTargetD3D11> mCurrentRT; | |
| 468 | |
| 469 DeviceAttachmentsD3D11* mAttachments; | |
| 470 | |
| 471 - nsRefPtr<gfxContext> mTarget; | |
| 472 + RefPtr<gfx::DrawTarget> mTarget; | |
| 473 | |
| 474 nsIWidget* mWidget; | |
| 475 | |
| 476 nsIntSize mSize; | |
| 477 | |
| 478 HWND mHwnd; | |
| 479 | |
| 480 D3D_FEATURE_LEVEL mFeatureLevel; | |
| 481 diff --git a/gfx/layers/d3d9/CompositorD3D9.cpp b/gfx/layers/d3d9/CompositorD3D9.cpp | |
| 482 --- a/gfx/layers/d3d9/CompositorD3D9.cpp | |
| 483 +++ b/gfx/layers/d3d9/CompositorD3D9.cpp | |
| 484 @@ -60,17 +60,17 @@ CompositorD3D9::GetTextureFactoryIdentif | |
| 485 TextureFactoryIdentifier ident; | |
| 486 ident.mMaxTextureSize = GetMaxTextureSize(); | |
| 487 ident.mParentBackend = LAYERS_D3D9; | |
| 488 ident.mParentProcessId = XRE_GetProcessType(); | |
| 489 return ident; | |
| 490 } | |
| 491 | |
| 492 bool | |
| 493 -CompositorD3D9::CanUseCanvasLayerForSize(const gfxIntSize &aSize) | |
| 494 +CompositorD3D9::CanUseCanvasLayerForSize(const IntSize &aSize) | |
| 495 { | |
| 496 int32_t maxTextureSize = GetMaxTextureSize(); | |
| 497 | |
| 498 if (aSize.width > maxTextureSize || aSize.height > maxTextureSize) { | |
| 499 return false; | |
| 500 } | |
| 501 | |
| 502 return true; | |
| 503 @@ -560,24 +560,25 @@ CompositorD3D9::PaintToTarget() | |
| 504 device()->CreateOffscreenPlainSurface(desc.Width, desc.Height, | |
| 505 D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, | |
| 506 getter_AddRefs(destSurf), NULL); | |
| 507 | |
| 508 device()->GetRenderTargetData(backBuff, destSurf); | |
| 509 | |
| 510 D3DLOCKED_RECT rect; | |
| 511 destSurf->LockRect(&rect, NULL, D3DLOCK_READONLY); | |
| 512 - mTarget->SetOperator(gfxContext::OPERATOR_SOURCE); | |
| 513 - nsRefPtr<gfxImageSurface> imageSurface = | |
| 514 - new gfxImageSurface((unsigned char*)rect.pBits, | |
| 515 - gfxIntSize(desc.Width, desc.Height), | |
| 516 - rect.Pitch, | |
| 517 - gfxImageFormatARGB32); | |
| 518 - mTarget->SetSource(imageSurface); | |
| 519 - mTarget->Paint(); | |
| 520 + RefPtr<DataSourceSurface> sourceSurface = | |
| 521 + Factory::CreateWrappingDataSourceSurface((uint8_t*)rect.pBits, | |
| 522 + rect.Pitch, | |
| 523 + IntSize(desc.Width, desc.Height), | |
| 524 + FORMAT_B8G8R8A8); | |
| 525 + mTarget->CopySurface(sourceSurface, | |
| 526 + IntRect(0, 0, desc.Width, desc.Height), | |
| 527 + IntPoint()); | |
| 528 + mTarget->Flush(); | |
| 529 destSurf->UnlockRect(); | |
| 530 } | |
| 531 | |
| 532 void | |
| 533 CompositorD3D9::ReportFailure(const nsACString &aMsg, HRESULT aCode) | |
| 534 { | |
| 535 // We could choose to abort here when hr == E_OUTOFMEMORY. | |
| 536 nsCString msg; | |
| 537 diff --git a/gfx/layers/d3d9/CompositorD3D9.h b/gfx/layers/d3d9/CompositorD3D9.h | |
| 538 --- a/gfx/layers/d3d9/CompositorD3D9.h | |
| 539 +++ b/gfx/layers/d3d9/CompositorD3D9.h | |
| 540 @@ -1,16 +1,17 @@ | |
| 541 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- | |
| 542 * This Source Code Form is subject to the terms of the Mozilla Public | |
| 543 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
| 544 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
| 545 | |
| 546 #ifndef MOZILLA_GFX_COMPOSITORD3D9_H | |
| 547 #define MOZILLA_GFX_COMPOSITORD3D9_H | |
| 548 | |
| 549 +#include "mozilla/gfx/2D.h" | |
| 550 #include "mozilla/layers/Compositor.h" | |
| 551 #include "mozilla/layers/TextureD3D9.h" | |
| 552 #include "DeviceManagerD3D9.h" | |
| 553 | |
| 554 class nsWidget; | |
| 555 | |
| 556 namespace mozilla { | |
| 557 namespace layers { | |
| 558 @@ -22,20 +23,20 @@ public: | |
| 559 ~CompositorD3D9(); | |
| 560 | |
| 561 virtual bool Initialize() MOZ_OVERRIDE; | |
| 562 virtual void Destroy() MOZ_OVERRIDE {} | |
| 563 | |
| 564 virtual TextureFactoryIdentifier | |
| 565 GetTextureFactoryIdentifier() MOZ_OVERRIDE; | |
| 566 | |
| 567 - virtual bool CanUseCanvasLayerForSize(const gfxIntSize &aSize) MOZ_OVERRIDE; | |
| 568 + virtual bool CanUseCanvasLayerForSize(const gfx::IntSize &aSize) MOZ_OVERRIDE; | |
| 569 virtual int32_t GetMaxTextureSize() const MOZ_FINAL; | |
| 570 | |
| 571 - virtual void SetTargetContext(gfxContext *aTarget) MOZ_OVERRIDE | |
| 572 + virtual void SetTargetContext(gfx::DrawTarget *aTarget) MOZ_OVERRIDE | |
| 573 { | |
| 574 mTarget = aTarget; | |
| 575 } | |
| 576 | |
| 577 virtual void MakeCurrent(MakeCurrentFlags aFlags = 0) MOZ_OVERRIDE {} | |
| 578 | |
| 579 virtual TemporaryRef<CompositingRenderTarget> | |
| 580 CreateRenderTarget(const gfx::IntRect &aRect, | |
| 581 @@ -123,17 +124,17 @@ private: | |
| 582 nsRefPtr<SwapChainD3D9> mSwapChain; | |
| 583 | |
| 584 /* Widget associated with this layer manager */ | |
| 585 nsIWidget *mWidget; | |
| 586 | |
| 587 /* | |
| 588 * Context target, NULL when drawing directly to our swap chain. | |
| 589 */ | |
| 590 - nsRefPtr<gfxContext> mTarget; | |
| 591 + RefPtr<gfx::DrawTarget> mTarget; | |
| 592 | |
| 593 RefPtr<CompositingRenderTargetD3D9> mDefaultRT; | |
| 594 RefPtr<CompositingRenderTargetD3D9> mCurrentRT; | |
| 595 | |
| 596 nsIntSize mSize; | |
| 597 }; | |
| 598 | |
| 599 } | |
| 600 diff --git a/gfx/layers/ipc/CompositorParent.cpp b/gfx/layers/ipc/CompositorParent.cpp | |
| 601 --- a/gfx/layers/ipc/CompositorParent.cpp | |
| 602 +++ b/gfx/layers/ipc/CompositorParent.cpp | |
| 603 @@ -18,16 +18,17 @@ | |
| 604 #include "base/task.h" // for CancelableTask, etc | |
| 605 #include "base/thread.h" // for Thread | |
| 606 #include "base/tracked.h" // for FROM_HERE | |
| 607 #include "gfxContext.h" // for gfxContext | |
| 608 #include "gfxPlatform.h" // for gfxPlatform | |
| 609 #include "ipc/ShadowLayersManager.h" // for ShadowLayersManager | |
| 610 #include "mozilla/AutoRestore.h" // for AutoRestore | |
| 611 #include "mozilla/DebugOnly.h" // for DebugOnly | |
| 612 +#include "mozilla/gfx/2D.h" // for DrawTarget | |
| 613 #include "mozilla/gfx/Point.h" // for IntSize | |
| 614 #include "mozilla/ipc/Transport.h" // for Transport | |
| 615 #include "mozilla/layers/APZCTreeManager.h" // for APZCTreeManager | |
| 616 #include "mozilla/layers/AsyncCompositionManager.h" | |
| 617 #include "mozilla/layers/BasicCompositor.h" // for BasicCompositor | |
| 618 #include "mozilla/layers/Compositor.h" // for Compositor | |
| 619 #include "mozilla/layers/CompositorOGL.h" // for CompositorOGL | |
| 620 #include "mozilla/layers/CompositorTypes.h" | |
| 621 @@ -47,16 +48,17 @@ | |
| 622 #include "mozilla/layers/CompositorD3D11.h" | |
| 623 #include "mozilla/layers/CompositorD3D9.h" | |
| 624 #endif | |
| 625 #include "GeckoProfiler.h" | |
| 626 | |
| 627 using namespace base; | |
| 628 using namespace mozilla; | |
| 629 using namespace mozilla::ipc; | |
| 630 +using namespace mozilla::gfx; | |
| 631 using namespace std; | |
| 632 | |
| 633 namespace mozilla { | |
| 634 namespace layers { | |
| 635 | |
| 636 CompositorParent::LayerTreeState::LayerTreeState() | |
| 637 : mParent(nullptr) | |
| 638 { | |
| 639 @@ -290,17 +292,23 @@ CompositorParent::RecvResume() | |
| 640 return true; | |
| 641 } | |
| 642 | |
| 643 bool | |
| 644 CompositorParent::RecvMakeSnapshot(const SurfaceDescriptor& aInSnapshot, | |
| 645 SurfaceDescriptor* aOutSnapshot) | |
| 646 { | |
| 647 AutoOpenSurface opener(OPEN_READ_WRITE, aInSnapshot); | |
| 648 - nsRefPtr<gfxContext> target = new gfxContext(opener.Get()); | |
| 649 + gfxIntSize size = opener.Size(); | |
| 650 + // XXX CreateDrawTargetForSurface will always give us a Cairo surface, we can | |
| 651 + // do better if AutoOpenSurface uses Moz2D directly. | |
| 652 + RefPtr<DrawTarget> target = | |
| 653 + gfxPlatform::GetPlatform()->CreateDrawTargetForSurface(opener.Get(), | |
| 654 + IntSize(size.width, | |
| 655 + size.height)); | |
| 656 ComposeToTarget(target); | |
| 657 *aOutSnapshot = aInSnapshot; | |
| 658 return true; | |
| 659 } | |
| 660 | |
| 661 bool | |
| 662 CompositorParent::RecvFlushRendering() | |
| 663 { | |
| 664 @@ -536,26 +544,26 @@ CompositorParent::Composite() | |
| 665 if (mExpectedComposeTime + TimeDuration::FromMilliseconds(15) < TimeStamp::Now()) { | |
| 666 printf_stderr("Compositor: Composite took %i ms.\n", | |
| 667 15 + (int)(TimeStamp::Now() - mExpectedComposeTime).ToMilliseconds()); | |
| 668 } | |
| 669 #endif | |
| 670 } | |
| 671 | |
| 672 void | |
| 673 -CompositorParent::ComposeToTarget(gfxContext* aTarget) | |
| 674 +CompositorParent::ComposeToTarget(DrawTarget* aTarget) | |
| 675 { | |
| 676 PROFILER_LABEL("CompositorParent", "ComposeToTarget"); | |
| 677 AutoRestore<bool> override(mOverrideComposeReadiness); | |
| 678 mOverrideComposeReadiness = true; | |
| 679 | |
| 680 if (!CanComposite()) { | |
| 681 return; | |
| 682 } | |
| 683 - mLayerManager->BeginTransactionWithTarget(aTarget); | |
| 684 + mLayerManager->BeginTransactionWithDrawTarget(aTarget); | |
| 685 // Since CanComposite() is true, Composite() must end the layers txn | |
| 686 // we opened above. | |
| 687 Composite(); | |
| 688 } | |
| 689 | |
| 690 bool | |
| 691 CompositorParent::CanComposite() | |
| 692 { | |
| 693 diff --git a/gfx/layers/ipc/CompositorParent.h b/gfx/layers/ipc/CompositorParent.h | |
| 694 --- a/gfx/layers/ipc/CompositorParent.h | |
| 695 +++ b/gfx/layers/ipc/CompositorParent.h | |
| 696 @@ -34,16 +34,20 @@ | |
| 697 #include "nsSize.h" // for nsIntSize | |
| 698 | |
| 699 class CancelableTask; | |
| 700 class MessageLoop; | |
| 701 class gfxContext; | |
| 702 class nsIWidget; | |
| 703 | |
| 704 namespace mozilla { | |
| 705 +namespace gfx { | |
| 706 +class DrawTarget; | |
| 707 +} | |
| 708 + | |
| 709 namespace layers { | |
| 710 | |
| 711 class APZCTreeManager; | |
| 712 class AsyncCompositionManager; | |
| 713 class LayerManagerComposite; | |
| 714 class LayerTransactionParent; | |
| 715 | |
| 716 struct ScopedLayerTreeRegistration | |
| 717 @@ -216,17 +220,17 @@ protected: | |
| 718 virtual PLayerTransactionParent* | |
| 719 AllocPLayerTransactionParent(const nsTArray<LayersBackend>& aBackendHints, | |
| 720 const uint64_t& aId, | |
| 721 TextureFactoryIdentifier* aTextureFactoryIdentifier, | |
| 722 bool* aSuccess); | |
| 723 virtual bool DeallocPLayerTransactionParent(PLayerTransactionParent* aLayers); | |
| 724 virtual void ScheduleTask(CancelableTask*, int); | |
| 725 virtual void Composite(); | |
| 726 - virtual void ComposeToTarget(gfxContext* aTarget); | |
| 727 + virtual void ComposeToTarget(gfx::DrawTarget* aTarget); | |
| 728 | |
| 729 void SetEGLSurfaceSize(int width, int height); | |
| 730 | |
| 731 private: | |
| 732 void InitializeLayerManager(const nsTArray<LayersBackend>& aBackendHints); | |
| 733 void PauseComposition(); | |
| 734 void ResumeComposition(); | |
| 735 void ResumeCompositionAndResize(int width, int height); | |
| 736 diff --git a/gfx/layers/ipc/LayerTransactionParent.cpp b/gfx/layers/ipc/LayerTransactionParent.cpp | |
| 737 --- a/gfx/layers/ipc/LayerTransactionParent.cpp | |
| 738 +++ b/gfx/layers/ipc/LayerTransactionParent.cpp | |
| 739 @@ -195,17 +195,17 @@ LayerTransactionParent::RecvUpdate(const | |
| 740 MOZ_LAYERS_LOG(("[ParentSide] received txn with %d edits", cset.Length())); | |
| 741 | |
| 742 if (mDestroyed || !layer_manager() || layer_manager()->IsDestroyed()) { | |
| 743 return true; | |
| 744 } | |
| 745 | |
| 746 EditReplyVector replyv; | |
| 747 | |
| 748 - layer_manager()->BeginTransactionWithTarget(nullptr); | |
| 749 + layer_manager()->BeginTransactionWithDrawTarget(nullptr); | |
| 750 | |
| 751 for (EditArray::index_type i = 0; i < cset.Length(); ++i) { | |
| 752 const Edit& edit = cset[i]; | |
| 753 | |
| 754 switch (edit.type()) { | |
| 755 // Create* ops | |
| 756 case Edit::TOpCreateThebesLayer: { | |
| 757 MOZ_LAYERS_LOG(("[ParentSide] CreateThebesLayer")); | |
| 758 diff --git a/gfx/layers/opengl/CompositorOGL.cpp b/gfx/layers/opengl/CompositorOGL.cpp | |
| 759 --- a/gfx/layers/opengl/CompositorOGL.cpp | |
| 760 +++ b/gfx/layers/opengl/CompositorOGL.cpp | |
| 761 @@ -1256,21 +1256,20 @@ CompositorOGL::EndFrame() | |
| 762 #ifdef MOZ_DUMP_PAINTING | |
| 763 if (gfxUtils::sDumpPainting) { | |
| 764 nsIntRect rect; | |
| 765 if (mUseExternalSurfaceSize) { | |
| 766 rect = nsIntRect(0, 0, mSurfaceSize.width, mSurfaceSize.height); | |
| 767 } else { | |
| 768 mWidget->GetBounds(rect); | |
| 769 } | |
| 770 - nsRefPtr<gfxASurface> surf = gfxPlatform::GetPlatform()->CreateOffscreenSurface(rect.Size(), GFX_CONTENT_COLOR_ALPHA); | |
| 771 - nsRefPtr<gfxContext> ctx = new gfxContext(surf); | |
| 772 - CopyToTarget(ctx, mCurrentRenderTarget->GetTransform()); | |
| 773 + RefPtr<DrawTarget> target = gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(IntSize(rect.width, rect.height), FORMAT_B8G8R8A8); | |
| 774 + CopyToTarget(target, mCurrentRenderTarget->GetTransform()); | |
| 775 | |
| 776 - WriteSnapshotToDumpFile(this, surf); | |
| 777 + WriteSnapshotToDumpFile(this, target); | |
| 778 } | |
| 779 #endif | |
| 780 | |
| 781 mFrameInProgress = false; | |
| 782 | |
| 783 if (mTarget) { | |
| 784 CopyToTarget(mTarget, mCurrentRenderTarget->GetTransform()); | |
| 785 mGLContext->fBindBuffer(LOCAL_GL_ARRAY_BUFFER, 0); | |
| 786 @@ -1330,60 +1329,55 @@ CompositorOGL::AbortFrame() | |
| 787 void | |
| 788 CompositorOGL::SetDestinationSurfaceSize(const gfx::IntSize& aSize) | |
| 789 { | |
| 790 mSurfaceSize.width = aSize.width; | |
| 791 mSurfaceSize.height = aSize.height; | |
| 792 } | |
| 793 | |
| 794 void | |
| 795 -CompositorOGL::CopyToTarget(gfxContext *aTarget, const gfxMatrix& aTransform) | |
| 796 +CompositorOGL::CopyToTarget(DrawTarget *aTarget, const gfxMatrix& aTransform) | |
| 797 { | |
| 798 - nsIntRect rect; | |
| 799 + IntRect rect; | |
| 800 if (mUseExternalSurfaceSize) { | |
| 801 - rect = nsIntRect(0, 0, mSurfaceSize.width, mSurfaceSize.height); | |
| 802 + rect = IntRect(0, 0, mSurfaceSize.width, mSurfaceSize.height); | |
| 803 } else { | |
| 804 - rect = nsIntRect(0, 0, mWidgetSize.width, mWidgetSize.height); | |
| 805 + rect = IntRect(0, 0, mWidgetSize.width, mWidgetSize.height); | |
| 806 } | |
| 807 GLint width = rect.width; | |
| 808 GLint height = rect.height; | |
| 809 | |
| 810 if ((int64_t(width) * int64_t(height) * int64_t(4)) > PR_INT32_MAX) { | |
| 811 NS_ERROR("Widget size too big - integer overflow!"); | |
| 812 return; | |
| 813 } | |
| 814 | |
| 815 - nsRefPtr<gfxImageSurface> imageSurface = | |
| 816 - new gfxImageSurface(gfxIntSize(width, height), | |
| 817 - gfxImageFormatARGB32); | |
| 818 - | |
| 819 mGLContext->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, 0); | |
| 820 | |
| 821 if (!mGLContext->IsGLES2()) { | |
| 822 // GLES2 promises that binding to any custom FBO will attach | |
| 823 // to GL_COLOR_ATTACHMENT0 attachment point. | |
| 824 mGLContext->fReadBuffer(LOCAL_GL_BACK); | |
| 825 } | |
| 826 | |
| 827 - NS_ASSERTION(imageSurface->Stride() == width * 4, | |
| 828 - "Image Surfaces being created with weird stride!"); | |
| 829 - | |
| 830 - mGLContext->ReadPixelsIntoImageSurface(imageSurface); | |
| 831 + RefPtr<SourceSurface> source = | |
| 832 + mGLContext->ReadPixelsToSourceSurface(IntSize(width, height)); | |
| 833 | |
| 834 // Map from GL space to Cairo space and reverse the world transform. | |
| 835 - gfxMatrix glToCairoTransform = aTransform; | |
| 836 + Matrix glToCairoTransform = MatrixForThebesMatrix(aTransform); | |
| 837 glToCairoTransform.Invert(); | |
| 838 glToCairoTransform.Scale(1.0, -1.0); | |
| 839 - glToCairoTransform.Translate(-gfxPoint(0.0, height)); | |
| 840 + glToCairoTransform.Translate(0.0, -height); | |
| 841 | |
| 842 - gfxContextAutoSaveRestore restore(aTarget); | |
| 843 - aTarget->SetOperator(gfxContext::OPERATOR_SOURCE); | |
| 844 - aTarget->SetMatrix(glToCairoTransform); | |
| 845 - aTarget->SetSource(imageSurface); | |
| 846 - aTarget->Paint(); | |
| 847 + Matrix oldMatrix = aTarget->GetTransform(); | |
| 848 + aTarget->SetTransform(glToCairoTransform); | |
| 849 + Rect floatRect = Rect(rect.x, rect.y, rect.width, rect.height); | |
| 850 + aTarget->DrawSurface(source, floatRect, floatRect, DrawSurfaceOptions(), DrawOptions(1.0f, OP_SOURCE)); | |
| 851 + aTarget->SetTransform(oldMatrix); | |
| 852 + aTarget->Flush(); | |
| 853 } | |
| 854 | |
| 855 double | |
| 856 CompositorOGL::AddFrameAndGetFps(const TimeStamp& timestamp) | |
| 857 { | |
| 858 if (sDrawFPS) { | |
| 859 if (!mFPS) { | |
| 860 mFPS = new FPSState(); | |
| 861 diff --git a/gfx/layers/opengl/CompositorOGL.h b/gfx/layers/opengl/CompositorOGL.h | |
| 862 --- a/gfx/layers/opengl/CompositorOGL.h | |
| 863 +++ b/gfx/layers/opengl/CompositorOGL.h | |
| 864 @@ -5,32 +5,30 @@ | |
| 865 | |
| 866 #ifndef MOZILLA_GFX_COMPOSITOROGL_H | |
| 867 #define MOZILLA_GFX_COMPOSITOROGL_H | |
| 868 | |
| 869 #include "GLContextTypes.h" // for GLContext, etc | |
| 870 #include "GLDefs.h" // for GLuint, LOCAL_GL_TEXTURE_2D, etc | |
| 871 #include "LayerManagerOGLProgram.h" // for ShaderProgramOGL, etc | |
| 872 #include "Units.h" // for ScreenPoint | |
| 873 -#include "gfxContext.h" // for gfxContext | |
| 874 -#include "gfxPoint.h" // for gfxIntSize | |
| 875 #include "mozilla/Assertions.h" // for MOZ_ASSERT, etc | |
| 876 #include "mozilla/Attributes.h" // for MOZ_OVERRIDE, MOZ_FINAL | |
| 877 #include "mozilla/RefPtr.h" // for TemporaryRef, RefPtr | |
| 878 +#include "mozilla/gfx/2D.h" // for DrawTarget | |
| 879 #include "mozilla/gfx/BaseSize.h" // for BaseSize | |
| 880 #include "mozilla/gfx/Point.h" // for IntSize, Point | |
| 881 #include "mozilla/gfx/Rect.h" // for Rect, IntRect | |
| 882 #include "mozilla/gfx/Types.h" // for Float, SurfaceFormat, etc | |
| 883 #include "mozilla/layers/Compositor.h" // for SurfaceInitMode, Compositor, etc | |
| 884 #include "mozilla/layers/CompositorTypes.h" // for MaskType::NumMaskTypes, etc | |
| 885 #include "mozilla/layers/LayersTypes.h" | |
| 886 #include "nsAutoPtr.h" // for nsRefPtr, nsAutoPtr | |
| 887 #include "nsCOMPtr.h" // for already_AddRefed | |
| 888 #include "nsDebug.h" // for NS_ASSERTION, NS_WARNING | |
| 889 -#include "nsISupportsImpl.h" // for gfxContext::AddRef, etc | |
| 890 #include "nsSize.h" // for nsIntSize | |
| 891 #include "nsTArray.h" // for nsAutoTArray, nsTArray, etc | |
| 892 #include "nsThreadUtils.h" // for nsRunnable | |
| 893 #include "nsTraceRefcnt.h" // for MOZ_COUNT_CTOR, etc | |
| 894 #include "nsXULAppAPI.h" // for XRE_GetProcessType | |
| 895 #include "nscore.h" // for NS_IMETHOD | |
| 896 #include "VBOArena.h" // for gl::VBOArena | |
| 897 | |
| 898 @@ -101,39 +99,39 @@ public: | |
| 899 const gfx::Point& aOffset) MOZ_OVERRIDE; | |
| 900 | |
| 901 virtual void EndFrame() MOZ_OVERRIDE; | |
| 902 virtual void EndFrameForExternalComposition(const gfxMatrix& aTransform) MOZ_OVERRIDE; | |
| 903 virtual void AbortFrame() MOZ_OVERRIDE; | |
| 904 | |
| 905 virtual bool SupportsPartialTextureUpdate() MOZ_OVERRIDE; | |
| 906 | |
| 907 - virtual bool CanUseCanvasLayerForSize(const gfxIntSize &aSize) MOZ_OVERRIDE | |
| 908 + virtual bool CanUseCanvasLayerForSize(const gfx::IntSize &aSize) MOZ_OVERRIDE | |
| 909 { | |
| 910 if (!mGLContext) | |
| 911 return false; | |
| 912 int32_t maxSize = GetMaxTextureSize(); | |
| 913 - return aSize <= gfxIntSize(maxSize, maxSize); | |
| 914 + return aSize <= gfx::IntSize(maxSize, maxSize); | |
| 915 } | |
| 916 | |
| 917 virtual int32_t GetMaxTextureSize() const MOZ_OVERRIDE; | |
| 918 | |
| 919 /** | |
| 920 * Set the size of the EGL surface we're rendering to, if we're rendering to | |
| 921 * an EGL surface. | |
| 922 */ | |
| 923 virtual void SetDestinationSurfaceSize(const gfx::IntSize& aSize) MOZ_OVERRIDE; | |
| 924 | |
| 925 virtual void SetScreenRenderOffset(const ScreenPoint& aOffset) MOZ_OVERRIDE { | |
| 926 mRenderOffset = aOffset; | |
| 927 } | |
| 928 | |
| 929 virtual void MakeCurrent(MakeCurrentFlags aFlags = 0) MOZ_OVERRIDE; | |
| 930 | |
| 931 - virtual void SetTargetContext(gfxContext* aTarget) MOZ_OVERRIDE | |
| 932 + virtual void SetTargetContext(gfx::DrawTarget* aTarget) MOZ_OVERRIDE | |
| 933 { | |
| 934 mTarget = aTarget; | |
| 935 } | |
| 936 | |
| 937 virtual void PrepareViewport(const gfx::IntSize& aSize, | |
| 938 const gfxMatrix& aWorldTransform) MOZ_OVERRIDE; | |
| 939 | |
| 940 | |
| 941 @@ -166,17 +164,17 @@ public: | |
| 942 * Doing so lets us use gralloc the way it has been designed to be used | |
| 943 * (see https://wiki.mozilla.org/Platform/GFX/Gralloc) | |
| 944 */ | |
| 945 GLuint GetTemporaryTexture(GLenum aUnit); | |
| 946 private: | |
| 947 /** | |
| 948 * Context target, nullptr when drawing directly to our swap chain. | |
| 949 */ | |
| 950 - nsRefPtr<gfxContext> mTarget; | |
| 951 + RefPtr<gfx::DrawTarget> mTarget; | |
| 952 | |
| 953 /** Widget associated with this compositor */ | |
| 954 nsIWidget *mWidget; | |
| 955 nsIntSize mWidgetSize; | |
| 956 nsRefPtr<GLContext> mGLContext; | |
| 957 | |
| 958 /** The size of the surface we are rendering to */ | |
| 959 nsIntSize mSurfaceSize; | |
| 960 @@ -295,17 +293,17 @@ private: | |
| 961 TextureSource *aTexture); | |
| 962 | |
| 963 void CleanupResources(); | |
| 964 | |
| 965 /** | |
| 966 * Copies the content of our backbuffer to the set transaction target. | |
| 967 * Does not restore the target FBO, so only call from EndFrame. | |
| 968 */ | |
| 969 - void CopyToTarget(gfxContext *aTarget, const gfxMatrix& aWorldMatrix); | |
| 970 + void CopyToTarget(gfx::DrawTarget* aTarget, const gfxMatrix& aWorldMatrix); | |
| 971 | |
| 972 /** | |
| 973 * Records the passed frame timestamp and returns the current estimated FPS. | |
| 974 */ | |
| 975 double AddFrameAndGetFps(const TimeStamp& timestamp); | |
| 976 | |
| 977 bool mDestroyed; | |
| 978 | |
| 979 diff --git a/gfx/thebes/gfx2DGlue.h b/gfx/thebes/gfx2DGlue.h | |
| 980 --- a/gfx/thebes/gfx2DGlue.h | |
| 981 +++ b/gfx/thebes/gfx2DGlue.h | |
| 982 @@ -194,16 +194,22 @@ inline JoinStyle ToJoinStyle(gfxContext: | |
| 983 } | |
| 984 | |
| 985 inline gfxMatrix ThebesMatrix(const Matrix &aMatrix) | |
| 986 { | |
| 987 return gfxMatrix(aMatrix._11, aMatrix._12, aMatrix._21, | |
| 988 aMatrix._22, aMatrix._31, aMatrix._32); | |
| 989 } | |
| 990 | |
| 991 +inline Matrix MatrixForThebesMatrix(const gfxMatrix &aMatrix) | |
| 992 +{ | |
| 993 + return Matrix(aMatrix.xx, aMatrix.yx, aMatrix.xy, | |
| 994 + aMatrix.yy, aMatrix.x0, aMatrix.y0); | |
| 995 +} | |
| 996 + | |
| 997 inline gfxImageFormat SurfaceFormatToImageFormat(SurfaceFormat aFormat) | |
| 998 { | |
| 999 switch (aFormat) { | |
| 1000 case FORMAT_B8G8R8A8: | |
| 1001 return gfxImageFormatARGB32; | |
| 1002 case FORMAT_B8G8R8X8: | |
| 1003 return gfxImageFormatRGB24; | |
| 1004 case FORMAT_R5G6B5: | |
| 1005 |
