Bug 1857841 - pt 3. Add a new page kind named "fresh" r=glandium
[gecko.git] / gfx / webrender_bindings / RenderTextureHostWrapper.cpp
blobb700eafcfb395a061ad11b8000dc65c0dbca2240
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "RenderTextureHostWrapper.h"
9 #include "mozilla/gfx/Logging.h"
10 #include "mozilla/layers/RemoteTextureMap.h"
11 #include "mozilla/webrender/RenderThread.h"
13 namespace mozilla {
14 namespace wr {
16 RenderTextureHostWrapper::RenderTextureHostWrapper(
17 ExternalImageId aExternalImageId)
18 : mExternalImageId(aExternalImageId) {
19 MOZ_COUNT_CTOR_INHERITED(RenderTextureHostWrapper, RenderTextureHost);
20 EnsureTextureHost();
23 RenderTextureHostWrapper::~RenderTextureHostWrapper() {
24 MOZ_COUNT_DTOR_INHERITED(RenderTextureHostWrapper, RenderTextureHost);
27 void RenderTextureHostWrapper::EnsureTextureHost() const {
28 if (mTextureHost) {
29 return;
32 mTextureHost = RenderThread::Get()->GetRenderTexture(mExternalImageId);
33 MOZ_ASSERT(mTextureHost);
34 if (!mTextureHost) {
35 gfxCriticalNoteOnce << "Failed to get RenderTextureHost for extId:"
36 << AsUint64(mExternalImageId);
40 wr::WrExternalImage RenderTextureHostWrapper::Lock(uint8_t aChannelIndex,
41 gl::GLContext* aGL) {
42 if (!mTextureHost) {
43 return InvalidToWrExternalImage();
46 return mTextureHost->Lock(aChannelIndex, aGL);
49 void RenderTextureHostWrapper::Unlock() {
50 if (mTextureHost) {
51 mTextureHost->Unlock();
55 std::pair<gfx::Point, gfx::Point> RenderTextureHostWrapper::GetUvCoords(
56 gfx::IntSize aTextureSize) const {
57 if (mTextureHost) {
58 return mTextureHost->GetUvCoords(aTextureSize);
60 return RenderTextureHost::GetUvCoords(aTextureSize);
63 void RenderTextureHostWrapper::ClearCachedResources() {
64 if (mTextureHost) {
65 mTextureHost->ClearCachedResources();
69 void RenderTextureHostWrapper::PrepareForUse() {
70 if (!mTextureHost) {
71 return;
73 mTextureHost->PrepareForUse();
76 void RenderTextureHostWrapper::NotifyForUse() {
77 if (!mTextureHost) {
78 return;
80 mTextureHost->NotifyForUse();
83 void RenderTextureHostWrapper::NotifyNotUsed() {
84 if (!mTextureHost) {
85 return;
87 mTextureHost->NotifyNotUsed();
90 bool RenderTextureHostWrapper::SyncObjectNeeded() { return false; }
92 RenderMacIOSurfaceTextureHost*
93 RenderTextureHostWrapper::AsRenderMacIOSurfaceTextureHost() {
94 if (!mTextureHost) {
95 return nullptr;
97 return mTextureHost->AsRenderMacIOSurfaceTextureHost();
100 RenderDXGITextureHost* RenderTextureHostWrapper::AsRenderDXGITextureHost() {
101 if (!mTextureHost) {
102 return nullptr;
104 return mTextureHost->AsRenderDXGITextureHost();
107 RenderDXGIYCbCrTextureHost*
108 RenderTextureHostWrapper::AsRenderDXGIYCbCrTextureHost() {
109 if (!mTextureHost) {
110 return nullptr;
112 return mTextureHost->AsRenderDXGIYCbCrTextureHost();
115 RenderDcompSurfaceTextureHost*
116 RenderTextureHostWrapper::AsRenderDcompSurfaceTextureHost() {
117 if (!mTextureHost) {
118 return nullptr;
120 return mTextureHost->AsRenderDcompSurfaceTextureHost();
123 RenderTextureHostSWGL* RenderTextureHostWrapper::AsRenderTextureHostSWGL() {
124 if (!mTextureHost) {
125 return nullptr;
127 return mTextureHost->AsRenderTextureHostSWGL();
130 RenderAndroidHardwareBufferTextureHost*
131 RenderTextureHostWrapper::AsRenderAndroidHardwareBufferTextureHost() {
132 if (!mTextureHost) {
133 return nullptr;
135 return mTextureHost->AsRenderAndroidHardwareBufferTextureHost();
138 RenderAndroidSurfaceTextureHost*
139 RenderTextureHostWrapper::AsRenderAndroidSurfaceTextureHost() {
140 if (!mTextureHost) {
141 return nullptr;
143 return mTextureHost->AsRenderAndroidSurfaceTextureHost();
146 RenderTextureHostSWGL* RenderTextureHostWrapper::EnsureRenderTextureHostSWGL()
147 const {
148 if (!mTextureHost) {
149 return nullptr;
151 return mTextureHost->AsRenderTextureHostSWGL();
154 void RenderTextureHostWrapper::SetIsSoftwareDecodedVideo() {
155 if (!mTextureHost) {
156 return;
158 return mTextureHost->SetIsSoftwareDecodedVideo();
161 bool RenderTextureHostWrapper::IsSoftwareDecodedVideo() {
162 if (!mTextureHost) {
163 return false;
165 return mTextureHost->IsSoftwareDecodedVideo();
168 size_t RenderTextureHostWrapper::GetPlaneCount() const {
169 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
170 return swglHost->GetPlaneCount();
172 return 0;
175 gfx::SurfaceFormat RenderTextureHostWrapper::GetFormat() const {
176 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
177 return swglHost->GetFormat();
179 return gfx::SurfaceFormat::UNKNOWN;
182 gfx::ColorDepth RenderTextureHostWrapper::GetColorDepth() const {
183 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
184 return swglHost->GetColorDepth();
186 return gfx::ColorDepth::COLOR_8;
189 gfx::YUVRangedColorSpace RenderTextureHostWrapper::GetYUVColorSpace() const {
190 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
191 return swglHost->GetYUVColorSpace();
193 return gfx::YUVRangedColorSpace::Default;
196 bool RenderTextureHostWrapper::MapPlane(RenderCompositor* aCompositor,
197 uint8_t aChannelIndex,
198 PlaneInfo& aPlaneInfo) {
199 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
200 return swglHost->MapPlane(aCompositor, aChannelIndex, aPlaneInfo);
202 return false;
205 void RenderTextureHostWrapper::UnmapPlanes() {
206 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
207 swglHost->UnmapPlanes();
211 } // namespace wr
212 } // namespace mozilla