script_webgpu/
gpuadapterinfo.rs1use std::marker::PhantomData;
6
7use dom_struct::dom_struct;
8use js::context::JSContext;
9use jstraceable_derive::JSTraceable;
10use malloc_size_of_derive::MallocSizeOf;
11use script_bindings::DomTypes;
12use script_bindings::codegen::GenericBindings::WebGPUBinding::{
13 GPUAdapterInfoMethods, GPUAdapterInfoWrap,
14};
15use script_bindings::reflector::{Reflector, reflect_dom_object_with_wrap};
16
17use crate::dom::bindings::root::DomRoot;
18use crate::dom::bindings::str::DOMString;
19use crate::traits::Equivalence;
20
21#[dom_struct]
22pub struct GPUAdapterInfo<D: DomTypes> {
23 reflector_: Reflector,
24 vendor: DOMString,
25 architecture: DOMString,
26 device: DOMString,
27 description: DOMString,
28 subgroup_min_size: u32,
29 subgroup_max_size: u32,
30 is_fallback_adapter: bool,
31 #[no_trace = "Phantom data is not real"]
32 phantom: PhantomData<D>,
33}
34
35impl<D: Equivalence> GPUAdapterInfo<D> {
36 fn new_inherited(
37 vendor: DOMString,
38 architecture: DOMString,
39 device: DOMString,
40 description: DOMString,
41 subgroup_min_size: u32,
42 subgroup_max_size: u32,
43 is_fallback_adapter: bool,
44 ) -> Self {
45 Self {
46 reflector_: Reflector::new(),
47 vendor,
48 architecture,
49 device,
50 description,
51 subgroup_min_size,
52 subgroup_max_size,
53 is_fallback_adapter,
54 phantom: PhantomData,
55 }
56 }
57
58 #[expect(clippy::too_many_arguments)]
59 pub fn new(
60 cx: &mut JSContext,
61 global: &D::GlobalScope,
62 vendor: DOMString,
63 architecture: DOMString,
64 device: DOMString,
65 description: DOMString,
66 subgroup_min_size: u32,
67 subgroup_max_size: u32,
68 is_fallback_adapter: bool,
69 ) -> DomRoot<Self> {
70 reflect_dom_object_with_wrap::<D, _, _>(
71 Box::new(Self::new_inherited(
72 vendor,
73 architecture,
74 device,
75 description,
76 subgroup_min_size,
77 subgroup_max_size,
78 is_fallback_adapter,
79 )),
80 global,
81 cx,
82 GPUAdapterInfoWrap::<D>,
83 )
84 }
85
86 pub fn clone_from(
87 cx: &mut JSContext,
88 global: &D::GlobalScope,
89 info: &GPUAdapterInfo<D>,
90 ) -> DomRoot<Self> {
91 Self::new(
92 cx,
93 global,
94 info.vendor.clone(),
95 info.architecture.clone(),
96 info.device.clone(),
97 info.description.clone(),
98 info.subgroup_min_size,
99 info.subgroup_max_size,
100 info.is_fallback_adapter,
101 )
102 }
103}
104
105impl<D: DomTypes> GPUAdapterInfoMethods<D> for GPUAdapterInfo<D> {
106 fn Vendor(&self) -> DOMString {
108 self.vendor.clone()
109 }
110
111 fn Architecture(&self) -> DOMString {
113 self.architecture.clone()
114 }
115
116 fn Device(&self) -> DOMString {
118 self.device.clone()
119 }
120
121 fn Description(&self) -> DOMString {
123 self.description.clone()
124 }
125
126 fn SubgroupMinSize(&self) -> u32 {
128 self.subgroup_min_size
129 }
130
131 fn SubgroupMaxSize(&self) -> u32 {
133 self.subgroup_max_size
134 }
135
136 fn IsFallbackAdapter(&self) -> bool {
138 self.is_fallback_adapter
139 }
140}