author | Matt Woodrow <mwoodrow@mozilla.com> |
Tue, 01 Sep 2015 15:33:40 -0400 | |
changeset 261772 | c6c78c88471c858270e280048ddfeefc8379a86a |
parent 261771 | 56f6468c7e6021006c2f4bbaa4b49b1ee54c243b |
child 261773 | b660da4b26e0c386be0324951f64f812848505af |
push id | 64846 |
push user | mwoodrow@mozilla.com |
push date | Thu, 10 Sep 2015 19:36:15 +0000 |
treeherder | mozilla-inbound@c6c78c88471c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jrmuizel |
bugs | 1199361 |
milestone | 43.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/layers/IMFYCbCrImage.cpp +++ b/gfx/layers/IMFYCbCrImage.cpp @@ -268,38 +268,21 @@ IMFYCbCrImage::GetTextureClient(Composit ctx->UpdateSubresource(textureY, 0, nullptr, mData.mYChannel, mData.mYStride, mData.mYStride * mData.mYSize.height); ctx->UpdateSubresource(textureCb, 0, nullptr, mData.mCbChannel, mData.mCbCrStride, mData.mCbCrStride * mData.mCbCrSize.height); ctx->UpdateSubresource(textureCr, 0, nullptr, mData.mCrChannel, mData.mCbCrStride, mData.mCbCrStride * mData.mCbCrSize.height); } - RefPtr<IDXGIResource> resource; - - HANDLE shareHandleY; - textureY->QueryInterface((IDXGIResource**)byRef(resource)); - hr = resource->GetSharedHandle(&shareHandleY); - - HANDLE shareHandleCb; - textureCb->QueryInterface((IDXGIResource**)byRef(resource)); - hr = resource->GetSharedHandle(&shareHandleCb); - - HANDLE shareHandleCr; - textureCr->QueryInterface((IDXGIResource**)byRef(resource)); - hr = resource->GetSharedHandle(&shareHandleCr); - mTextureClient = DXGIYCbCrTextureClient::Create(aClient->GetForwarder(), TextureFlags::DEFAULT, textureY, textureCb, textureCr, - shareHandleY, - shareHandleCb, - shareHandleCr, GetSize(), mData.mYSize, mData.mCbCrSize); return mTextureClient; } } // namespace layers
--- a/gfx/layers/d3d11/TextureD3D11.cpp +++ b/gfx/layers/d3d11/TextureD3D11.cpp @@ -662,45 +662,105 @@ DXGIYCbCrTextureClient::~DXGIYCbCrTextur } MOZ_COUNT_DTOR(DXGIYCbCrTextureClient); } // static already_AddRefed<DXGIYCbCrTextureClient> DXGIYCbCrTextureClient::Create(ISurfaceAllocator* aAllocator, TextureFlags aFlags, - IUnknown* aTextureY, - IUnknown* aTextureCb, - IUnknown* aTextureCr, + IDirect3DTexture9* aTextureY, + IDirect3DTexture9* aTextureCb, + IDirect3DTexture9* aTextureCr, HANDLE aHandleY, HANDLE aHandleCb, HANDLE aHandleCr, const gfx::IntSize& aSize, const gfx::IntSize& aSizeY, const gfx::IntSize& aSizeCbCr) { if (!aHandleY || !aHandleCb || !aHandleCr || !aTextureY || !aTextureCb || !aTextureCr) { return nullptr; } + aTextureY->SetPrivateData(sD3D11TextureUsage, + new TextureMemoryMeasurer(aSizeY.width * aSizeY.height), sizeof(IUnknown*), D3DSPD_IUNKNOWN); + aTextureCb->SetPrivateData(sD3D11TextureUsage, + new TextureMemoryMeasurer(aSizeCbCr.width * aSizeCbCr.height), sizeof(IUnknown*), D3DSPD_IUNKNOWN); + aTextureCr->SetPrivateData(sD3D11TextureUsage, + new TextureMemoryMeasurer(aSizeCbCr.width * aSizeCbCr.height), sizeof(IUnknown*), D3DSPD_IUNKNOWN); + 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.forget(); } +already_AddRefed<DXGIYCbCrTextureClient> +DXGIYCbCrTextureClient::Create(ISurfaceAllocator* aAllocator, + TextureFlags aFlags, + ID3D11Texture2D* aTextureY, + ID3D11Texture2D* aTextureCb, + ID3D11Texture2D* aTextureCr, + const gfx::IntSize& aSize, + const gfx::IntSize& aSizeY, + const gfx::IntSize& aSizeCbCr) +{ + if (!aTextureY || !aTextureCb || !aTextureCr) { + return nullptr; + } + + aTextureY->SetPrivateDataInterface(sD3D11TextureUsage, + new TextureMemoryMeasurer(aSize.width * aSize.height)); + aTextureCb->SetPrivateDataInterface(sD3D11TextureUsage, + new TextureMemoryMeasurer(aSizeCbCr.width * aSizeCbCr.height)); + aTextureCr->SetPrivateDataInterface(sD3D11TextureUsage, + new TextureMemoryMeasurer(aSizeCbCr.width * aSizeCbCr.height)); + + RefPtr<DXGIYCbCrTextureClient> texture = + new DXGIYCbCrTextureClient(aAllocator, aFlags); + + RefPtr<IDXGIResource> resource; + + aTextureY->QueryInterface((IDXGIResource**)byRef(resource)); + HRESULT hr = resource->GetSharedHandle(&texture->mHandles[0]); + if (FAILED(hr)) { + return nullptr; + } + + aTextureCb->QueryInterface((IDXGIResource**)byRef(resource)); + hr = resource->GetSharedHandle(&texture->mHandles[1]); + if (FAILED(hr)) { + return nullptr; + } + + aTextureCr->QueryInterface((IDXGIResource**)byRef(resource)); + hr = resource->GetSharedHandle(&texture->mHandles[2]); + if (FAILED(hr)) { + return nullptr; + } + + texture->mHoldRefs[0] = aTextureY; + texture->mHoldRefs[1] = aTextureCb; + texture->mHoldRefs[2] = aTextureCr; + texture->mSize = aSize; + texture->mSizeY = aSizeY; + texture->mSizeCbCr = aSizeCbCr; + return texture.forget(); +} + bool DXGIYCbCrTextureClient::Lock(OpenMode) { MOZ_ASSERT(!mIsLocked); if (!IsValid()) { return false; } mIsLocked = true;
--- a/gfx/layers/d3d11/TextureD3D11.h +++ b/gfx/layers/d3d11/TextureD3D11.h @@ -7,16 +7,17 @@ #define MOZILLA_GFX_TEXTURED3D11_H #include "mozilla/layers/Compositor.h" #include "mozilla/layers/TextureClient.h" #include "mozilla/layers/TextureHost.h" #include "gfxWindowsPlatform.h" #include "mozilla/GfxMessageUtils.h" #include <d3d11.h> +#include "d3d9.h" #include <vector> namespace mozilla { namespace layers { class CompositorD3D11; /** @@ -104,26 +105,37 @@ public: TextureFlags aFlags); virtual ~DXGIYCbCrTextureClient(); // Creates a TextureClient and init width. static already_AddRefed<DXGIYCbCrTextureClient> Create(ISurfaceAllocator* aAllocator, TextureFlags aFlags, - IUnknown* aTextureY, - IUnknown* aTextureCb, - IUnknown* aTextureCr, + IDirect3DTexture9* aTextureY, + IDirect3DTexture9* aTextureCb, + IDirect3DTexture9* aTextureCr, HANDLE aHandleY, HANDLE aHandleCb, HANDLE aHandleCr, const gfx::IntSize& aSize, const gfx::IntSize& aSizeY, const gfx::IntSize& aSizeCbCr); + // Creates a TextureClient and init width. + static already_AddRefed<DXGIYCbCrTextureClient> + Create(ISurfaceAllocator* aAllocator, + TextureFlags aFlags, + ID3D11Texture2D* aTextureY, + ID3D11Texture2D* aTextureCb, + ID3D11Texture2D* aTextureCr, + const gfx::IntSize& aSize, + const gfx::IntSize& aSizeY, + const gfx::IntSize& aSizeCbCr); + // TextureClient virtual bool IsAllocated() const override{ return !!mHoldRefs[0]; } virtual bool Lock(OpenMode aOpenMode) override; virtual void Unlock() override;