Bug 1560374 - Set testharness and reftest web-platform-tests to Tier-1; r=jmaher...
[gecko.git] / dom / webgpu / Device.h
blob76fd7029b6dd0cf93e82fa33716a1ebff5f957fb
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 WEBGPU_DEVICE_H_
7 #define WEBGPU_DEVICE_H_
9 #include "mozilla/RefPtr.h"
10 #include "ObjectModel.h"
12 namespace mozilla {
13 namespace dom {
14 struct WebGPUExtensions;
15 struct WebGPUFeatures;
16 struct WebGPULimits;
18 struct WebGPUBufferDescriptor;
19 struct WebGPUTextureDescriptor;
20 struct WebGPUSamplerDescriptor;
21 struct WebGPUBindGroupLayoutDescriptor;
22 struct WebGPUPipelineLayoutDescriptor;
23 struct WebGPUBindGroupDescriptor;
24 struct WebGPUBlendStateDescriptor;
25 struct WebGPUDepthStencilStateDescriptor;
26 struct WebGPUInputStateDescriptor;
27 struct WebGPUShaderModuleDescriptor;
28 struct WebGPUAttachmentStateDescriptor;
29 struct WebGPUComputePipelineDescriptor;
30 struct WebGPURenderPipelineDescriptor;
31 struct WebGPUCommandEncoderDescriptor;
33 class Promise;
34 class WebGPUBufferOrWebGPUTexture;
35 class WebGPULogCallback;
36 } // namespace dom
38 namespace webgpu {
39 class Adapter;
40 class AttachmentState;
41 class BindGroup;
42 class BindGroupLayout;
43 class BlendState;
44 class Buffer;
45 class CommandEncoder;
46 class ComputePipeline;
47 class DepthStencilState;
48 class Fence;
49 class InputState;
50 class PipelineLayout;
51 class Queue;
52 class RenderPipeline;
53 class Sampler;
54 class ShaderModule;
55 class Texture;
57 class Device final : public ChildOf<Adapter> {
58 public:
59 WEBGPU_DECL_GOOP(Device)
61 private:
62 Device() = delete;
63 virtual ~Device();
65 public:
66 already_AddRefed<webgpu::Adapter> Adapter() const;
68 void Extensions(dom::WebGPUExtensions& out) const;
69 void Features(dom::WebGPUFeatures& out) const;
70 void Limits(dom::WebGPULimits& out) const;
72 already_AddRefed<Buffer> CreateBuffer(
73 const dom::WebGPUBufferDescriptor& desc) const;
74 already_AddRefed<Texture> CreateTexture(
75 const dom::WebGPUTextureDescriptor& desc) const;
76 already_AddRefed<Sampler> CreateSampler(
77 const dom::WebGPUSamplerDescriptor& desc) const;
79 already_AddRefed<BindGroupLayout> CreateBindGroupLayout(
80 const dom::WebGPUBindGroupLayoutDescriptor& desc) const;
81 already_AddRefed<PipelineLayout> CreatePipelineLayout(
82 const dom::WebGPUPipelineLayoutDescriptor& desc) const;
83 already_AddRefed<BindGroup> CreateBindGroup(
84 const dom::WebGPUBindGroupDescriptor& desc) const;
86 already_AddRefed<BlendState> CreateBlendState(
87 const dom::WebGPUBlendStateDescriptor& desc) const;
88 already_AddRefed<DepthStencilState> CreateDepthStencilState(
89 const dom::WebGPUDepthStencilStateDescriptor& desc) const;
90 already_AddRefed<InputState> CreateInputState(
91 const dom::WebGPUInputStateDescriptor& desc) const;
92 already_AddRefed<ShaderModule> CreateShaderModule(
93 const dom::WebGPUShaderModuleDescriptor& desc) const;
94 already_AddRefed<AttachmentState> CreateAttachmentState(
95 const dom::WebGPUAttachmentStateDescriptor& desc) const;
96 already_AddRefed<ComputePipeline> CreateComputePipeline(
97 const dom::WebGPUComputePipelineDescriptor& desc) const;
98 already_AddRefed<RenderPipeline> CreateRenderPipeline(
99 const dom::WebGPURenderPipelineDescriptor& desc) const;
101 already_AddRefed<CommandEncoder> CreateCommandEncoder(
102 const dom::WebGPUCommandEncoderDescriptor& desc) const;
104 already_AddRefed<Queue> GetQueue() const;
106 RefPtr<dom::WebGPULogCallback> OnLog() const;
107 void SetOnLog(const dom::WebGPULogCallback& callback) const;
109 already_AddRefed<dom::Promise> GetObjectStatus(
110 const dom::WebGPUBufferOrWebGPUTexture& obj) const;
113 } // namespace webgpu
114 } // namespace mozilla
116 #endif // WEBGPU_DEVICE_H_