aboutsummaryrefslogtreecommitdiffstats
path: root/components/webgpu
diff options
context:
space:
mode:
Diffstat (limited to 'components/webgpu')
-rw-r--r--components/webgpu/ipc_messages/recv.rs18
-rw-r--r--components/webgpu/swapchain.rs12
-rw-r--r--components/webgpu/wgpu_thread.rs121
3 files changed, 70 insertions, 81 deletions
diff --git a/components/webgpu/ipc_messages/recv.rs b/components/webgpu/ipc_messages/recv.rs
index 658daf0f736..041a576daeb 100644
--- a/components/webgpu/ipc_messages/recv.rs
+++ b/components/webgpu/ipc_messages/recv.rs
@@ -15,7 +15,7 @@ use wgc::binding_model::{
BindGroupDescriptor, BindGroupLayoutDescriptor, PipelineLayoutDescriptor,
};
use wgc::command::{
- ImageCopyBuffer, ImageCopyTexture, RenderBundleDescriptor, RenderBundleEncoder,
+ RenderBundleDescriptor, RenderBundleEncoder, TexelCopyBufferInfo, TexelCopyTextureInfo,
};
use wgc::device::HostMap;
use wgc::id;
@@ -69,20 +69,20 @@ pub enum WebGPURequest {
},
CopyBufferToTexture {
command_encoder_id: id::CommandEncoderId,
- source: ImageCopyBuffer,
- destination: ImageCopyTexture,
+ source: TexelCopyBufferInfo,
+ destination: TexelCopyTextureInfo,
copy_size: wgt::Extent3d,
},
CopyTextureToBuffer {
command_encoder_id: id::CommandEncoderId,
- source: ImageCopyTexture,
- destination: ImageCopyBuffer,
+ source: TexelCopyTextureInfo,
+ destination: TexelCopyBufferInfo,
copy_size: wgt::Extent3d,
},
CopyTextureToTexture {
command_encoder_id: id::CommandEncoderId,
- source: ImageCopyTexture,
- destination: ImageCopyTexture,
+ source: TexelCopyTextureInfo,
+ destination: TexelCopyTextureInfo,
copy_size: wgt::Extent3d,
},
CreateBindGroup {
@@ -291,8 +291,8 @@ pub enum WebGPURequest {
WriteTexture {
device_id: id::DeviceId,
queue_id: id::QueueId,
- texture_cv: ImageCopyTexture,
- data_layout: wgt::ImageDataLayout,
+ texture_cv: TexelCopyTextureInfo,
+ data_layout: wgt::TexelCopyBufferLayout,
size: wgt::Extent3d,
data: IpcSharedMemory,
},
diff --git a/components/webgpu/swapchain.rs b/components/webgpu/swapchain.rs
index fe7f65dd61f..b1512eae809 100644
--- a/components/webgpu/swapchain.rs
+++ b/components/webgpu/swapchain.rs
@@ -23,7 +23,7 @@ use webrender_traits::{WebrenderExternalImageApi, WebrenderImageSource};
use wgpu_core::device::HostMap;
use wgpu_core::global::Global;
use wgpu_core::id;
-use wgpu_core::resource::{BufferAccessError, BufferMapCallback, BufferMapOperation};
+use wgpu_core::resource::{BufferAccessError, BufferMapOperation};
use crate::{wgt, ContextConfiguration, Error, WebGPUMsg};
@@ -471,15 +471,15 @@ impl crate::WGPU {
let (encoder_id, error) =
global.device_create_command_encoder(device_id, &comm_desc, Some(encoder_id));
err(error)?;
- let buffer_cv = wgt::ImageCopyBuffer {
+ let buffer_cv = wgt::TexelCopyBufferInfo {
buffer: buffer_id,
- layout: wgt::ImageDataLayout {
+ layout: wgt::TexelCopyBufferLayout {
offset: 0,
bytes_per_row: Some(image_desc.buffer_stride() as u32),
rows_per_image: None,
},
};
- let texture_cv = wgt::ImageCopyTexture {
+ let texture_cv = wgt::TexelCopyTextureInfo {
texture: texture_id,
mip_level: 0,
origin: wgt::Origin3d::ZERO,
@@ -511,7 +511,7 @@ impl crate::WGPU {
let webrender_api = Arc::clone(&self.webrender_api);
let webrender_document = self.webrender_document;
let token = self.poller.token();
- BufferMapCallback::from_rust(Box::from(move |result| {
+ Box::new(move |result| {
drop(token);
update_wr_image(
result,
@@ -524,7 +524,7 @@ impl crate::WGPU {
image_desc,
presentation_id,
);
- }))
+ })
};
let map_op = BufferMapOperation {
host: HostMap::Read,
diff --git a/components/webgpu/wgpu_thread.rs b/components/webgpu/wgpu_thread.rs
index 3b1e43d6392..2db67d2029f 100644
--- a/components/webgpu/wgpu_thread.rs
+++ b/components/webgpu/wgpu_thread.rs
@@ -17,13 +17,12 @@ use webrender::{RenderApi, RenderApiSender};
use webrender_api::{DocumentId, ExternalImageId};
use webrender_traits::{WebrenderExternalImageRegistry, WebrenderImageHandlerType};
use wgc::command::{ComputePass, ComputePassDescriptor, RenderPass};
-use wgc::device::queue::SubmittedWorkDoneClosure;
-use wgc::device::{DeviceDescriptor, DeviceLostClosure, ImplicitPipelineIds};
+use wgc::device::{DeviceDescriptor, ImplicitPipelineIds};
use wgc::id;
use wgc::id::DeviceId;
use wgc::instance::parse_backends_from_comma_list;
use wgc::pipeline::ShaderModuleDescriptor;
-use wgc::resource::{BufferMapCallback, BufferMapOperation};
+use wgc::resource::BufferMapOperation;
use wgpu_core::command::RenderPassDescriptor;
use wgpu_core::device::DeviceError;
use wgpu_core::pipeline::{CreateComputePipelineError, CreateRenderPipelineError};
@@ -178,34 +177,32 @@ impl WGPU {
let glob = Arc::clone(&self.global);
let resp_sender = sender.clone();
let token = self.poller.token();
- let callback = BufferMapCallback::from_rust(Box::from(
- move |result: BufferAccessResult| {
- drop(token);
- let response = result.and_then(|_| {
- let global = &glob;
- let (slice_pointer, range_size) =
- global.buffer_get_mapped_range(buffer_id, offset, size)?;
- // SAFETY: guarantee to be safe from wgpu
- let data = unsafe {
- slice::from_raw_parts(
- slice_pointer.as_ptr(),
- range_size as usize,
- )
- };
+ let callback = Box::from(move |result: BufferAccessResult| {
+ drop(token);
+ let response = result.and_then(|_| {
+ let global = &glob;
+ let (slice_pointer, range_size) =
+ global.buffer_get_mapped_range(buffer_id, offset, size)?;
+ // SAFETY: guarantee to be safe from wgpu
+ let data = unsafe {
+ slice::from_raw_parts(
+ slice_pointer.as_ptr(),
+ range_size as usize,
+ )
+ };
- Ok(Mapping {
- data: IpcSharedMemory::from_bytes(data),
- range: offset..offset + range_size,
- mode: host_map,
- })
- });
- if let Err(e) =
- resp_sender.send(WebGPUResponse::BufferMapAsync(response))
- {
- warn!("Could not send BufferMapAsync Response ({})", e);
- }
- },
- ));
+ Ok(Mapping {
+ data: IpcSharedMemory::from_bytes(data),
+ range: offset..offset + range_size,
+ mode: host_map,
+ })
+ });
+ if let Err(e) =
+ resp_sender.send(WebGPUResponse::BufferMapAsync(response))
+ {
+ warn!("Could not send BufferMapAsync Response ({})", e);
+ }
+ });
let operation = BufferMapOperation {
host: host_map,
@@ -711,40 +708,32 @@ impl WGPU {
}
let script_sender = self.script_sender.clone();
let devices = Arc::clone(&self.devices);
- let callback =
- DeviceLostClosure::from_rust(Box::from(move |reason, msg| {
- let reason = match reason {
- wgt::DeviceLostReason::Unknown => {
- crate::DeviceLostReason::Unknown
- },
- wgt::DeviceLostReason::Destroyed => {
- crate::DeviceLostReason::Destroyed
- },
- // we handle this in WebGPUMsg::FreeDevice
- wgt::DeviceLostReason::Dropped => return,
- wgt::DeviceLostReason::ReplacedCallback => {
- panic!(
- "DeviceLost callback should only be set once"
- )
- },
- };
- // make device lost by removing error scopes stack
- let _ = devices
- .lock()
- .unwrap()
- .get_mut(&device_id)
- .expect("Device should not be dropped by this point")
- .error_scope_stack
- .take();
- if let Err(e) = script_sender.send(WebGPUMsg::DeviceLost {
- device,
- pipeline_id,
- reason,
- msg,
- }) {
- warn!("Failed to send WebGPUMsg::DeviceLost: {e}");
- }
- }));
+ let callback = Box::from(move |reason, msg| {
+ let reason = match reason {
+ wgt::DeviceLostReason::Unknown => {
+ crate::DeviceLostReason::Unknown
+ },
+ wgt::DeviceLostReason::Destroyed => {
+ crate::DeviceLostReason::Destroyed
+ },
+ };
+ // make device lost by removing error scopes stack
+ let _ = devices
+ .lock()
+ .unwrap()
+ .get_mut(&device_id)
+ .expect("Device should not be dropped by this point")
+ .error_scope_stack
+ .take();
+ if let Err(e) = script_sender.send(WebGPUMsg::DeviceLost {
+ device,
+ pipeline_id,
+ reason,
+ msg,
+ }) {
+ warn!("Failed to send WebGPUMsg::DeviceLost: {e}");
+ }
+ });
global.device_set_device_lost_closure(device_id, callback);
descriptor
});
@@ -1055,12 +1044,12 @@ impl WGPU {
WebGPURequest::QueueOnSubmittedWorkDone { sender, queue_id } => {
let global = &self.global;
let token = self.poller.token();
- let callback = SubmittedWorkDoneClosure::from_rust(Box::from(move || {
+ let callback = Box::from(move || {
drop(token);
if let Err(e) = sender.send(WebGPUResponse::SubmittedWorkDone) {
warn!("Could not send SubmittedWorkDone Response ({})", e);
}
- }));
+ });
global.queue_on_submitted_work_done(queue_id, callback);
self.poller.wake();
},