diff --git a/dom/webgpu/CanvasContext.cpp b/dom/webgpu/CanvasContext.cpp index 676188ca4859..3a842c9c6018 100644 --- a/dom/webgpu/CanvasContext.cpp +++ b/dom/webgpu/CanvasContext.cpp @@ -10,6 +10,7 @@ #include "nsDisplayList.h" #include "mozilla/dom/HTMLCanvasElement.h" #include "mozilla/gfx/CanvasManagerChild.h" +#include "mozilla/layers/CanvasRenderer.h" #include "mozilla/layers/CompositableInProcessManager.h" #include "mozilla/layers/ImageDataSerializer.h" #include "mozilla/layers/LayersSurfaces.h" @@ -126,6 +127,24 @@ void CanvasContext::SwapChainPresent() { } } +bool CanvasContext::InitializeCanvasRenderer( + nsDisplayListBuilder* aBuilder, layers::CanvasRenderer* aRenderer) { + // This path is only used for rendering when we use the fallback Paint path, + // used by reftest-snapshot, printing and Firefox Screenshot. + if (!mHandle) { + return false; + } + + layers::CanvasRendererData data; + data.mContext = this; + data.mSize = mGfxSize; + data.mIsOpaque = false; + + aRenderer->Initialize(data); + aRenderer->SetDirty(); + return true; +} + mozilla::UniquePtr CanvasContext::GetImageBuffer(int32_t* aFormat) { gfxAlphaType any; RefPtr snapshot = GetSurfaceSnapshot(&any); diff --git a/dom/webgpu/CanvasContext.h b/dom/webgpu/CanvasContext.h index 2ef574000201..10ef4d9f2253 100644 --- a/dom/webgpu/CanvasContext.h +++ b/dom/webgpu/CanvasContext.h @@ -54,6 +54,8 @@ class CanvasContext final : public nsICanvasRenderingContextInternal, return NS_OK; } + bool InitializeCanvasRenderer(nsDisplayListBuilder* aBuilder, + layers::CanvasRenderer* aRenderer) override; mozilla::UniquePtr GetImageBuffer(int32_t* aFormat) override; NS_IMETHOD GetInputStream(const char* aMimeType, const nsAString& aEncoderOptions,