зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
c9d311bd95
Коммит
0842db0075
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче