aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/gpucomputepipeline.rs
diff options
context:
space:
mode:
authorIstvan Miklos <istvan.miklos@h-lab.eu>2020-02-03 15:42:13 +0100
committerIstvan Miklos <istvan.miklos@h-lab.eu>2020-02-11 10:15:03 +0100
commit9031369c19f3274a1dee4e15e67c0c539d8aa976 (patch)
tree4ba7e1beb281d179f42bf575bacc2c58a4e8d574 /components/script/dom/gpucomputepipeline.rs
parenta8621c4ed9d87f6d168fd9b70e0cf501a4033632 (diff)
downloadservo-9031369c19f3274a1dee4e15e67c0c539d8aa976.tar.gz
servo-9031369c19f3274a1dee4e15e67c0c539d8aa976.zip
Initial implementation of GPUComputePipeline
Added WebIDL bindings for `GPUComputePipeline`. Implemented the `createComputePipeline` function of `GPUDevice`.
Diffstat (limited to 'components/script/dom/gpucomputepipeline.rs')
-rw-r--r--components/script/dom/gpucomputepipeline.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/components/script/dom/gpucomputepipeline.rs b/components/script/dom/gpucomputepipeline.rs
new file mode 100644
index 00000000000..32c0338a7e9
--- /dev/null
+++ b/components/script/dom/gpucomputepipeline.rs
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use crate::dom::bindings::cell::DomRefCell;
+use crate::dom::bindings::codegen::Bindings::GPUComputePipelineBinding::{
+ GPUComputePipelineBinding, GPUComputePipelineMethods,
+};
+use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::Reflector;
+use crate::dom::bindings::root::DomRoot;
+use crate::dom::bindings::str::DOMString;
+use crate::dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
+use webgpu::WebGPUComputePipeline;
+
+#[dom_struct]
+pub struct GPUComputePipeline {
+ reflector_: Reflector,
+ label: DomRefCell<Option<DOMString>>,
+ compute_pipeline: WebGPUComputePipeline,
+}
+
+impl GPUComputePipeline {
+ fn new_inherited(compute_pipeline: WebGPUComputePipeline) -> GPUComputePipeline {
+ Self {
+ reflector_: Reflector::new(),
+ label: DomRefCell::new(None),
+ compute_pipeline,
+ }
+ }
+
+ pub fn new(
+ global: &GlobalScope,
+ compute_pipeline: WebGPUComputePipeline,
+ ) -> DomRoot<GPUComputePipeline> {
+ reflect_dom_object(
+ Box::new(GPUComputePipeline::new_inherited(compute_pipeline)),
+ global,
+ GPUComputePipelineBinding::Wrap,
+ )
+ }
+}
+
+impl GPUComputePipelineMethods for GPUComputePipeline {
+ /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label
+ fn GetLabel(&self) -> Option<DOMString> {
+ self.label.borrow().clone()
+ }
+
+ /// https://gpuweb.github.io/gpuweb/#dom-gpuobjectbase-label
+ fn SetLabel(&self, value: Option<DOMString>) {
+ *self.label.borrow_mut() = value;
+ }
+}