aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/gpudevice.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/gpudevice.rs')
-rw-r--r--components/script/dom/gpudevice.rs108
1 files changed, 47 insertions, 61 deletions
diff --git a/components/script/dom/gpudevice.rs b/components/script/dom/gpudevice.rs
index 0ebefda60a0..de3efec8117 100644
--- a/components/script/dom/gpudevice.rs
+++ b/components/script/dom/gpudevice.rs
@@ -12,8 +12,6 @@ use crate::dom::bindings::codegen::Bindings::GPUBindGroupLayoutBinding::{
use crate::dom::bindings::codegen::Bindings::GPUBufferBinding::GPUBufferDescriptor;
use crate::dom::bindings::codegen::Bindings::GPUDeviceBinding::{self, GPUDeviceMethods};
use crate::dom::bindings::codegen::Bindings::GPUPipelineLayoutBinding::GPUPipelineLayoutDescriptor;
-use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods;
-use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
@@ -23,12 +21,11 @@ use crate::dom::gpuadapter::GPUAdapter;
use crate::dom::gpubindgrouplayout::GPUBindGroupLayout;
use crate::dom::gpubuffer::{GPUBuffer, GPUBufferState};
use crate::dom::gpupipelinelayout::GPUPipelineLayout;
-use crate::dom::window::Window;
use crate::script_runtime::JSContext as SafeJSContext;
use dom_struct::dom_struct;
use ipc_channel::ipc;
use js::jsapi::{Heap, JSObject};
-use js::jsval::{JSVal, ObjectValue, UndefinedValue};
+use js::jsval::{JSVal, ObjectValue};
use js::typedarray::{ArrayBuffer, CreateWith};
use std::collections::{HashMap, HashSet};
use std::ptr::{self, NonNull};
@@ -179,20 +176,16 @@ impl GPUDeviceMethods for GPUDevice {
fn CreateBuffer(&self, descriptor: &GPUBufferDescriptor) -> DomRoot<GPUBuffer> {
let (valid, wgpu_descriptor) = self.validate_buffer_descriptor(descriptor);
let (sender, receiver) = ipc::channel().unwrap();
- if let Some(window) = self.global().downcast::<Window>() {
- let id = window.Navigator().create_buffer_id(self.device.0.backend());
- self.channel
- .0
- .send(WebGPURequest::CreateBuffer(
- sender,
- self.device,
- id,
- wgpu_descriptor,
- ))
- .expect("Failed to create WebGPU buffer");
- } else {
- unimplemented!()
- };
+ let id = self.global().wgpu_create_buffer_id(self.device.0.backend());
+ self.channel
+ .0
+ .send(WebGPURequest::CreateBuffer(
+ sender,
+ self.device,
+ id,
+ wgpu_descriptor,
+ ))
+ .expect("Failed to create WebGPU buffer");
let buffer = receiver.recv().unwrap();
@@ -216,21 +209,16 @@ impl GPUDeviceMethods for GPUDevice {
) -> Vec<JSVal> {
let (valid, wgpu_descriptor) = self.validate_buffer_descriptor(descriptor);
let (sender, receiver) = ipc::channel().unwrap();
- rooted!(in(*cx) let js_val = UndefinedValue());
- if let Some(window) = self.global().downcast::<Window>() {
- let id = window.Navigator().create_buffer_id(self.device.0.backend());
- self.channel
- .0
- .send(WebGPURequest::CreateBufferMapped(
- sender,
- self.device,
- id,
- wgpu_descriptor.clone(),
- ))
- .expect("Failed to create WebGPU buffer");
- } else {
- return vec![js_val.get()];
- };
+ let id = self.global().wgpu_create_buffer_id(self.device.0.backend());
+ self.channel
+ .0
+ .send(WebGPURequest::CreateBufferMapped(
+ sender,
+ self.device,
+ id,
+ wgpu_descriptor.clone(),
+ ))
+ .expect("Failed to create WebGPU buffer");
let (buffer, array_buffer) = receiver.recv().unwrap();
@@ -381,20 +369,19 @@ impl GPUDeviceMethods for GPUDevice {
max_dynamic_storage_buffers_per_pipeline_layout >= 0;
let (sender, receiver) = ipc::channel().unwrap();
- if let Some(window) = self.global().downcast::<Window>() {
- let id = window
- .Navigator()
- .create_bind_group_layout_id(self.device.0.backend());
- self.channel
- .0
- .send(WebGPURequest::CreateBindGroupLayout(
- sender,
- self.device,
- id,
- bindings.clone(),
- ))
- .expect("Failed to create WebGPU BindGroupLayout");
- }
+ let id = self
+ .global()
+ .wgpu_create_bind_group_layout_id(self.device.0.backend());
+ self.channel
+ .0
+ .send(WebGPURequest::CreateBindGroupLayout(
+ sender,
+ self.device,
+ id,
+ bindings.clone(),
+ ))
+ .expect("Failed to create WebGPU BindGroupLayout");
+
let bgl = receiver.recv().unwrap();
let binds = descriptor
@@ -460,20 +447,19 @@ impl GPUDeviceMethods for GPUDevice {
max_dynamic_storage_buffers_per_pipeline_layout >= 0;
let (sender, receiver) = ipc::channel().unwrap();
- if let Some(window) = self.global().downcast::<Window>() {
- let id = window
- .Navigator()
- .create_pipeline_layout_id(self.device.0.backend());
- self.channel
- .0
- .send(WebGPURequest::CreatePipelineLayout(
- sender,
- self.device,
- id,
- bgl_ids,
- ))
- .expect("Failed to create WebGPU PipelineLayout");
- }
+ let id = self
+ .global()
+ .wgpu_create_pipeline_layout_id(self.device.0.backend());
+ self.channel
+ .0
+ .send(WebGPURequest::CreatePipelineLayout(
+ sender,
+ self.device,
+ id,
+ bgl_ids,
+ ))
+ .expect("Failed to create WebGPU PipelineLayout");
+
let pipeline_layout = receiver.recv().unwrap();
GPUPipelineLayout::new(&self.global(), bind_group_layouts, pipeline_layout, valid)
}