clippy: Fix type_complexity warnings in components/script/dom (#33790)

* clippy: Fix type_complexity warnings in components/script/dom

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Use explicit & implicit method calls where needed

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Remove unwrap & pass pipeline_layout

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Remove unused variable - bgls

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

---------

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>
This commit is contained in:
tanishka 2024-10-11 20:27:41 +05:30 committed by GitHub
parent 2a6cfbaaf9
commit 8843a0e400
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 38 additions and 25 deletions

View file

@ -76,11 +76,11 @@ impl GPUComputePipeline {
) -> WebGPUComputePipeline { ) -> WebGPUComputePipeline {
let compute_pipeline_id = device.global().wgpu_id_hub().create_compute_pipeline_id(); let compute_pipeline_id = device.global().wgpu_id_hub().create_compute_pipeline_id();
let (layout, implicit_ids, _) = device.get_pipeline_layout_data(&descriptor.parent.layout); let pipeline_layout = device.get_pipeline_layout_data(&descriptor.parent.layout);
let desc = ComputePipelineDescriptor { let desc = ComputePipelineDescriptor {
label: (&descriptor.parent.parent).into(), label: (&descriptor.parent.parent).into(),
layout, layout: pipeline_layout.explicit(),
stage: (&descriptor.compute).into(), stage: (&descriptor.compute).into(),
cache: None, cache: None,
}; };
@ -92,7 +92,7 @@ impl GPUComputePipeline {
device_id: device.id().0, device_id: device.id().0,
compute_pipeline_id, compute_pipeline_id,
descriptor: desc, descriptor: desc,
implicit_ids, implicit_ids: pipeline_layout.implicit(),
async_sender, async_sender,
}) })
.expect("Failed to create WebGPU ComputePipeline"); .expect("Failed to create WebGPU ComputePipeline");

View file

@ -86,6 +86,29 @@ pub struct GPUDevice {
valid: Cell<bool>, valid: Cell<bool>,
} }
pub enum PipelineLayout {
Implicit(PipelineLayoutId, Vec<BindGroupLayoutId>),
Explicit(PipelineLayoutId),
}
impl PipelineLayout {
pub fn explicit(&self) -> Option<PipelineLayoutId> {
match self {
PipelineLayout::Explicit(layout_id) => Some(*layout_id),
_ => None,
}
}
pub fn implicit(self) -> Option<(PipelineLayoutId, Vec<BindGroupLayoutId>)> {
match self {
PipelineLayout::Implicit(layout_id, bind_group_layout_ids) => {
Some((layout_id, bind_group_layout_ids))
},
_ => None,
}
}
}
impl GPUDevice { impl GPUDevice {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
fn new_inherited( fn new_inherited(
@ -213,39 +236,30 @@ impl GPUDevice {
pub fn get_pipeline_layout_data( pub fn get_pipeline_layout_data(
&self, &self,
layout: &GPUPipelineLayoutOrGPUAutoLayoutMode, layout: &GPUPipelineLayoutOrGPUAutoLayoutMode,
) -> ( ) -> PipelineLayout {
Option<PipelineLayoutId>,
Option<(PipelineLayoutId, Vec<BindGroupLayoutId>)>,
Vec<webgpu::WebGPUBindGroupLayout>,
) {
if let GPUPipelineLayoutOrGPUAutoLayoutMode::GPUPipelineLayout(ref layout) = layout { if let GPUPipelineLayoutOrGPUAutoLayoutMode::GPUPipelineLayout(ref layout) = layout {
(Some(layout.id().0), None, layout.bind_group_layouts()) PipelineLayout::Explicit(layout.id().0)
} else { } else {
let layout_id = self.global().wgpu_id_hub().create_pipeline_layout_id(); let layout_id = self.global().wgpu_id_hub().create_pipeline_layout_id();
let max_bind_grps = self.limits.MaxBindGroups(); let max_bind_grps = self.limits.MaxBindGroups();
let mut bgls = Vec::with_capacity(max_bind_grps as usize);
let mut bgl_ids = Vec::with_capacity(max_bind_grps as usize); let mut bgl_ids = Vec::with_capacity(max_bind_grps as usize);
for _ in 0..max_bind_grps { for _ in 0..max_bind_grps {
let bgl = self.global().wgpu_id_hub().create_bind_group_layout_id(); let bgl = self.global().wgpu_id_hub().create_bind_group_layout_id();
bgls.push(webgpu::WebGPUBindGroupLayout(bgl));
bgl_ids.push(bgl); bgl_ids.push(bgl);
} }
(None, Some((layout_id, bgl_ids)), bgls) PipelineLayout::Implicit(layout_id, bgl_ids)
} }
} }
pub fn parse_render_pipeline<'a>( pub fn parse_render_pipeline<'a>(
&self, &self,
descriptor: &GPURenderPipelineDescriptor, descriptor: &GPURenderPipelineDescriptor,
) -> Fallible<( ) -> Fallible<(PipelineLayout, RenderPipelineDescriptor<'a>)> {
Option<(PipelineLayoutId, Vec<BindGroupLayoutId>)>, let pipeline_layout = self.get_pipeline_layout_data(&descriptor.parent.layout);
RenderPipelineDescriptor<'a>,
)> {
let (layout, implicit_ids, _) = self.get_pipeline_layout_data(&descriptor.parent.layout);
let desc = wgpu_pipe::RenderPipelineDescriptor { let desc = wgpu_pipe::RenderPipelineDescriptor {
label: (&descriptor.parent.parent).into(), label: (&descriptor.parent.parent).into(),
layout, layout: pipeline_layout.explicit(),
cache: None, cache: None,
vertex: wgpu_pipe::VertexState { vertex: wgpu_pipe::VertexState {
stage: (&descriptor.vertex.parent).into(), stage: (&descriptor.vertex.parent).into(),
@ -349,7 +363,7 @@ impl GPUDevice {
}, },
multiview: None, multiview: None,
}; };
Ok((implicit_ids, desc)) Ok((pipeline_layout, desc))
} }
/// <https://gpuweb.github.io/gpuweb/#lose-the-device> /// <https://gpuweb.github.io/gpuweb/#lose-the-device>
@ -477,8 +491,8 @@ impl GPUDeviceMethods for GPUDevice {
&self, &self,
descriptor: &GPURenderPipelineDescriptor, descriptor: &GPURenderPipelineDescriptor,
) -> Fallible<DomRoot<GPURenderPipeline>> { ) -> Fallible<DomRoot<GPURenderPipeline>> {
let (implicit_ids, desc) = self.parse_render_pipeline(descriptor)?; let (pipeline_layout, desc) = self.parse_render_pipeline(descriptor)?;
let render_pipeline = GPURenderPipeline::create(self, implicit_ids, desc, None)?; let render_pipeline = GPURenderPipeline::create(self, pipeline_layout, desc, None)?;
Ok(GPURenderPipeline::new( Ok(GPURenderPipeline::new(
&self.global(), &self.global(),
render_pipeline, render_pipeline,

View file

@ -4,7 +4,6 @@
use dom_struct::dom_struct; use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender; use ipc_channel::ipc::IpcSender;
use webgpu::wgc::id::{BindGroupLayoutId, PipelineLayoutId};
use webgpu::wgc::pipeline::RenderPipelineDescriptor; use webgpu::wgc::pipeline::RenderPipelineDescriptor;
use webgpu::{WebGPU, WebGPUBindGroupLayout, WebGPURenderPipeline, WebGPURequest, WebGPUResponse}; use webgpu::{WebGPU, WebGPUBindGroupLayout, WebGPURenderPipeline, WebGPURequest, WebGPUResponse};
@ -16,7 +15,7 @@ use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::USVString; use crate::dom::bindings::str::USVString;
use crate::dom::globalscope::GlobalScope; use crate::dom::globalscope::GlobalScope;
use crate::dom::gpubindgrouplayout::GPUBindGroupLayout; use crate::dom::gpubindgrouplayout::GPUBindGroupLayout;
use crate::dom::gpudevice::GPUDevice; use crate::dom::gpudevice::{GPUDevice, PipelineLayout};
#[dom_struct] #[dom_struct]
pub struct GPURenderPipeline { pub struct GPURenderPipeline {
@ -70,7 +69,7 @@ impl GPURenderPipeline {
/// <https://gpuweb.github.io/gpuweb/#dom-gpudevice-createrenderpipeline> /// <https://gpuweb.github.io/gpuweb/#dom-gpudevice-createrenderpipeline>
pub fn create( pub fn create(
device: &GPUDevice, device: &GPUDevice,
implicit_ids: Option<(PipelineLayoutId, Vec<BindGroupLayoutId>)>, pipeline_layout: PipelineLayout,
descriptor: RenderPipelineDescriptor<'static>, descriptor: RenderPipelineDescriptor<'static>,
async_sender: Option<IpcSender<WebGPUResponse>>, async_sender: Option<IpcSender<WebGPUResponse>>,
) -> Fallible<WebGPURenderPipeline> { ) -> Fallible<WebGPURenderPipeline> {
@ -83,7 +82,7 @@ impl GPURenderPipeline {
device_id: device.id().0, device_id: device.id().0,
render_pipeline_id, render_pipeline_id,
descriptor, descriptor,
implicit_ids, implicit_ids: pipeline_layout.implicit(),
async_sender, async_sender,
}) })
.expect("Failed to create WebGPU render pipeline"); .expect("Failed to create WebGPU render pipeline");