Bug 1857841 - pt 3. Add a new page kind named "fresh" r=glandium
[gecko.git] / dom / webgpu / CommandEncoder.h
blob99a2fb15b4cf2a506a752f4dedd78bbe2b63f89e
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef GPU_CommandEncoder_H_
7 #define GPU_CommandEncoder_H_
9 #include "mozilla/dom/TypedArray.h"
10 #include "mozilla/WeakPtr.h"
11 #include "mozilla/webgpu/WebGPUTypes.h"
12 #include "nsWrapperCache.h"
13 #include "ObjectModel.h"
15 namespace mozilla {
16 class ErrorResult;
18 namespace dom {
19 struct GPUComputePassDescriptor;
20 template <typename T>
21 class Sequence;
22 struct GPUCommandBufferDescriptor;
23 class GPUComputePipelineOrGPURenderPipeline;
24 class RangeEnforcedUnsignedLongSequenceOrGPUExtent3DDict;
25 struct GPUImageCopyBuffer;
26 struct GPUImageCopyTexture;
27 struct GPUImageBitmapCopyView;
28 struct GPUImageDataLayout;
29 struct GPURenderPassDescriptor;
30 using GPUExtent3D = RangeEnforcedUnsignedLongSequenceOrGPUExtent3DDict;
31 } // namespace dom
32 namespace webgpu {
33 namespace ffi {
34 struct WGPUComputePass;
35 struct WGPURecordedRenderPass;
36 struct WGPUImageDataLayout;
37 struct WGPUImageCopyTexture_TextureId;
38 struct WGPUExtent3d;
39 } // namespace ffi
41 class BindGroup;
42 class Buffer;
43 class CanvasContext;
44 class CommandBuffer;
45 class ComputePassEncoder;
46 class Device;
47 class RenderPassEncoder;
49 class CommandEncoder final : public ObjectBase, public ChildOf<Device> {
50 public:
51 GPU_DECL_CYCLE_COLLECTION(CommandEncoder)
52 GPU_DECL_JS_WRAP(CommandEncoder)
54 CommandEncoder(Device* const aParent, WebGPUChild* const aBridge, RawId aId);
56 const RawId mId;
58 static void ConvertTextureDataLayoutToFFI(
59 const dom::GPUImageDataLayout& aLayout,
60 ffi::WGPUImageDataLayout* aLayoutFFI);
61 static void ConvertTextureCopyViewToFFI(
62 const dom::GPUImageCopyTexture& aCopy,
63 ffi::WGPUImageCopyTexture_TextureId* aViewFFI);
65 private:
66 ~CommandEncoder();
67 void Cleanup();
69 RefPtr<WebGPUChild> mBridge;
70 nsTArray<WeakPtr<CanvasContext>> mPresentationContexts;
72 void TrackPresentationContext(CanvasContext* aTargetContext);
74 public:
75 const auto& GetDevice() const { return mParent; };
77 void EndComputePass(ffi::WGPURecordedComputePass& aPass);
78 void EndRenderPass(ffi::WGPURecordedRenderPass& aPass);
80 void CopyBufferToBuffer(const Buffer& aSource, BufferAddress aSourceOffset,
81 const Buffer& aDestination,
82 BufferAddress aDestinationOffset,
83 BufferAddress aSize);
84 void CopyBufferToTexture(const dom::GPUImageCopyBuffer& aSource,
85 const dom::GPUImageCopyTexture& aDestination,
86 const dom::GPUExtent3D& aCopySize);
87 void CopyTextureToBuffer(const dom::GPUImageCopyTexture& aSource,
88 const dom::GPUImageCopyBuffer& aDestination,
89 const dom::GPUExtent3D& aCopySize);
90 void CopyTextureToTexture(const dom::GPUImageCopyTexture& aSource,
91 const dom::GPUImageCopyTexture& aDestination,
92 const dom::GPUExtent3D& aCopySize);
93 void ClearBuffer(const Buffer& aBuffer, const uint64_t aOffset,
94 const dom::Optional<uint64_t>& aSize);
96 void PushDebugGroup(const nsAString& aString);
97 void PopDebugGroup();
98 void InsertDebugMarker(const nsAString& aString);
100 already_AddRefed<ComputePassEncoder> BeginComputePass(
101 const dom::GPUComputePassDescriptor& aDesc);
102 already_AddRefed<RenderPassEncoder> BeginRenderPass(
103 const dom::GPURenderPassDescriptor& aDesc);
104 already_AddRefed<CommandBuffer> Finish(
105 const dom::GPUCommandBufferDescriptor& aDesc);
108 } // namespace webgpu
109 } // namespace mozilla
111 #endif // GPU_CommandEncoder_H_