Bug 1383786 - Simplify generating image keys for TextureHosts. r=sotaro
This commit is contained in:
@@ -111,14 +111,11 @@ GPUVideoTextureHost::CreateRenderTexture(const wr::ExternalImageId& aExternalIma
|
|||||||
mWrappedTextureHost->CreateRenderTexture(aExternalImageId);
|
mWrappedTextureHost->CreateRenderTexture(aExternalImageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
uint32_t
|
||||||
GPUVideoTextureHost::GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
GPUVideoTextureHost::NumSubTextures() const
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator)
|
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(mWrappedTextureHost);
|
MOZ_ASSERT(mWrappedTextureHost);
|
||||||
MOZ_ASSERT(aImageKeys.IsEmpty());
|
return mWrappedTextureHost->NumSubTextures();
|
||||||
|
|
||||||
mWrappedTextureHost->GetWRImageKeys(aImageKeys, aImageKeyAllocator);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ public:
|
|||||||
|
|
||||||
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
||||||
|
|
||||||
virtual void GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
virtual uint32_t NumSubTextures() const override;
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator) override;
|
|
||||||
|
|
||||||
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
||||||
Range<const wr::ImageKey>& aImageKeys,
|
Range<const wr::ImageKey>& aImageKeys,
|
||||||
|
|||||||
@@ -566,23 +566,14 @@ BufferTextureHost::CreateRenderTexture(const wr::ExternalImageId& aExternalImage
|
|||||||
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId), texture.forget());
|
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId), texture.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
uint32_t
|
||||||
BufferTextureHost::GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
BufferTextureHost::NumSubTextures() const
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator)
|
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aImageKeys.IsEmpty());
|
if (GetFormat() == gfx::SurfaceFormat::YUV) {
|
||||||
|
return 3;
|
||||||
if (GetFormat() != gfx::SurfaceFormat::YUV) {
|
|
||||||
// 1 image key
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 1);
|
|
||||||
} else {
|
|
||||||
// 3 image key
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -621,17 +621,9 @@ public:
|
|||||||
MOZ_RELEASE_ASSERT(false, "No CreateRenderTexture() implementation for this TextureHost type.");
|
MOZ_RELEASE_ASSERT(false, "No CreateRenderTexture() implementation for this TextureHost type.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create all necessary image keys for this textureHost rendering.
|
/// Returns the number of actual textures that will be used to render this.
|
||||||
// @param aImageKeys - [out] The set of ImageKeys used for this textureHost
|
/// For example in a lot of YUV cases it will be 3
|
||||||
// composing.
|
virtual uint32_t NumSubTextures() const { return 1; }
|
||||||
// @param aImageKeyAllocator - [in] The function which is used for creating
|
|
||||||
// the new ImageKey.
|
|
||||||
virtual void GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(aImageKeys.IsEmpty());
|
|
||||||
MOZ_ASSERT_UNREACHABLE("No GetWRImageKeys() implementation for this TextureHost type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add all necessary TextureHost informations to the resource update queue.
|
// Add all necessary TextureHost informations to the resource update queue.
|
||||||
// Then, WR will use this informations to read from the TextureHost.
|
// Then, WR will use this informations to read from the TextureHost.
|
||||||
@@ -747,8 +739,7 @@ public:
|
|||||||
|
|
||||||
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
||||||
|
|
||||||
virtual void GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
virtual uint32_t NumSubTextures() const override;
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator) override;
|
|
||||||
|
|
||||||
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
||||||
Range<const wr::ImageKey>& aImageKeys,
|
Range<const wr::ImageKey>& aImageKeys,
|
||||||
|
|||||||
@@ -1042,31 +1042,22 @@ DXGITextureHostD3D11::CreateRenderTexture(const wr::ExternalImageId& aExternalIm
|
|||||||
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId), texture.forget());
|
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId), texture.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
uint32_t
|
||||||
DXGITextureHostD3D11::GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
DXGITextureHostD3D11::NumSubTextures() const
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator)
|
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aImageKeys.IsEmpty());
|
|
||||||
|
|
||||||
switch (GetFormat()) {
|
switch (GetFormat()) {
|
||||||
case gfx::SurfaceFormat::R8G8B8X8:
|
case gfx::SurfaceFormat::R8G8B8X8:
|
||||||
case gfx::SurfaceFormat::R8G8B8A8:
|
case gfx::SurfaceFormat::R8G8B8A8:
|
||||||
case gfx::SurfaceFormat::B8G8R8A8:
|
case gfx::SurfaceFormat::B8G8R8A8:
|
||||||
case gfx::SurfaceFormat::B8G8R8X8: {
|
case gfx::SurfaceFormat::B8G8R8X8: {
|
||||||
// 1 image key
|
return 1;
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 1);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case gfx::SurfaceFormat::NV12: {
|
case gfx::SurfaceFormat::NV12: {
|
||||||
// 2 image key
|
return 2;
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 2);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
MOZ_ASSERT_UNREACHABLE("unexpected format");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1311,17 +1302,6 @@ DXGIYCbCrTextureHostD3D11::CreateRenderTexture(const wr::ExternalImageId& aExter
|
|||||||
// We use AddImage() directly. It's no corresponding RenderTextureHost.
|
// We use AddImage() directly. It's no corresponding RenderTextureHost.
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
DXGIYCbCrTextureHostD3D11::GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(aImageKeys.IsEmpty());
|
|
||||||
|
|
||||||
// 1 image key
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DXGIYCbCrTextureHostD3D11::AddWRImage(wr::ResourceUpdateQueue& aResources,
|
DXGIYCbCrTextureHostD3D11::AddWRImage(wr::ResourceUpdateQueue& aResources,
|
||||||
Range<const wr::ImageKey>& aImageKeys,
|
Range<const wr::ImageKey>& aImageKeys,
|
||||||
|
|||||||
@@ -335,8 +335,7 @@ public:
|
|||||||
|
|
||||||
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
||||||
|
|
||||||
virtual void GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
virtual uint32_t NumSubTextures() const override;
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator) override;
|
|
||||||
|
|
||||||
virtual void AddWRImage(wr::ResourceUpdateQueue& aAPI,
|
virtual void AddWRImage(wr::ResourceUpdateQueue& aAPI,
|
||||||
Range<const wr::ImageKey>& aImageKeys,
|
Range<const wr::ImageKey>& aImageKeys,
|
||||||
@@ -398,9 +397,6 @@ public:
|
|||||||
|
|
||||||
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
||||||
|
|
||||||
virtual void GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator) override;
|
|
||||||
|
|
||||||
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
||||||
Range<const wr::ImageKey>& aImageKeys,
|
Range<const wr::ImageKey>& aImageKeys,
|
||||||
const wr::ExternalImageId& aExtID) override;
|
const wr::ExternalImageId& aExtID) override;
|
||||||
|
|||||||
@@ -125,37 +125,23 @@ MacIOSurfaceTextureHostOGL::CreateRenderTexture(const wr::ExternalImageId& aExte
|
|||||||
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId), texture.forget());
|
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId), texture.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
uint32_t
|
||||||
MacIOSurfaceTextureHostOGL::GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
MacIOSurfaceTextureHostOGL::NumSubTextures() const
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator)
|
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aImageKeys.IsEmpty());
|
|
||||||
|
|
||||||
switch (GetFormat()) {
|
switch (GetFormat()) {
|
||||||
case gfx::SurfaceFormat::R8G8B8X8:
|
case gfx::SurfaceFormat::R8G8B8X8:
|
||||||
case gfx::SurfaceFormat::R8G8B8A8:
|
case gfx::SurfaceFormat::R8G8B8A8:
|
||||||
case gfx::SurfaceFormat::B8G8R8A8:
|
case gfx::SurfaceFormat::B8G8R8A8:
|
||||||
case gfx::SurfaceFormat::B8G8R8X8: {
|
case gfx::SurfaceFormat::B8G8R8X8:
|
||||||
// 1 image key
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case gfx::SurfaceFormat::YUV422: {
|
case gfx::SurfaceFormat::YUV422: {
|
||||||
// 1 image key
|
return 1;
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 1);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case gfx::SurfaceFormat::NV12: {
|
case gfx::SurfaceFormat::NV12: {
|
||||||
// 2 image key
|
return 2;
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
aImageKeys.AppendElement(aImageKeyAllocator());
|
|
||||||
MOZ_ASSERT(aImageKeys.Length() == 2);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
MOZ_ASSERT_UNREACHABLE("unexpected format");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,8 +64,7 @@ public:
|
|||||||
|
|
||||||
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
virtual void CreateRenderTexture(const wr::ExternalImageId& aExternalImageId) override;
|
||||||
|
|
||||||
virtual void GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
virtual uint32_t NumSubTextures() const override;
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator) override;
|
|
||||||
|
|
||||||
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
||||||
Range<const wr::ImageKey>& aImageKeys,
|
Range<const wr::ImageKey>& aImageKeys,
|
||||||
|
|||||||
@@ -173,7 +173,10 @@ AsyncImagePipelineManager::GenerateImageKeyForTextureHost(wr::ResourceUpdateQueu
|
|||||||
WebRenderTextureHost* wrTexture = aTexture->AsWebRenderTextureHost();
|
WebRenderTextureHost* wrTexture = aTexture->AsWebRenderTextureHost();
|
||||||
|
|
||||||
if (!gfxEnv::EnableWebRenderRecording() && wrTexture) {
|
if (!gfxEnv::EnableWebRenderRecording() && wrTexture) {
|
||||||
wrTexture->GetWRImageKeys(aKeys, std::bind(&AsyncImagePipelineManager::GenerateImageKey, this));
|
auto numKeys = wrTexture->NumSubTextures();
|
||||||
|
for (uint32_t i = 0; i < numKeys; ++i) {
|
||||||
|
aKeys.AppendElement(GenerateImageKey());
|
||||||
|
}
|
||||||
MOZ_ASSERT(!aKeys.IsEmpty());
|
MOZ_ASSERT(!aKeys.IsEmpty());
|
||||||
Range<const wr::ImageKey> keys(&aKeys[0], aKeys.Length());
|
Range<const wr::ImageKey> keys(&aKeys[0], aKeys.Length());
|
||||||
wrTexture->AddWRImage(aResources, keys, wrTexture->GetExternalImageKey());
|
wrTexture->AddWRImage(aResources, keys, wrTexture->GetExternalImageKey());
|
||||||
|
|||||||
@@ -134,14 +134,11 @@ WebRenderTextureHost::GetRGBStride()
|
|||||||
return ImageDataSerializer::ComputeRGBStride(format, GetSize().width);
|
return ImageDataSerializer::ComputeRGBStride(format, GetSize().width);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
uint32_t
|
||||||
WebRenderTextureHost::GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
WebRenderTextureHost::NumSubTextures() const
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator)
|
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(mWrappedTextureHost);
|
MOZ_ASSERT(mWrappedTextureHost);
|
||||||
MOZ_ASSERT(aImageKeys.IsEmpty());
|
return mWrappedTextureHost->NumSubTextures();
|
||||||
|
|
||||||
mWrappedTextureHost->GetWRImageKeys(aImageKeys, aImageKeyAllocator);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -63,8 +63,7 @@ public:
|
|||||||
|
|
||||||
int32_t GetRGBStride();
|
int32_t GetRGBStride();
|
||||||
|
|
||||||
virtual void GetWRImageKeys(nsTArray<wr::ImageKey>& aImageKeys,
|
virtual uint32_t NumSubTextures() const override;
|
||||||
const std::function<wr::ImageKey()>& aImageKeyAllocator) override;
|
|
||||||
|
|
||||||
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
virtual void AddWRImage(wr::ResourceUpdateQueue& aResources,
|
||||||
Range<const wr::ImageKey>& aImageKeys,
|
Range<const wr::ImageKey>& aImageKeys,
|
||||||
|
|||||||
Reference in New Issue
Block a user