diff options
author | Samson <16504129+sagudev@users.noreply.github.com> | 2024-05-22 18:47:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-22 16:47:35 +0000 |
commit | 794110ebe58ad72d809291e9feb3f2cc92819941 (patch) | |
tree | 9c01451fa022f433fa8a305d58c2a79da747e838 /components/script/dom/gpubuffer.rs | |
parent | 9f32809671c8c8e79d59c95194dcc466452299fc (diff) | |
download | servo-794110ebe58ad72d809291e9feb3f2cc92819941.tar.gz servo-794110ebe58ad72d809291e9feb3f2cc92819941.zip |
webgpu: Move errorscopes to WGPU thread (#32304)
* Prepare errorscopes logic in wgpu_thread
* remove scope_id from ipc
* new GPUErrors per spec
* remove cotent timeline error_scope
* fixup poperrorscope types
* device_scope -> gpu_error and nice errors
* Handle errors detection more elegantly
* good expectations
* new expectations
* Make error_scope.errors Vec as per spec
Diffstat (limited to 'components/script/dom/gpubuffer.rs')
-rw-r--r-- | components/script/dom/gpubuffer.rs | 63 |
1 files changed, 27 insertions, 36 deletions
diff --git a/components/script/dom/gpubuffer.rs b/components/script/dom/gpubuffer.rs index bb747a998cc..0a7689cdb5a 100644 --- a/components/script/dom/gpubuffer.rs +++ b/components/script/dom/gpubuffer.rs @@ -12,9 +12,7 @@ use dom_struct::dom_struct; use ipc_channel::ipc::IpcSharedMemory; use js::typedarray::{ArrayBuffer, ArrayBufferU8}; use webgpu::wgc::device::HostMap; -use webgpu::{ - WebGPU, WebGPUBuffer, WebGPUOpResult, WebGPURequest, WebGPUResponse, WebGPUResponseResult, -}; +use webgpu::{WebGPU, WebGPUBuffer, WebGPURequest, WebGPUResponse, WebGPUResponseResult}; use super::bindings::buffer_source::{create_new_external_array_buffer, HeapBufferSource}; use crate::dom::bindings::cell::DomRefCell; @@ -137,7 +135,7 @@ impl Drop for GPUBuffer { if let Err(e) = self .channel .0 - .send((None, WebGPURequest::DropBuffer(self.buffer.0))) + .send(WebGPURequest::DropBuffer(self.buffer.0)) { warn!( "Failed to send WebGPURequest::DropBuffer({:?}) ({})", @@ -166,17 +164,14 @@ impl GPUBufferMethods for GPUBuffer { return Err(Error::Operation); }; let m_range = m_info.mapping_range.clone(); - if let Err(e) = self.channel.0.send(( - self.device.use_current_scope(), - WebGPURequest::UnmapBuffer { - buffer_id: self.id().0, - device_id: self.device.id().0, - array_buffer: IpcSharedMemory::from_bytes(&m_info.mapping.lock().unwrap()), - is_map_read: m_info.map_mode == Some(GPUMapModeConstants::READ), - offset: m_range.start, - size: m_range.end - m_range.start, - }, - )) { + if let Err(e) = self.channel.0.send(WebGPURequest::UnmapBuffer { + buffer_id: self.id().0, + device_id: self.device.id().0, + array_buffer: IpcSharedMemory::from_bytes(&m_info.mapping.lock().unwrap()), + is_map_read: m_info.map_mode == Some(GPUMapModeConstants::READ), + offset: m_range.start, + size: m_range.end - m_range.start, + }) { warn!("Failed to send Buffer unmap ({:?}) ({})", self.buffer.0, e); } // Step 3.3 @@ -209,7 +204,7 @@ impl GPUBufferMethods for GPUBuffer { if let Err(e) = self .channel .0 - .send((None, WebGPURequest::DestroyBuffer(self.buffer.0))) + .send(WebGPURequest::DestroyBuffer(self.buffer.0)) { warn!( "Failed to send WebGPURequest::DestroyBuffer({:?}) ({})", @@ -237,12 +232,11 @@ impl GPUBufferMethods for GPUBuffer { } else { self.size - offset }; - let scope_id = self.device.use_current_scope(); if self.state.get() != GPUBufferState::Unmapped { - self.device.handle_server_msg( - scope_id, - WebGPUOpResult::ValidationError(String::from("Buffer is not Unmapped")), - ); + self.device + .dispatch_error(webgpu::Error::Validation(String::from( + "Buffer is not Unmapped", + ))); promise.reject_error(Error::Abort); return promise; } @@ -250,10 +244,10 @@ impl GPUBufferMethods for GPUBuffer { GPUMapModeConstants::READ => HostMap::Read, GPUMapModeConstants::WRITE => HostMap::Write, _ => { - self.device.handle_server_msg( - scope_id, - WebGPUOpResult::ValidationError(String::from("Invalid MapModeFlags")), - ); + self.device + .dispatch_error(webgpu::Error::Validation(String::from( + "Invalid MapModeFlags", + ))); promise.reject_error(Error::Abort); return promise; }, @@ -262,17 +256,14 @@ impl GPUBufferMethods for GPUBuffer { let map_range = offset..offset + range_size; let sender = response_async(&promise, self); - if let Err(e) = self.channel.0.send(( - scope_id, - WebGPURequest::BufferMapAsync { - sender, - buffer_id: self.buffer.0, - device_id: self.device.id().0, - host_map, - offset, - size: Some(range_size), - }, - )) { + if let Err(e) = self.channel.0.send(WebGPURequest::BufferMapAsync { + sender, + buffer_id: self.buffer.0, + device_id: self.device.id().0, + host_map, + offset, + size: Some(range_size), + }) { warn!( "Failed to send BufferMapAsync ({:?}) ({})", self.buffer.0, e |