Bug 1053563 - Use a static create function to replace InitWith for TextureClient. r=nical

This commit is contained in:
Ethan Lin 2015-04-29 19:34:00 +02:00
parent e9be5ee0b5
commit b6a9cb595a
12 changed files with 149 additions and 83 deletions

View File

@ -43,12 +43,11 @@ TextureClient*
D3D11ShareHandleImage::GetTextureClient(CompositableClient* aClient)
{
if (!mTextureClient) {
RefPtr<TextureClientD3D11> textureClient =
new TextureClientD3D11(aClient->GetForwarder(),
mFormat,
TextureFlags::DEFAULT);
textureClient->InitWith(mTexture, mSize);
mTextureClient = textureClient;
mTextureClient = TextureClientD3D11::Create(aClient->GetForwarder(),
mFormat,
TextureFlags::DEFAULT,
mTexture,
mSize);
}
return mTextureClient;
}

View File

@ -202,12 +202,12 @@ D3D9SurfaceImage::GetTextureClient(CompositableClient* aClient)
{
EnsureSynchronized();
if (!mTextureClient) {
RefPtr<SharedTextureClientD3D9> textureClient =
new SharedTextureClientD3D9(aClient->GetForwarder(),
gfx::SurfaceFormat::B8G8R8X8,
TextureFlags::DEFAULT);
textureClient->InitWith(mTexture, mShareHandle, mDesc);
mTextureClient = textureClient;
mTextureClient = SharedTextureClientD3D9::Create(aClient->GetForwarder(),
gfx::SurfaceFormat::B8G8R8X8,
TextureFlags::DEFAULT,
mTexture,
mShareHandle,
mDesc);
}
return mTextureClient;
}

View File

@ -190,12 +190,17 @@ IMFYCbCrImage::GetD3D9TextureClient(CompositableClient* aClient)
return nullptr;
}
RefPtr<DXGIYCbCrTextureClient> texClient =
new DXGIYCbCrTextureClient(aClient->GetForwarder(), TextureFlags::DEFAULT);
texClient->InitWith(textureY, textureCb, textureCr,
shareHandleY, shareHandleCb, shareHandleCr,
GetSize(), mData.mYSize, mData.mCbCrSize);
mTextureClient = texClient;
mTextureClient = DXGIYCbCrTextureClient::Create(aClient->GetForwarder(),
TextureFlags::DEFAULT,
textureY,
textureCb,
textureCr,
shareHandleY,
shareHandleCb,
shareHandleCr,
GetSize(),
mData.mYSize,
mData.mCbCrSize);
return mTextureClient;
}
@ -268,12 +273,17 @@ IMFYCbCrImage::GetTextureClient(CompositableClient* aClient)
textureCr->QueryInterface((IDXGIResource**)byRef(resource));
hr = resource->GetSharedHandle(&shareHandleCr);
RefPtr<DXGIYCbCrTextureClient> texClient =
new DXGIYCbCrTextureClient(aClient->GetForwarder(), TextureFlags::DEFAULT);
texClient->InitWith(textureY, textureCb, textureCr,
shareHandleY, shareHandleCb, shareHandleCr,
GetSize(), mData.mYSize, mData.mCbCrSize);
mTextureClient = texClient;
mTextureClient = DXGIYCbCrTextureClient::Create(aClient->GetForwarder(),
TextureFlags::DEFAULT,
textureY,
textureCb,
textureCr,
shareHandleY,
shareHandleCb,
shareHandleCr,
GetSize(),
mData.mYSize,
mData.mCbCrSize);
return mTextureClient;
}

View File

@ -15,10 +15,9 @@ TextureClient*
MacIOSurfaceImage::GetTextureClient(CompositableClient* aClient)
{
if (!mTextureClient) {
RefPtr<MacIOSurfaceTextureClientOGL> buffer =
new MacIOSurfaceTextureClientOGL(aClient->GetForwarder(), TextureFlags::DEFAULT);
buffer->InitWith(mSurface);
mTextureClient = buffer;
mTextureClient = MacIOSurfaceTextureClientOGL::Create(aClient->GetForwarder(),
TextureFlags::DEFAULT,
mSurface);
}
return mTextureClient;
}

View File

@ -212,6 +212,22 @@ TextureClientD3D11::~TextureClientD3D11()
#endif
}
// static
TemporaryRef<TextureClientD3D11>
TextureClientD3D11::Create(ISurfaceAllocator* aAllocator,
gfx::SurfaceFormat aFormat,
TextureFlags aFlags,
ID3D11Texture2D* aTexture,
gfx::IntSize aSize)
{
RefPtr<TextureClientD3D11> texture = new TextureClientD3D11(aAllocator,
aFormat,
aFlags);
texture->mTexture = aTexture;
texture->mSize = aSize;
return texture;
}
TemporaryRef<TextureClient>
TextureClientD3D11::CreateSimilar(TextureFlags aFlags,
TextureAllocationFlags aAllocFlags) const
@ -534,6 +550,34 @@ DXGIYCbCrTextureClient::~DXGIYCbCrTextureClient()
MOZ_COUNT_DTOR(DXGIYCbCrTextureClient);
}
// static
TemporaryRef<DXGIYCbCrTextureClient>
DXGIYCbCrTextureClient::Create(ISurfaceAllocator* aAllocator,
TextureFlags aFlags,
IUnknown* aTextureY,
IUnknown* aTextureCb,
IUnknown* aTextureCr,
HANDLE aHandleY,
HANDLE aHandleCb,
HANDLE aHandleCr,
const gfx::IntSize& aSize,
const gfx::IntSize& aSizeY,
const gfx::IntSize& aSizeCbCr)
{
RefPtr<DXGIYCbCrTextureClient> texture =
new DXGIYCbCrTextureClient(aAllocator, aFlags);
texture->mHandles[0] = aHandleY;
texture->mHandles[1] = aHandleCb;
texture->mHandles[2] = aHandleCr;
texture->mHoldRefs[0] = aTextureY;
texture->mHoldRefs[1] = aTextureCb;
texture->mHoldRefs[2] = aTextureCr;
texture->mSize = aSize;
texture->mSizeY = aSizeY;
texture->mSizeCbCr = aSizeCbCr;
return texture;
}
bool
DXGIYCbCrTextureClient::Lock(OpenMode)
{

View File

@ -32,11 +32,13 @@ public:
virtual ~TextureClientD3D11();
void InitWith(ID3D11Texture2D* aTexture, const gfx::IntSize& aSize)
{
mTexture = aTexture;
mSize = aSize;
}
// Creates a TextureClient and init width.
static TemporaryRef<TextureClientD3D11>
Create(ISurfaceAllocator* aAllocator,
gfx::SurfaceFormat aFormat,
TextureFlags aFlags,
ID3D11Texture2D* aTexture,
gfx::IntSize aSize);
// TextureClient
@ -90,6 +92,20 @@ public:
virtual ~DXGIYCbCrTextureClient();
// Creates a TextureClient and init width.
static TemporaryRef<DXGIYCbCrTextureClient>
Create(ISurfaceAllocator* aAllocator,
TextureFlags aFlags,
IUnknown* aTextureY,
IUnknown* aTextureCb,
IUnknown* aTextureCr,
HANDLE aHandleY,
HANDLE aHandleCb,
HANDLE aHandleCr,
const gfx::IntSize& aSize,
const gfx::IntSize& aSizeY,
const gfx::IntSize& aSizeCbCr);
// TextureClient
virtual bool IsAllocated() const override{ return !!mHoldRefs[0]; }
@ -102,27 +118,6 @@ public:
virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) override;
void InitWith(IUnknown* aTextureY,
IUnknown* aTextureCb,
IUnknown* aTextureCr,
HANDLE aHandleY,
HANDLE aHandleCb,
HANDLE aHandleCr,
const gfx::IntSize& aSize,
const gfx::IntSize& aSizeY,
const gfx::IntSize& aSizeCbCr)
{
mHandles[0] = aHandleY;
mHandles[1] = aHandleCb;
mHandles[2] = aHandleCr;
mHoldRefs[0] = aTextureY;
mHoldRefs[1] = aTextureCb;
mHoldRefs[2] = aTextureCr;
mSize = aSize;
mSizeY = aSizeY;
mSizeCbCr = aSizeCbCr;
}
virtual gfx::IntSize GetSize() const
{
return mSize;

View File

@ -762,6 +762,29 @@ SharedTextureClientD3D9::~SharedTextureClientD3D9()
MOZ_COUNT_DTOR(SharedTextureClientD3D9);
}
// static
TemporaryRef<SharedTextureClientD3D9>
SharedTextureClientD3D9::Create(ISurfaceAllocator* aAllocator,
gfx::SurfaceFormat aFormat,
TextureFlags aFlags,
IDirect3DTexture9* aTexture,
HANDLE aSharedHandle,
D3DSURFACE_DESC aDesc)
{
RefPtr<SharedTextureClientD3D9> texture =
new SharedTextureClientD3D9(aAllocator,
aFormat,
aFlags);
MOZ_ASSERT(!texture->mTexture);
texture->mTexture = aTexture;
texture->mHandle = aSharedHandle;
texture->mDesc = aDesc;
if (texture->mTexture) {
gfxWindowsPlatform::sD3D9SharedTextureUsed += texture->mDesc.Width * texture->mDesc.Height * 4;
}
return texture;
}
bool
SharedTextureClientD3D9::Lock(OpenMode)
{

View File

@ -248,6 +248,15 @@ public:
virtual ~SharedTextureClientD3D9();
// Creates a TextureClient and init width.
static TemporaryRef<SharedTextureClientD3D9>
Create(ISurfaceAllocator* aAllocator,
gfx::SurfaceFormat aFormat,
TextureFlags aFlags,
IDirect3DTexture9* aTexture,
HANDLE aSharedHandle,
D3DSURFACE_DESC aDesc);
// TextureClient
virtual bool IsAllocated() const override { return !!mTexture; }
@ -260,17 +269,6 @@ public:
virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) override;
void InitWith(IDirect3DTexture9* aTexture, HANDLE aSharedHandle, D3DSURFACE_DESC aDesc)
{
MOZ_ASSERT(!mTexture);
mTexture = aTexture;
mHandle = aSharedHandle;
mDesc = aDesc;
if (mTexture) {
gfxWindowsPlatform::sD3D9SharedTextureUsed += mDesc.Width * mDesc.Height * 4;
}
}
virtual gfx::IntSize GetSize() const
{
return gfx::IntSize(mDesc.Width, mDesc.Height);

View File

@ -59,16 +59,6 @@ GrallocTextureClientOGL::CreateSimilar(TextureFlags aFlags,
return tex;
}
void
GrallocTextureClientOGL::InitWith(MaybeMagicGrallocBufferHandle aHandle, gfx::IntSize aSize)
{
MOZ_ASSERT(!IsAllocated());
MOZ_ASSERT(IsValid());
mGrallocHandle = aHandle;
mGraphicBuffer = GetGraphicBufferFrom(aHandle);
mSize = aSize;
}
bool
GrallocTextureClientOGL::ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor)
{

View File

@ -60,8 +60,6 @@ public:
virtual void WaitForBufferOwnership(bool aWaitReleaseFence = true) override;
void InitWith(MaybeMagicGrallocBufferHandle aDesc, gfx::IntSize aSize);
void SetTextureFlags(TextureFlags aFlags) { AddFlags(aFlags); }
gfx::IntSize GetSize() const override { return mSize; }

View File

@ -22,12 +22,18 @@ MacIOSurfaceTextureClientOGL::~MacIOSurfaceTextureClientOGL()
}
}
void
MacIOSurfaceTextureClientOGL::InitWith(MacIOSurface* aSurface)
// static
TemporaryRef<MacIOSurfaceTextureClientOGL>
MacIOSurfaceTextureClientOGL::Create(ISurfaceAllocator* aAllocator,
TextureFlags aFlags,
MacIOSurface* aSurface)
{
MOZ_ASSERT(IsValid());
MOZ_ASSERT(!IsAllocated());
mSurface = aSurface;
RefPtr<MacIOSurfaceTextureClientOGL> texture =
new MacIOSurfaceTextureClientOGL(aAllocator, aFlags);
MOZ_ASSERT(texture->IsValid());
MOZ_ASSERT(!texture->IsAllocated());
texture->mSurface = aSurface;
return texture;
}
bool

View File

@ -21,7 +21,11 @@ public:
virtual ~MacIOSurfaceTextureClientOGL();
void InitWith(MacIOSurface* aSurface);
// Creates a TextureClient and init width.
static TemporaryRef<MacIOSurfaceTextureClientOGL>
Create(ISurfaceAllocator* aAllocator,
TextureFlags aFlags,
MacIOSurface* aSurface);
virtual bool Lock(OpenMode aMode) override;