gecko/gfx/layers/ipc/LayersSurfaces.ipdlh
Chris Lord 6fb6b73907 Bug 747811 - Add gfxReusableImageSurfaceWrapper. r=BenWa
Add an implementation of gfxReusableSurfaceWrapper based on gfxImageSurface
and use it on Android to avoid the overhead of shared memory.
2013-08-19 14:59:27 +01:00

173 lines
4.1 KiB
Plaintext

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PGrallocBuffer;
include "gfxipc/ShadowLayerUtils.h";
include "mozilla/gfx/Types.h";
using gfx3DMatrix;
using gfxIntSize;
using gfxPoint;
using gfxRGBA;
using nsIntPoint;
using nsIntRect;
using nsIntRegion;
using nsIntSize;
using mozilla::gfxContentType;
using mozilla::GraphicsFilterType;
using mozilla::layers::FrameMetrics;
using mozilla::layers::MagicGrallocBufferHandle;
using mozilla::layers::SurfaceDescriptorX11;
using mozilla::null_t;
using mozilla::WindowsHandle;
using mozilla::gl::SharedTextureHandle;
using mozilla::gl::GLContext::SharedTextureShareType;
using mozilla::gfx::SurfaceStreamHandle;
using mozilla::gfx::SurfaceFormat;
using mozilla::gfx::IntSize;
namespace mozilla {
namespace layers {
union MaybeMagicGrallocBufferHandle {
MagicGrallocBufferHandle;
null_t;
};
struct SurfaceDescriptorD3D9 {
// IDirect3DTexture9*
uintptr_t texture;
};
struct SurfaceDescriptorD3D10 {
WindowsHandle handle;
bool hasAlpha;
};
struct SharedTextureDescriptor {
SharedTextureShareType shareType;
SharedTextureHandle handle;
nsIntSize size;
bool inverted;
};
struct BasicShmTileDescriptor {
Shmem reusableSurface;
};
struct BasicTileDescriptor {
uintptr_t reusableSurface;
};
struct PlaceholderTileDescriptor {
};
union TileDescriptor {
BasicTileDescriptor;
BasicShmTileDescriptor;
PlaceholderTileDescriptor;
};
struct SurfaceDescriptorTiles {
nsIntRegion validRegion;
nsIntRegion paintedRegion;
TileDescriptor[] tiles;
int retainedWidth;
int retainedHeight;
float resolution;
};
// XXX - soon to be removed
struct SurfaceDescriptorGralloc {
PGrallocBuffer buffer;
/**
* android::GraphicBuffer has a size information. But there are cases
* that GraphicBuffer's size and actual video's size are different.
* Extra size member is necessary. See Bug 850566.
*/
nsIntSize size;
/**
* We can have one source producing gralloc buffers and sharing them
* with another source that may also produce its own gralloc buffers.
* This happens for camera preview buffers sent to video code. When
* that happens, the producer can mark the buffer as "external" to
* prevent its consumer from mistakenly freeing the buffer.
*/
bool external;
/**
* This gralloc buffer will be treated as if the RB bytes are swapped.
* This is useful for rendering using Cairo/Thebes, because there is no
* BGRX Android pixel format, and so we have to do byte swapping.
*
* For example, if the GraphicBuffer has an Android pixel format of
* PIXEL_FORMAT_RGBA_8888 and isRBSwapped is true, when it is sampled
* (for example, with GL), a BGRA shader should be used.
*/
bool isRBSwapped;
};
struct SurfaceStreamDescriptor {
SurfaceStreamHandle handle;
bool yflip;
};
// XXX - can be removed as soon as DeprecatedImageClientSingle is removed
struct YCbCrImage {
Shmem data;
uint64_t owner;
};
// XXX remove RGBImage (see bug 847914)
struct RGBImage {
Shmem data;
nsIntRect picture;
uint32_t rgbFormat;
uint64_t owner;
};
struct MemoryImage {
uintptr_t data;
gfxIntSize size;
uint32_t stride;
uint32_t format;
};
/**
* Used for shmem-backed YCbCr and (flavors of) RGBA textures
*/
struct SurfaceDescriptorShmem {
Shmem data;
SurfaceFormat format;
};
/**
* Used for "raw memory"-backed YCbCr and (flavors of) RGBA textures
*/
struct SurfaceDescriptorMemory {
uintptr_t data;
SurfaceFormat format;
};
union SurfaceDescriptor {
SurfaceDescriptorShmem;
SurfaceDescriptorMemory;
SurfaceDescriptorD3D9;
SurfaceDescriptorD3D10;
SurfaceDescriptorX11;
SharedTextureDescriptor;
SurfaceStreamDescriptor;
YCbCrImage; // XXX - deprecated
SurfaceDescriptorGralloc; // XXX - deprecated
Shmem; // XXX - deprecated
RGBImage; // XXX - deprecated
MemoryImage; // XXX - deprecated
null_t;
};
} // namespace
} // namespace