script/dom/webgpu/
gpuadapterinfo.rs1use 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 fn Vendor(&self) -> DOMString {
97 self.vendor.clone()
98 }
99
100 fn Architecture(&self) -> DOMString {
102 self.architecture.clone()
103 }
104
105 fn Device(&self) -> DOMString {
107 self.device.clone()
108 }
109
110 fn Description(&self) -> DOMString {
112 self.description.clone()
113 }
114
115 fn SubgroupMinSize(&self) -> u32 {
117 self.subgroup_min_size
118 }
119
120 fn SubgroupMaxSize(&self) -> u32 {
122 self.subgroup_max_size
123 }
124
125 fn IsFallbackAdapter(&self) -> bool {
127 self.is_fallback_adapter
128 }
129}