script/dom/webgpu/
gpuadapterinfo.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use dom_struct::dom_struct;
6
7use crate::dom::bindings::codegen::Bindings::WebGPUBinding::GPUAdapterInfoMethods;
8use crate::dom::bindings::reflector::{Reflector, reflect_dom_object};
9use crate::dom::bindings::root::DomRoot;
10use crate::dom::bindings::str::DOMString;
11use crate::dom::globalscope::GlobalScope;
12use crate::script_runtime::CanGc;
13
14#[dom_struct]
15pub(crate) struct GPUAdapterInfo {
16    reflector_: Reflector,
17    vendor: DOMString,
18    architecture: DOMString,
19    device: DOMString,
20    description: DOMString,
21    subgroup_min_size: u32,
22    subgroup_max_size: u32,
23    is_fallback_adapter: bool,
24}
25
26impl GPUAdapterInfo {
27    fn new_inherited(
28        vendor: DOMString,
29        architecture: DOMString,
30        device: DOMString,
31        description: DOMString,
32        subgroup_min_size: u32,
33        subgroup_max_size: u32,
34        is_fallback_adapter: bool,
35    ) -> Self {
36        Self {
37            reflector_: Reflector::new(),
38            vendor,
39            architecture,
40            device,
41            description,
42            subgroup_min_size,
43            subgroup_max_size,
44            is_fallback_adapter,
45        }
46    }
47
48    #[allow(clippy::too_many_arguments)]
49    pub(crate) fn new(
50        global: &GlobalScope,
51        vendor: DOMString,
52        architecture: DOMString,
53        device: DOMString,
54        description: DOMString,
55        subgroup_min_size: u32,
56        subgroup_max_size: u32,
57        is_fallback_adapter: bool,
58        can_gc: CanGc,
59    ) -> DomRoot<Self> {
60        reflect_dom_object(
61            Box::new(Self::new_inherited(
62                vendor,
63                architecture,
64                device,
65                description,
66                subgroup_min_size,
67                subgroup_max_size,
68                is_fallback_adapter,
69            )),
70            global,
71            can_gc,
72        )
73    }
74
75    pub(crate) fn clone_from(
76        global: &GlobalScope,
77        info: &GPUAdapterInfo,
78        can_gc: CanGc,
79    ) -> DomRoot<Self> {
80        Self::new(
81            global,
82            info.vendor.clone(),
83            info.architecture.clone(),
84            info.device.clone(),
85            info.description.clone(),
86            info.subgroup_min_size,
87            info.subgroup_max_size,
88            info.is_fallback_adapter,
89            can_gc,
90        )
91    }
92}
93
94impl GPUAdapterInfoMethods<crate::DomTypeHolder> for GPUAdapterInfo {
95    /// <https://gpuweb.github.io/gpuweb/#dom-gpuadapterinfo-vendor>
96    fn Vendor(&self) -> DOMString {
97        self.vendor.clone()
98    }
99
100    /// <https://gpuweb.github.io/gpuweb/#dom-gpuadapterinfo-architecture>
101    fn Architecture(&self) -> DOMString {
102        self.architecture.clone()
103    }
104
105    /// <https://gpuweb.github.io/gpuweb/#dom-gpuadapterinfo-device>
106    fn Device(&self) -> DOMString {
107        self.device.clone()
108    }
109
110    /// <https://gpuweb.github.io/gpuweb/#dom-gpuadapterinfo-description>
111    fn Description(&self) -> DOMString {
112        self.description.clone()
113    }
114
115    /// <https://gpuweb.github.io/gpuweb/#dom-gpuadapterinfo-subgroupminsize>
116    fn SubgroupMinSize(&self) -> u32 {
117        self.subgroup_min_size
118    }
119
120    /// <https://gpuweb.github.io/gpuweb/#dom-gpuadapterinfo-subgroupmaxsize>
121    fn SubgroupMaxSize(&self) -> u32 {
122        self.subgroup_max_size
123    }
124
125    /// <https://gpuweb.github.io/gpuweb/#dom-gpuadapterinfo-isfallbackadapter>
126    fn IsFallbackAdapter(&self) -> bool {
127        self.is_fallback_adapter
128    }
129}