Bug 1890793: Assert CallArgs::newTarget is not gray. r=spidermonkey-reviewers,sfink...
[gecko.git] / dom / webgpu / RenderBundleEncoder.h
blobd21a26b8331fd32697118a51514103edce086013
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_RenderBundleEncoder_H_
7 #define GPU_RenderBundleEncoder_H_
9 #include "mozilla/dom/TypedArray.h"
10 #include "ObjectModel.h"
12 namespace mozilla::webgpu {
13 namespace ffi {
14 struct WGPURenderBundleEncoder;
15 } // namespace ffi
17 class Device;
18 class RenderBundle;
20 struct ffiWGPURenderBundleEncoderDeleter {
21 void operator()(ffi::WGPURenderBundleEncoder*);
24 class RenderBundleEncoder final : public ObjectBase, public ChildOf<Device> {
25 public:
26 GPU_DECL_CYCLE_COLLECTION(RenderBundleEncoder)
27 GPU_DECL_JS_WRAP(RenderBundleEncoder)
29 RenderBundleEncoder(Device* const aParent, WebGPUChild* const aBridge,
30 const dom::GPURenderBundleEncoderDescriptor& aDesc);
32 private:
33 ~RenderBundleEncoder();
34 void Cleanup();
36 std::unique_ptr<ffi::WGPURenderBundleEncoder, ffiWGPURenderBundleEncoderDeleter> mEncoder;
37 // keep all the used objects alive while the encoder is finished
38 nsTArray<RefPtr<const BindGroup>> mUsedBindGroups;
39 nsTArray<RefPtr<const Buffer>> mUsedBuffers;
40 nsTArray<RefPtr<const RenderPipeline>> mUsedPipelines;
41 nsTArray<RefPtr<const TextureView>> mUsedTextureViews;
43 public:
44 // programmable pass encoder
45 void SetBindGroup(uint32_t aSlot, const BindGroup& aBindGroup,
46 const dom::Sequence<uint32_t>& aDynamicOffsets);
47 // render encoder base
48 void SetPipeline(const RenderPipeline& aPipeline);
49 void SetIndexBuffer(const Buffer& aBuffer,
50 const dom::GPUIndexFormat& aIndexFormat, uint64_t aOffset,
51 uint64_t aSize);
52 void SetVertexBuffer(uint32_t aSlot, const Buffer& aBuffer, uint64_t aOffset,
53 uint64_t aSize);
54 void Draw(uint32_t aVertexCount, uint32_t aInstanceCount,
55 uint32_t aFirstVertex, uint32_t aFirstInstance);
56 void DrawIndexed(uint32_t aIndexCount, uint32_t aInstanceCount,
57 uint32_t aFirstIndex, int32_t aBaseVertex,
58 uint32_t aFirstInstance);
59 void DrawIndirect(const Buffer& aIndirectBuffer, uint64_t aIndirectOffset);
60 void DrawIndexedIndirect(const Buffer& aIndirectBuffer,
61 uint64_t aIndirectOffset);
63 void PushDebugGroup(const nsAString& aString);
64 void PopDebugGroup();
65 void InsertDebugMarker(const nsAString& aString);
67 // self
68 already_AddRefed<RenderBundle> Finish(
69 const dom::GPURenderBundleDescriptor& aDesc);
72 } // namespace mozilla::webgpu
74 #endif // GPU_RenderBundleEncoder_H_