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"
14 struct WebGPUExtensions
;
15 struct WebGPUFeatures
;
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
;
34 class WebGPUBufferOrWebGPUTexture
;
35 class WebGPULogCallback
;
40 class AttachmentState
;
42 class BindGroupLayout
;
46 class ComputePipeline
;
47 class DepthStencilState
;
57 class Device final
: public ChildOf
<Adapter
> {
59 WEBGPU_DECL_GOOP(Device
)
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_