Bug 1543339 - Add D3D11ShareHandleImage support to GLBlitHelper. r=jgilbert

Differential Revision: https://phabricator.services.mozilla.com/D26877

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jean-Yves Avenard 2019-04-10 20:54:57 +00:00
Родитель c9d311bd95
Коммит 0842db0075
6 изменённых файлов: 41 добавлений и 4 удалений

Просмотреть файл

@ -30,6 +30,11 @@
# include "GLContextCGL.h"
#endif
#ifdef XP_WIN
# include "mozilla/layers/D3D11ShareHandleImage.h"
# include "mozilla/layers/D3D11YCbCrImage.h"
#endif
using mozilla::layers::PlanarYCbCrData;
using mozilla::layers::PlanarYCbCrImage;
@ -692,9 +697,12 @@ bool GLBlitHelper::BlitImageToFramebuffer(layers::Image* const srcImage,
case ImageFormat::GPU_VIDEO:
return BlitImage(static_cast<layers::GPUVideoImage*>(srcImage), destSize,
destOrigin);
case ImageFormat::D3D11_SHARE_HANDLE_TEXTURE:
return BlitImage(static_cast<layers::D3D11ShareHandleImage*>(srcImage),
destSize, destOrigin);
case ImageFormat::D3D11_YCBCR_IMAGE:
return BlitImage((layers::D3D11YCbCrImage*)srcImage, destSize,
destOrigin);
return BlitImage(static_cast<layers::D3D11YCbCrImage*>(srcImage),
destSize, destOrigin);
case ImageFormat::D3D9_RGB32_TEXTURE:
return false; // todo
#endif

Просмотреть файл

@ -22,6 +22,7 @@
namespace mozilla {
namespace layers {
class D3D11ShareHandleImage;
class D3D11YCbCrImage;
class Image;
class GPUVideoImage;
@ -189,6 +190,8 @@ class GLBlitHelper final {
// GLBlitHelperD3D.cpp:
bool BlitImage(layers::GPUVideoImage* srcImage, const gfx::IntSize& destSize,
OriginPos destOrigin) const;
bool BlitImage(layers::D3D11ShareHandleImage* srcImage,
const gfx::IntSize& destSize, OriginPos destOrigin) const;
bool BlitImage(layers::D3D11YCbCrImage* srcImage,
const gfx::IntSize& destSize, OriginPos destOrigin) const;

Просмотреть файл

@ -13,6 +13,7 @@
#include "GPUVideoImage.h"
#include "ScopedGLHelpers.h"
#include "mozilla/layers/D3D11ShareHandleImage.h"
#include "mozilla/layers/D3D11YCbCrImage.h"
#include "mozilla/layers/TextureD3D11.h"
@ -201,6 +202,20 @@ bool GLBlitHelper::BlitImage(layers::GPUVideoImage* const srcImage,
// -------------------------------------
bool GLBlitHelper::BlitImage(layers::D3D11ShareHandleImage* const srcImage,
const gfx::IntSize& destSize,
const OriginPos destOrigin) const {
const auto& data = srcImage->GetData();
if (!data) return false;
layers::SurfaceDescriptorD3D10 desc;
if (!data->SerializeSpecific(&desc)) return false;
return BlitDescriptor(desc, destSize, destOrigin);
}
// -------------------------------------
bool GLBlitHelper::BlitImage(layers::D3D11YCbCrImage* const srcImage,
const gfx::IntSize& destSize,
const OriginPos destOrigin) const {

Просмотреть файл

@ -36,8 +36,7 @@ bool D3D11ShareHandleImage::AllocateTexture(D3D11RecycleAllocator* aAllocator,
if (aAllocator) {
mTextureClient = aAllocator->CreateOrRecycleClient(mYUVColorSpace, mSize);
if (mTextureClient) {
D3D11TextureData* textureData =
mTextureClient->GetInternalData()->AsD3D11TextureData();
D3D11TextureData* textureData = GetData();
MOZ_DIAGNOSTIC_ASSERT(textureData, "Wrong TextureDataType");
mTexture = textureData->GetD3D11Texture();
return true;

Просмотреть файл

@ -17,6 +17,9 @@
#include "mozilla/layers/TextureD3D11.h"
namespace mozilla {
namespace gl {
class GLBlitHelper;
}
namespace layers {
class D3D11RecycleAllocator final : public TextureClientRecycleAllocator {
@ -64,6 +67,14 @@ class D3D11ShareHandleImage final : public Image {
gfx::YUVColorSpace GetYUVColorSpace() const { return mYUVColorSpace; }
private:
friend class gl::GLBlitHelper;
D3D11TextureData* GetData() const {
if (!mTextureClient) {
return nullptr;
}
return mTextureClient->GetInternalData()->AsD3D11TextureData();
}
gfx::IntSize mSize;
gfx::IntRect mPictureRect;
gfx::YUVColorSpace mYUVColorSpace;

Просмотреть файл

@ -100,6 +100,7 @@ class D3D11TextureData final : public TextureData {
bool PrepareDrawTargetInLock(OpenMode aMode);
friend class gl::GLBlitHelper;
bool SerializeSpecific(SurfaceDescriptorD3D10* aOutDesc);
static D3D11TextureData* Create(gfx::IntSize aSize,