diff --git a/Cargo.lock b/Cargo.lock index 6c2fe1c0f0e..53fd8955826 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6955,7 +6955,7 @@ dependencies = [ [[package]] name = "wgpu-core" version = "0.5.0" -source = "git+https://github.com/gfx-rs/wgpu#7e8b51b4286bd9452567eb1a56edb8e9b7c7f684" +source = "git+https://github.com/gfx-rs/wgpu#f7ec6cc1fe73651cfeda44295cd41533ec60f850" dependencies = [ "arrayvec 0.5.1", "bitflags", @@ -6982,7 +6982,7 @@ dependencies = [ [[package]] name = "wgpu-types" version = "0.5.0" -source = "git+https://github.com/gfx-rs/wgpu#7e8b51b4286bd9452567eb1a56edb8e9b7c7f684" +source = "git+https://github.com/gfx-rs/wgpu#f7ec6cc1fe73651cfeda44295cd41533ec60f850" dependencies = [ "bitflags", "serde", diff --git a/components/script/dom/gpudevice.rs b/components/script/dom/gpudevice.rs index af5f54d919e..0cc2ac593e0 100644 --- a/components/script/dom/gpudevice.rs +++ b/components/script/dom/gpudevice.rs @@ -18,6 +18,7 @@ use crate::dom::bindings::codegen::Bindings::GPUComputePipelineBinding::GPUCompu use crate::dom::bindings::codegen::Bindings::GPUDeviceBinding::{ GPUCommandEncoderDescriptor, GPUDeviceMethods, }; +use crate::dom::bindings::codegen::Bindings::GPUObjectBaseBinding::GPUObjectDescriptorBase; use crate::dom::bindings::codegen::Bindings::GPUPipelineLayoutBinding::GPUPipelineLayoutDescriptor; use crate::dom::bindings::codegen::Bindings::GPURenderBundleEncoderBinding::GPURenderBundleEncoderDescriptor; use crate::dom::bindings::codegen::Bindings::GPURenderPipelineBinding::{ @@ -322,11 +323,7 @@ impl GPUDeviceMethods for GPUDevice { fn CreateBuffer(&self, descriptor: &GPUBufferDescriptor) -> DomRoot { let desc = wgt::BufferUsage::from_bits(descriptor.usage).map(|usg| wgpu_res::BufferDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|s| Cow::Owned(s.to_string())), + label: convert_label(&descriptor.parent), size: descriptor.size as wgt::BufferAddress, usage: usg, mapped_at_creation: descriptor.mappedAtCreation, @@ -482,11 +479,7 @@ impl GPUDeviceMethods for GPUDevice { let desc = if valid { Some(wgpu_bind::BindGroupLayoutDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|s| Cow::Owned(s.to_string())), + label: convert_label(&descriptor.parent), entries: Cow::Owned(entries), }) } else { @@ -529,11 +522,7 @@ impl GPUDeviceMethods for GPUDevice { descriptor: &GPUPipelineLayoutDescriptor, ) -> DomRoot { let desc = wgpu_bind::PipelineLayoutDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|s| Cow::Owned(s.to_string())), + label: convert_label(&descriptor.parent), bind_group_layouts: Cow::Owned( descriptor .bindGroupLayouts @@ -597,11 +586,7 @@ impl GPUDeviceMethods for GPUDevice { .collect::>(); let desc = wgpu_bind::BindGroupDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|l| Cow::Owned(l.to_string())), + label: convert_label(&descriptor.parent), layout: descriptor.layout.id().0, entries: Cow::Owned(entries), }; @@ -688,12 +673,7 @@ impl GPUDeviceMethods for GPUDevice { let scope_id = self.use_current_scope(); let desc = wgpu_pipe::ComputePipelineDescriptor { - label: descriptor - .parent - .parent - .label - .as_ref() - .map(|s| Cow::Owned(s.to_string())), + label: convert_label(&descriptor.parent.parent), layout: Some(descriptor.parent.layout.id().0), compute_stage: wgpu_pipe::ProgrammableStageDescriptor { module: descriptor.computeStage.module.id().0, @@ -739,11 +719,7 @@ impl GPUDeviceMethods for GPUDevice { WebGPURequest::CreateCommandEncoder { device_id: self.device.0, command_encoder_id, - label: descriptor - .parent - .label - .as_ref() - .map(|l| Cow::Owned(l.to_string())), + label: convert_label(&descriptor.parent), }, )) .expect("Failed to create WebGPU command encoder"); @@ -765,11 +741,7 @@ impl GPUDeviceMethods for GPUDevice { let size = convert_texture_size_to_dict(&descriptor.size); let desc = wgt::TextureUsage::from_bits(descriptor.usage).map(|usg| wgpu_res::TextureDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|l| Cow::Owned(l.to_string())), + label: convert_label(&descriptor.parent), size: convert_texture_size_to_wgt(&size), mip_level_count: descriptor.mipLevelCount, sample_count: descriptor.sampleCount, @@ -833,11 +805,7 @@ impl GPUDeviceMethods for GPUDevice { .create_sampler_id(self.device.0.backend()); let compare_enable = descriptor.compare.is_some(); let desc = wgpu_res::SamplerDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|s| Cow::Owned(s.to_string())), + label: convert_label(&descriptor.parent), address_modes: [ convert_address_mode(descriptor.addressModeU), convert_address_mode(descriptor.addressModeV), @@ -907,12 +875,7 @@ impl GPUDeviceMethods for GPUDevice { let desc = if valid { Some(wgpu_pipe::RenderPipelineDescriptor { - label: descriptor - .parent - .parent - .label - .as_ref() - .map(|s| Cow::Owned(s.to_string())), + label: convert_label(&descriptor.parent.parent), layout: Some(descriptor.parent.layout.id().0), vertex_stage: wgpu_pipe::ProgrammableStageDescriptor { module: descriptor.vertexStage.module.id().0, @@ -1048,11 +1011,7 @@ impl GPUDeviceMethods for GPUDevice { descriptor: &GPURenderBundleEncoderDescriptor, ) -> DomRoot { let desc = wgpu_com::RenderBundleEncoderDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|s| Cow::Owned(s.to_string())), + label: convert_label(&descriptor.parent), color_formats: Cow::Owned( descriptor .colorFormats @@ -1323,3 +1282,7 @@ pub fn convert_texture_size_to_wgt(size: &GPUExtent3DDict) -> wgt::Extent3d { depth: size.depth, } } + +pub fn convert_label(parent: &GPUObjectDescriptorBase) -> Option> { + parent.label.as_ref().map(|s| Cow::Owned(s.to_string())) +} diff --git a/components/script/dom/gpurenderbundleencoder.rs b/components/script/dom/gpurenderbundleencoder.rs index 13109d0b9b9..722afdebc0e 100644 --- a/components/script/dom/gpurenderbundleencoder.rs +++ b/components/script/dom/gpurenderbundleencoder.rs @@ -11,11 +11,10 @@ use crate::dom::bindings::str::USVString; use crate::dom::globalscope::GlobalScope; use crate::dom::gpubindgroup::GPUBindGroup; use crate::dom::gpubuffer::GPUBuffer; -use crate::dom::gpudevice::GPUDevice; +use crate::dom::gpudevice::{convert_label, GPUDevice}; use crate::dom::gpurenderbundle::GPURenderBundle; use crate::dom::gpurenderpipeline::GPURenderPipeline; use dom_struct::dom_struct; -use std::borrow::Cow; use webgpu::{ wgpu::command::{bundle_ffi as wgpu_bundle, RenderBundleEncoder}, wgt, WebGPU, WebGPURenderBundle, WebGPURequest, @@ -185,11 +184,7 @@ impl GPURenderBundleEncoderMethods for GPURenderBundleEncoder { /// https://gpuweb.github.io/gpuweb/#dom-gpurenderbundleencoder-finish fn Finish(&self, descriptor: &GPURenderBundleDescriptor) -> DomRoot { let desc = wgt::RenderBundleDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|l| Cow::Owned(l.to_string())), + label: convert_label(&descriptor.parent), }; let encoder = self.render_bundle_encoder.borrow_mut().take().unwrap(); let render_bundle_id = self diff --git a/components/script/dom/gputexture.rs b/components/script/dom/gputexture.rs index fc93e300a9e..175ec7c90cc 100644 --- a/components/script/dom/gputexture.rs +++ b/components/script/dom/gputexture.rs @@ -13,10 +13,11 @@ use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::bindings::str::USVString; use crate::dom::globalscope::GlobalScope; -use crate::dom::gpudevice::{convert_texture_format, convert_texture_view_dimension, GPUDevice}; +use crate::dom::gpudevice::{ + convert_label, convert_texture_format, convert_texture_view_dimension, GPUDevice, +}; use crate::dom::gputextureview::GPUTextureView; use dom_struct::dom_struct; -use std::borrow::Cow; use std::num::NonZeroU32; use std::string::String; use webgpu::{ @@ -142,15 +143,9 @@ impl GPUTextureMethods for GPUTexture { let desc = if valid { Some(resource::TextureViewDescriptor { - label: descriptor - .parent - .label - .as_ref() - .map(|l| Cow::Owned(l.to_string())), - format: descriptor.format.map(|fr| convert_texture_format(fr)), - dimension: descriptor - .dimension - .map(|dm| convert_texture_view_dimension(dm)), + label: convert_label(&descriptor.parent), + format: descriptor.format.map(convert_texture_format), + dimension: descriptor.dimension.map(convert_texture_view_dimension), aspect: match descriptor.aspect { GPUTextureAspect::All => wgt::TextureAspect::All, GPUTextureAspect::Stencil_only => wgt::TextureAspect::StencilOnly,