diff options
author | Zakor Gyula <gyula.zakor@h-lab.eu> | 2020-01-14 08:54:08 +0100 |
---|---|---|
committer | Istvan Miklos <istvan.miklos@h-lab.eu> | 2020-02-11 10:20:34 +0100 |
commit | 4facd3d4d21d131a222d3f44d5e8d077612f30e7 (patch) | |
tree | 838f83ec8bf2f7b2293f0adcd35284f15114fbd3 /components/script | |
parent | 9031369c19f3274a1dee4e15e67c0c539d8aa976 (diff) | |
download | servo-4facd3d4d21d131a222d3f44d5e8d077612f30e7.tar.gz servo-4facd3d4d21d131a222d3f44d5e8d077612f30e7.zip |
Initial implementation of GPUCommandEncoder
Added WebIDL bindings for `GPUCommandEncoder`, `GPUCommandBuffer`, `GPUComputePassEncoder`, `GPUProgrammablePassEncoder`.
Implemented the `beginComputePass`, `copyBufferToBuffer` and `finish` functions of `GPUCommandEncoder`.
Implemented the `createCommandEncoder` function of `GPUDevice`.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/bindings/trace.rs | 8 | ||||
-rw-r--r-- | components/script/dom/globalscope.rs | 11 | ||||
-rw-r--r-- | components/script/dom/gpucommandbuffer.rs | 58 | ||||
-rw-r--r-- | components/script/dom/gpucommandencoder.rs | 114 | ||||
-rw-r--r-- | components/script/dom/gpucomputepassencoder.rs | 59 | ||||
-rw-r--r-- | components/script/dom/gpudevice.rs | 22 | ||||
-rw-r--r-- | components/script/dom/identityhub.rs | 14 | ||||
-rw-r--r-- | components/script/dom/mod.rs | 3 | ||||
-rw-r--r-- | components/script/dom/webidls/GPUCommandBuffer.webidl | 9 | ||||
-rw-r--r-- | components/script/dom/webidls/GPUCommandEncoder.webidl | 45 | ||||
-rw-r--r-- | components/script/dom/webidls/GPUComputePassEncoder.webidl | 15 | ||||
-rw-r--r-- | components/script/dom/webidls/GPUDevice.webidl | 15 | ||||
-rw-r--r-- | components/script/dom/webidls/GPUProgrammablePassEncoder.webidl | 19 |
13 files changed, 379 insertions, 13 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 0ca2f5b2aeb..a1cc4843021 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -153,7 +153,8 @@ use time::{Duration, Timespec, Tm}; use uuid::Uuid; use webgpu::{ WebGPU, WebGPUAdapter, WebGPUBindGroup, WebGPUBindGroupLayout, WebGPUBuffer, - WebGPUComputePipeline, WebGPUDevice, WebGPUPipelineLayout, WebGPUShaderModule, + WebGPUCommandBuffer, WebGPUCommandEncoder, WebGPUComputePipeline, WebGPUDevice, + WebGPUPipelineLayout, WebGPUShaderModule, }; use webrender_api::{DocumentId, ImageKey}; use webvr_traits::{WebVRGamepadData, WebVRGamepadHand, WebVRGamepadState}; @@ -531,13 +532,16 @@ unsafe_no_jsmanaged_fields!(RefCell<Option<WebGPU>>); unsafe_no_jsmanaged_fields!(RefCell<Identities>); unsafe_no_jsmanaged_fields!(WebGPU); unsafe_no_jsmanaged_fields!(WebGPUAdapter); -unsafe_no_jsmanaged_fields!(WebGPUDevice); unsafe_no_jsmanaged_fields!(WebGPUBuffer); unsafe_no_jsmanaged_fields!(WebGPUBindGroup); unsafe_no_jsmanaged_fields!(WebGPUBindGroupLayout); unsafe_no_jsmanaged_fields!(WebGPUComputePipeline); unsafe_no_jsmanaged_fields!(WebGPUPipelineLayout); unsafe_no_jsmanaged_fields!(WebGPUShaderModule); +unsafe_no_jsmanaged_fields!(WebGPUCommandBuffer); +unsafe_no_jsmanaged_fields!(WebGPUCommandEncoder); +unsafe_no_jsmanaged_fields!(WebGPUDevice); +unsafe_no_jsmanaged_fields!(webgpu::wgpu::command::RawPass); unsafe_no_jsmanaged_fields!(GPUBufferState); unsafe_no_jsmanaged_fields!(WebXRSwapChainId); unsafe_no_jsmanaged_fields!(MediaList); diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs index 378397ac2de..f96f1101bca 100644 --- a/components/script/dom/globalscope.rs +++ b/components/script/dom/globalscope.rs @@ -99,8 +99,8 @@ use time::{get_time, Timespec}; use uuid::Uuid; use webgpu::wgpu::{ id::{ - AdapterId, BindGroupId, BindGroupLayoutId, BufferId, ComputePipelineId, DeviceId, - PipelineLayoutId, ShaderModuleId, + AdapterId, BindGroupId, BindGroupLayoutId, BufferId, CommandEncoderId, ComputePipelineId, + DeviceId, PipelineLayoutId, ShaderModuleId, }, Backend, }; @@ -2137,11 +2137,18 @@ impl GlobalScope { .borrow_mut() .create_shader_module_id(backend) } + pub fn wgpu_create_compute_pipeline_id(&self, backend: Backend) -> ComputePipelineId { self.gpu_id_hub .borrow_mut() .create_compute_pipeline_id(backend) } + + pub fn wgpu_create_command_encoder_id(&self, backend: Backend) -> CommandEncoderId { + self.gpu_id_hub + .borrow_mut() + .create_command_encoder_id(backend) + } } fn timestamp_in_ms(time: Timespec) -> u64 { diff --git a/components/script/dom/gpucommandbuffer.rs b/components/script/dom/gpucommandbuffer.rs new file mode 100644 index 00000000000..5cc4c926547 --- /dev/null +++ b/components/script/dom/gpucommandbuffer.rs @@ -0,0 +1,58 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::GPUCommandBufferBinding::{ + self, GPUCommandBufferMethods, +}; +use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::str::DOMString; +use crate::dom::globalscope::GlobalScope; +use dom_struct::dom_struct; +use webgpu::{WebGPU, WebGPUCommandBuffer}; + +#[dom_struct] +pub struct GPUCommandBuffer { + reflector_: Reflector, + #[ignore_malloc_size_of = "defined in webgpu"] + channel: WebGPU, + label: DomRefCell<Option<DOMString>>, + command_buffer: WebGPUCommandBuffer, +} + +impl GPUCommandBuffer { + pub fn new_inherited(channel: WebGPU, command_buffer: WebGPUCommandBuffer) -> GPUCommandBuffer { + GPUCommandBuffer { + channel, + reflector_: Reflector::new(), + label: DomRefCell::new(None), + command_buffer, + } + } + + pub fn new( + global: &GlobalScope, + channel: WebGPU, + command_buffer: WebGPUCommandBuffer, + ) -> DomRoot<GPUCommandBuffer> { + reflect_dom_object( + Box::new(GPUCommandBuffer::new_inherited(channel, command_buffer)), + global, + GPUCommandBufferBinding::Wrap, + ) + } +} + +impl GPUCommandBufferMethods for GPUCommandBuffer { + /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label + fn GetLabel(&self) -> Option<DOMString> { + self.label.borrow().clone() + } + + /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label + fn SetLabel(&self, value: Option<DOMString>) { + *self.label.borrow_mut() = value; + } +} diff --git a/components/script/dom/gpucommandencoder.rs b/components/script/dom/gpucommandencoder.rs new file mode 100644 index 00000000000..5e86c0b8bfd --- /dev/null +++ b/components/script/dom/gpucommandencoder.rs @@ -0,0 +1,114 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::GPUCommandEncoderBinding::{ + self, GPUCommandBufferDescriptor, GPUCommandEncoderMethods, GPUComputePassDescriptor, +}; +use crate::dom::bindings::reflector::DomObject; +use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::str::DOMString; +use crate::dom::globalscope::GlobalScope; +use crate::dom::gpubuffer::GPUBuffer; +use crate::dom::gpucommandbuffer::GPUCommandBuffer; +use crate::dom::gpucomputepassencoder::GPUComputePassEncoder; +use dom_struct::dom_struct; +use ipc_channel::ipc; +use webgpu::{wgpu::command::RawPass, WebGPU, WebGPUCommandEncoder, WebGPURequest}; + +#[dom_struct] +pub struct GPUCommandEncoder { + reflector_: Reflector, + #[ignore_malloc_size_of = "defined in webgpu"] + channel: WebGPU, + label: DomRefCell<Option<DOMString>>, + encoder: WebGPUCommandEncoder, +} + +impl GPUCommandEncoder { + pub fn new_inherited(channel: WebGPU, encoder: WebGPUCommandEncoder) -> GPUCommandEncoder { + GPUCommandEncoder { + channel, + reflector_: Reflector::new(), + label: DomRefCell::new(None), + encoder, + } + } + + pub fn new( + global: &GlobalScope, + channel: WebGPU, + encoder: WebGPUCommandEncoder, + ) -> DomRoot<GPUCommandEncoder> { + reflect_dom_object( + Box::new(GPUCommandEncoder::new_inherited(channel, encoder)), + global, + GPUCommandEncoderBinding::Wrap, + ) + } +} + +impl GPUCommandEncoderMethods for GPUCommandEncoder { + /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label + fn GetLabel(&self) -> Option<DOMString> { + self.label.borrow().clone() + } + + /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label + fn SetLabel(&self, value: Option<DOMString>) { + *self.label.borrow_mut() = value; + } + + /// https://gpuweb.github.io/gpuweb/#dom-gpucommandencoder-begincomputepass + fn BeginComputePass( + &self, + _descriptor: &GPUComputePassDescriptor, + ) -> DomRoot<GPUComputePassEncoder> { + GPUComputePassEncoder::new( + &self.global(), + self.channel.clone(), + RawPass::new_compute(self.encoder.0), + ) + } + + /// https://gpuweb.github.io/gpuweb/#dom-gpucommandencoder-copybuffertobuffer + fn CopyBufferToBuffer( + &self, + source: &GPUBuffer, + source_offset: u64, + destination: &GPUBuffer, + destination_offset: u64, + size: u64, + ) { + self.channel + .0 + .send(WebGPURequest::CopyBufferToBuffer( + self.encoder.0, + source.id().0, + source_offset, + destination.id().0, + destination_offset, + size, + )) + .expect("Failed to send CopyBufferToBuffer"); + } + + /// https://gpuweb.github.io/gpuweb/#dom-gpucommandencoder-finish + fn Finish(&self, _descriptor: &GPUCommandBufferDescriptor) -> DomRoot<GPUCommandBuffer> { + let (sender, receiver) = ipc::channel().unwrap(); + self.channel + .0 + .send(WebGPURequest::CommandEncoderFinish( + sender, + self.encoder.0, + // TODO(zakorgy): We should use `_descriptor` here after it's not empty + // and the underlying wgpu-core struct is serializable + )) + .expect("Failed to send CopyBufferToBuffer"); + + let buffer = receiver.recv().unwrap(); + GPUCommandBuffer::new(&self.global(), self.channel.clone(), buffer) + } +} diff --git a/components/script/dom/gpucomputepassencoder.rs b/components/script/dom/gpucomputepassencoder.rs new file mode 100644 index 00000000000..ecdd4407a8d --- /dev/null +++ b/components/script/dom/gpucomputepassencoder.rs @@ -0,0 +1,59 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::GPUComputePassEncoderBinding::{ + self, GPUComputePassEncoderMethods, +}; +use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::str::DOMString; +use crate::dom::globalscope::GlobalScope; +use dom_struct::dom_struct; +use webgpu::{wgpu::command::RawPass, WebGPU}; + +#[dom_struct] +pub struct GPUComputePassEncoder { + reflector_: Reflector, + #[ignore_malloc_size_of = "defined in webgpu"] + channel: WebGPU, + label: DomRefCell<Option<DOMString>>, + #[ignore_malloc_size_of = "defined in wgpu-core"] + pass: RawPass, +} + +impl GPUComputePassEncoder { + pub fn new_inherited(channel: WebGPU, pass: RawPass) -> GPUComputePassEncoder { + GPUComputePassEncoder { + channel, + reflector_: Reflector::new(), + label: DomRefCell::new(None), + pass, + } + } + + pub fn new( + global: &GlobalScope, + channel: WebGPU, + pass: RawPass, + ) -> DomRoot<GPUComputePassEncoder> { + reflect_dom_object( + Box::new(GPUComputePassEncoder::new_inherited(channel, pass)), + global, + GPUComputePassEncoderBinding::Wrap, + ) + } +} + +impl GPUComputePassEncoderMethods for GPUComputePassEncoder { + /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label + fn GetLabel(&self) -> Option<DOMString> { + self.label.borrow().clone() + } + + /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label + fn SetLabel(&self, value: Option<DOMString>) { + *self.label.borrow_mut() = value; + } +} diff --git a/components/script/dom/gpudevice.rs b/components/script/dom/gpudevice.rs index 66c5981b0f7..514d6ad39d1 100644 --- a/components/script/dom/gpudevice.rs +++ b/components/script/dom/gpudevice.rs @@ -12,7 +12,9 @@ use crate::dom::bindings::codegen::Bindings::GPUBindGroupLayoutBinding::{ }; use crate::dom::bindings::codegen::Bindings::GPUBufferBinding::GPUBufferDescriptor; use crate::dom::bindings::codegen::Bindings::GPUComputePipelineBinding::GPUComputePipelineDescriptor; -use crate::dom::bindings::codegen::Bindings::GPUDeviceBinding::{self, GPUDeviceMethods}; +use crate::dom::bindings::codegen::Bindings::GPUDeviceBinding::{ + self, GPUCommandEncoderDescriptor, GPUDeviceMethods, +}; use crate::dom::bindings::codegen::Bindings::GPUPipelineLayoutBinding::GPUPipelineLayoutDescriptor; use crate::dom::bindings::codegen::Bindings::GPUShaderModuleBinding::GPUShaderModuleDescriptor; use crate::dom::bindings::codegen::UnionTypes::Uint32ArrayOrString::{String, Uint32Array}; @@ -26,6 +28,7 @@ use crate::dom::gpuadapter::GPUAdapter; use crate::dom::gpubindgroup::GPUBindGroup; use crate::dom::gpubindgrouplayout::GPUBindGroupLayout; use crate::dom::gpubuffer::{GPUBuffer, GPUBufferState}; +use crate::dom::gpucommandencoder::GPUCommandEncoder; use crate::dom::gpucomputepipeline::GPUComputePipeline; use crate::dom::gpupipelinelayout::GPUPipelineLayout; use crate::dom::gpushadermodule::GPUShaderModule; @@ -589,4 +592,21 @@ impl GPUDeviceMethods for GPUDevice { let compute_pipeline = receiver.recv().unwrap(); GPUComputePipeline::new(&self.global(), compute_pipeline) } + /// https://gpuweb.github.io/gpuweb/#dom-gpudevice-createcommandencoder + fn CreateCommandEncoder( + &self, + _descriptor: &GPUCommandEncoderDescriptor, + ) -> DomRoot<GPUCommandEncoder> { + let (sender, receiver) = ipc::channel().unwrap(); + let id = self + .global() + .wgpu_create_command_encoder_id(self.device.0.backend()); + self.channel + .0 + .send(WebGPURequest::CreateCommandEncoder(sender, self.device, id)) + .expect("Failed to create WebGPU command encoder"); + let encoder = receiver.recv().unwrap(); + + GPUCommandEncoder::new(&self.global(), self.channel.clone(), encoder) + } } diff --git a/components/script/dom/identityhub.rs b/components/script/dom/identityhub.rs index 838cb6b908b..702172f6d72 100644 --- a/components/script/dom/identityhub.rs +++ b/components/script/dom/identityhub.rs @@ -6,8 +6,8 @@ use smallvec::SmallVec; use webgpu::wgpu::{ hub::IdentityManager, id::{ - AdapterId, BindGroupId, BindGroupLayoutId, BufferId, ComputePipelineId, DeviceId, - PipelineLayoutId, ShaderModuleId, + AdapterId, BindGroupId, BindGroupLayoutId, BufferId, CommandEncoderId, ComputePipelineId, + DeviceId, PipelineLayoutId, ShaderModuleId, }, Backend, }; @@ -22,6 +22,7 @@ pub struct IdentityHub { compute_pipelines: IdentityManager, pipeline_layouts: IdentityManager, shader_modules: IdentityManager, + command_encoders: IdentityManager, backend: Backend, } @@ -36,6 +37,7 @@ impl IdentityHub { compute_pipelines: IdentityManager::default(), pipeline_layouts: IdentityManager::default(), shader_modules: IdentityManager::default(), + command_encoders: IdentityManager::default(), backend, } } @@ -71,6 +73,10 @@ impl IdentityHub { fn create_shader_module_id(&mut self) -> ShaderModuleId { self.shader_modules.alloc(self.backend) } + + pub fn create_command_encoder_id(&mut self) -> CommandEncoderId { + self.command_encoders.alloc(self.backend) + } } #[derive(Debug)] @@ -166,4 +172,8 @@ impl Identities { pub fn create_shader_module_id(&mut self, backend: Backend) -> ShaderModuleId { self.select(backend).create_shader_module_id() } + + pub fn create_command_encoder_id(&mut self, backend: Backend) -> CommandEncoderId { + self.select(backend).create_command_encoder_id() + } } diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index 1b15aee2c9e..8636ede66ac 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -322,6 +322,9 @@ pub mod gpubindgroup; pub mod gpubindgrouplayout; pub mod gpubuffer; pub mod gpubufferusage; +pub mod gpucommandbuffer; +pub mod gpucommandencoder; +pub mod gpucomputepassencoder; pub mod gpucomputepipeline; pub mod gpudevice; pub mod gpupipelinelayout; diff --git a/components/script/dom/webidls/GPUCommandBuffer.webidl b/components/script/dom/webidls/GPUCommandBuffer.webidl new file mode 100644 index 00000000000..fc61ccf4d64 --- /dev/null +++ b/components/script/dom/webidls/GPUCommandBuffer.webidl @@ -0,0 +1,9 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://gpuweb.github.io/gpuweb/#gpucommandbuffer +[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"] +interface GPUCommandBuffer { +}; +GPUCommandBuffer includes GPUObjectBase; diff --git a/components/script/dom/webidls/GPUCommandEncoder.webidl b/components/script/dom/webidls/GPUCommandEncoder.webidl new file mode 100644 index 00000000000..481c720260f --- /dev/null +++ b/components/script/dom/webidls/GPUCommandEncoder.webidl @@ -0,0 +1,45 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://gpuweb.github.io/gpuweb/#gpucommandencoder +[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"] +interface GPUCommandEncoder { + // GPURenderPassEncoder beginRenderPass(GPURenderPassDescriptor descriptor); + GPUComputePassEncoder beginComputePass(optional GPUComputePassDescriptor descriptor = {}); + + void copyBufferToBuffer( + GPUBuffer source, + GPUBufferSize sourceOffset, + GPUBuffer destination, + GPUBufferSize destinationOffset, + GPUBufferSize size); + + // void copyBufferToTexture( + // GPUBufferCopyView source, + // GPUTextureCopyView destination, + // GPUExtent3D copySize); + + // void copyTextureToBuffer( + // GPUTextureCopyView source, + // GPUBufferCopyView destination, + // GPUExtent3D copySize); + + // void copyTextureToTexture( + // GPUTextureCopyView source, + // GPUTextureCopyView destination, + // GPUExtent3D copySize); + + // void pushDebugGroup(DOMString groupLabel); + // void popDebugGroup(); + // void insertDebugMarker(DOMString markerLabel); + + GPUCommandBuffer finish(optional GPUCommandBufferDescriptor descriptor = {}); +}; +GPUCommandEncoder includes GPUObjectBase; + +dictionary GPUComputePassDescriptor : GPUObjectDescriptorBase { +}; + +dictionary GPUCommandBufferDescriptor : GPUObjectDescriptorBase { +}; diff --git a/components/script/dom/webidls/GPUComputePassEncoder.webidl b/components/script/dom/webidls/GPUComputePassEncoder.webidl new file mode 100644 index 00000000000..0c03436a7e4 --- /dev/null +++ b/components/script/dom/webidls/GPUComputePassEncoder.webidl @@ -0,0 +1,15 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://gpuweb.github.io/gpuweb/#gpucomputepassencoder +[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"] +interface GPUComputePassEncoder { + // void setPipeline(GPUComputePipeline pipeline); + // void dispatch(unsigned long x, optional unsigned long y = 1, optional unsigned long z = 1); + // void dispatchIndirect(GPUBuffer indirectBuffer, GPUBufferSize indirectOffset); + + // void endPass(); +}; +GPUComputePassEncoder includes GPUObjectBase; +GPUComputePassEncoder includes GPUProgrammablePassEncoder; diff --git a/components/script/dom/webidls/GPUDevice.webidl b/components/script/dom/webidls/GPUDevice.webidl index ec1568e5b87..05fb449df8c 100644 --- a/components/script/dom/webidls/GPUDevice.webidl +++ b/components/script/dom/webidls/GPUDevice.webidl @@ -11,9 +11,9 @@ interface GPUDevice : EventTarget { GPUBuffer createBuffer(GPUBufferDescriptor descriptor); GPUMappedBuffer createBufferMapped(GPUBufferDescriptor descriptor); - //Promise<GPUMappedBuffer> createBufferMappedAsync(GPUBufferDescriptor descriptor); - //GPUTexture createTexture(GPUTextureDescriptor descriptor); - //GPUSampler createSampler(optional GPUSamplerDescriptor descriptor = {}); + // Promise<GPUMappedBuffer> createBufferMappedAsync(GPUBufferDescriptor descriptor); + // GPUTexture createTexture(GPUTextureDescriptor descriptor); + // GPUSampler createSampler(optional GPUSamplerDescriptor descriptor = {}); GPUBindGroupLayout createBindGroupLayout(GPUBindGroupLayoutDescriptor descriptor); GPUPipelineLayout createPipelineLayout(GPUPipelineLayoutDescriptor descriptor); @@ -21,11 +21,14 @@ interface GPUDevice : EventTarget { GPUShaderModule createShaderModule(GPUShaderModuleDescriptor descriptor); GPUComputePipeline createComputePipeline(GPUComputePipelineDescriptor descriptor); - /*GPURenderPipeline createRenderPipeline(GPURenderPipelineDescriptor descriptor); + // GPURenderPipeline createRenderPipeline(GPURenderPipelineDescriptor descriptor); GPUCommandEncoder createCommandEncoder(optional GPUCommandEncoderDescriptor descriptor = {}); - GPURenderBundleEncoder createRenderBundleEncoder(GPURenderBundleEncoderDescriptor descriptor); + // GPURenderBundleEncoder createRenderBundleEncoder(GPURenderBundleEncoderDescriptor descriptor); - GPUQueue getQueue();*/ + // GPUQueue getQueue(); }; GPUDevice includes GPUObjectBase; + +dictionary GPUCommandEncoderDescriptor : GPUObjectDescriptorBase { +}; diff --git a/components/script/dom/webidls/GPUProgrammablePassEncoder.webidl b/components/script/dom/webidls/GPUProgrammablePassEncoder.webidl new file mode 100644 index 00000000000..2a44e806065 --- /dev/null +++ b/components/script/dom/webidls/GPUProgrammablePassEncoder.webidl @@ -0,0 +1,19 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://gpuweb.github.io/gpuweb/#gpuprogrammablepassencoder +[Exposed=(Window, DedicatedWorker)] +interface mixin GPUProgrammablePassEncoder { + // void setBindGroup(unsigned long index, GPUBindGroup bindGroup, + // optional sequence<unsigned long> dynamicOffsets = []); + + // void setBindGroup(unsigned long index, GPUBindGroup bindGroup, + // Uint32Array dynamicOffsetsData, + // unsigned long long dynamicOffsetsDataStart, + // unsigned long long dynamicOffsetsDataLength); + + // void pushDebugGroup(DOMString groupLabel); + // void popDebugGroup(); + // void insertDebugMarker(DOMString markerLabel); +}; |