mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
6fb6b73907
Add an implementation of gfxReusableSurfaceWrapper based on gfxImageSurface and use it on Android to avoid the overhead of shared memory.
173 lines
4.1 KiB
Plaintext
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
|