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"
19 struct GPUComputePassDescriptor
;
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
;
34 struct WGPUComputePass
;
35 struct WGPURenderPass
;
36 struct WGPUImageDataLayout
;
37 struct WGPUImageCopyTexture_TextureId
;
45 class ComputePassEncoder
;
47 class RenderPassEncoder
;
49 class CommandEncoder final
: public ObjectBase
, public ChildOf
<Device
> {
51 GPU_DECL_CYCLE_COLLECTION(CommandEncoder
)
52 GPU_DECL_JS_WRAP(CommandEncoder
)
54 CommandEncoder(Device
* const aParent
, WebGPUChild
* const aBridge
, RawId aId
);
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
);
69 RefPtr
<WebGPUChild
> mBridge
;
70 nsTArray
<WeakPtr
<CanvasContext
>> mTargetContexts
;
73 const auto& GetDevice() const { return mParent
; };
75 void EndComputePass(ffi::WGPUComputePass
& aPass
);
76 void EndRenderPass(ffi::WGPURenderPass
& aPass
);
78 void CopyBufferToBuffer(const Buffer
& aSource
, BufferAddress aSourceOffset
,
79 const Buffer
& aDestination
,
80 BufferAddress aDestinationOffset
,
82 void CopyBufferToTexture(const dom::GPUImageCopyBuffer
& aSource
,
83 const dom::GPUImageCopyTexture
& aDestination
,
84 const dom::GPUExtent3D
& aCopySize
);
85 void CopyTextureToBuffer(const dom::GPUImageCopyTexture
& aSource
,
86 const dom::GPUImageCopyBuffer
& aDestination
,
87 const dom::GPUExtent3D
& aCopySize
);
88 void CopyTextureToTexture(const dom::GPUImageCopyTexture
& aSource
,
89 const dom::GPUImageCopyTexture
& aDestination
,
90 const dom::GPUExtent3D
& aCopySize
);
91 void ClearBuffer(const Buffer
& aBuffer
, const uint64_t aOffset
,
92 const dom::Optional
<uint64_t>& aSize
);
94 void PushDebugGroup(const nsAString
& aString
);
96 void InsertDebugMarker(const nsAString
& aString
);
98 already_AddRefed
<ComputePassEncoder
> BeginComputePass(
99 const dom::GPUComputePassDescriptor
& aDesc
);
100 already_AddRefed
<RenderPassEncoder
> BeginRenderPass(
101 const dom::GPURenderPassDescriptor
& aDesc
);
102 already_AddRefed
<CommandBuffer
> Finish(
103 const dom::GPUCommandBufferDescriptor
& aDesc
);
106 } // namespace webgpu
107 } // namespace mozilla
109 #endif // GPU_CommandEncoder_H_