diff --git a/Cargo.lock b/Cargo.lock index bd40afc7ff4..b4bc8fe7f39 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -726,6 +726,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "cloudabi" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" +dependencies = [ + "bitflags", +] + [[package]] name = "cmake" version = "0.1.44" @@ -1911,9 +1920,9 @@ dependencies = [ [[package]] name = "gfx-auxil" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67bdbf8e8d6883c70e5a0d7379ad8ab3ac95127a3761306b36122d8f1c177a8e" +checksum = "6311ee3cc7a3b4c8ae94c4513cd2cbe888ec37990cf0ffa672bd275391b12eb1" dependencies = [ "fxhash", "gfx-hal", @@ -1922,16 +1931,16 @@ dependencies = [ [[package]] name = "gfx-backend-dx11" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92de0ddc0fde1a89b2a0e92dcc6bbb554bd34af0135e53a28d5ef064611094a4" +checksum = "de0a460b6458f3857af43064c687b1a010fe1f1b2e8c68fcd1d5db7206fa0809" dependencies = [ "bitflags", "gfx-auxil", "gfx-hal", - "libloading 0.5.2", + "libloading 0.6.1", "log", - "parking_lot 0.10.2", + "parking_lot 0.11.0", "range-alloc", "raw-window-handle", "smallvec 1.4.2", @@ -1942,9 +1951,9 @@ dependencies = [ [[package]] name = "gfx-backend-dx12" -version = "0.5.8" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05218b5c94539f22ac7d6feb4b2482431b89f6cc897132494701ac48619218d7" +checksum = "c392af02ae88bc127abf94e1b88c817b7274d8d977aae986d5f2829392a30b0b" dependencies = [ "bitflags", "d3d12", @@ -1960,19 +1969,20 @@ dependencies = [ [[package]] name = "gfx-backend-empty" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67bd2d7bc022b257ddbdabc5fa3b10c29c292372c3409f2b6a6e3f4e11cdb85" +checksum = "2085227c12b78f6657a900c829f2d0deb46a9be3eaf86844fde263cdc218f77c" dependencies = [ "gfx-hal", + "log", "raw-window-handle", ] [[package]] name = "gfx-backend-metal" -version = "0.5.6" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92804d20b194de6c84cb4bec14ec6a6dcae9c51f0a9186817fb412a590131ae6" +checksum = "42518c5b571be5ba337a89cfba5abfaf2d90b83fc4db96357f64f2ea05f20f81" dependencies = [ "arrayvec 0.5.1", "bitflags", @@ -1986,7 +1996,7 @@ dependencies = [ "log", "metal 0.20.0", "objc", - "parking_lot 0.10.2", + "parking_lot 0.11.0", "range-alloc", "raw-window-handle", "smallvec 1.4.2", @@ -1996,15 +2006,16 @@ dependencies = [ [[package]] name = "gfx-backend-vulkan" -version = "0.5.11" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aec9c919cfc236d2c36aaa38609c1906a92f2df99a3c7f53022b01936f98275a" +checksum = "a84bda4200a82e1912d575801e2bb76ae19c6256359afbc0adfbbaec02fcadc6" dependencies = [ "arrayvec 0.5.1", "ash", "byteorder", "core-graphics-types", "gfx-hal", + "inplace_it", "lazy_static", "log", "objc", @@ -2015,9 +2026,11 @@ dependencies = [ [[package]] name = "gfx-descriptor" -version = "0.1.0" -source = "git+https://github.com/gfx-rs/gfx-extras?rev=473a4cdc63463e7986707507c4a7f6a3a767e329#473a4cdc63463e7986707507c4a7f6a3a767e329" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8c7afcd000f279d541a490e27117e61037537279b9342279abf4938fe60c6b" dependencies = [ + "arrayvec 0.5.1", "fxhash", "gfx-hal", "log", @@ -2025,9 +2038,9 @@ dependencies = [ [[package]] name = "gfx-hal" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18534b23d4c262916231511309bc1f307c74cda8dcb68b93a10ca213a22814b" +checksum = "18d0754f5b7a43915fd7466883b2d1bb0800d7cc4609178d0b27bf143b9e5123" dependencies = [ "bitflags", "raw-window-handle", @@ -2035,8 +2048,9 @@ dependencies = [ [[package]] name = "gfx-memory" -version = "0.1.3" -source = "git+https://github.com/gfx-rs/gfx-extras?rev=473a4cdc63463e7986707507c4a7f6a3a767e329#473a4cdc63463e7986707507c4a7f6a3a767e329" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe8d8855df07f438eb8a765e90356d5b821d644ea3b59b870091450b89576a9f" dependencies = [ "fxhash", "gfx-hal", @@ -2773,6 +2787,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "inplace_it" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd01a2a73f2f399df96b22dc88ea687ef4d76226284e7531ae3c7ee1dc5cb534" + [[package]] name = "input_buffer" version = "0.3.1" @@ -2782,6 +2802,12 @@ dependencies = [ "bytes 0.5.5", ] +[[package]] +name = "instant" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" + [[package]] name = "io-surface" version = "0.12.1" @@ -3137,9 +3163,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.70" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f" +checksum = "755456fae044e6fa1ebbbd1b3e902ae19e73097ed4ed87bb79934a867c007bc3" [[package]] name = "libdbus-sys" @@ -3297,6 +3323,15 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lock_api" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28247cc5a5be2f05fbcd76dd0cf2c7d3b5400cb978a28042abcd4fa0b3f8261c" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.11" @@ -3724,8 +3759,9 @@ checksum = "0419348c027fa7be448d2ae7ea0e4e04c2334c31dc4e74ab29f00a2a7ca69204" [[package]] name = "naga" -version = "0.1.0" -source = "git+https://github.com/gfx-rs/naga?rev=1eb637038dd15fc1dad770eca8e6943424dbc122#1eb637038dd15fc1dad770eca8e6943424dbc122" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0873deb76cf44b7454fba7b2ba6a89d3de70c08aceffd2c489379b3d9d08e661" dependencies = [ "bitflags", "fxhash", @@ -4117,7 +4153,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" dependencies = [ - "lock_api", + "lock_api 0.3.4", "parking_lot_core 0.6.2", "rustc_version", ] @@ -4128,10 +4164,21 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" dependencies = [ - "lock_api", + "lock_api 0.3.4", "parking_lot_core 0.7.2", ] +[[package]] +name = "parking_lot" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733" +dependencies = [ + "instant", + "lock_api 0.4.1", + "parking_lot_core 0.8.0", +] + [[package]] name = "parking_lot_core" version = "0.6.2" @@ -4139,7 +4186,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" dependencies = [ "cfg-if", - "cloudabi", + "cloudabi 0.0.3", "libc", "redox_syscall", "rustc_version", @@ -4154,7 +4201,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" dependencies = [ "cfg-if", - "cloudabi", + "cloudabi 0.0.3", + "libc", + "redox_syscall", + "smallvec 1.4.2", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +dependencies = [ + "cfg-if", + "cloudabi 0.1.0", + "instant", "libc", "redox_syscall", "smallvec 1.4.2", @@ -4715,6 +4777,17 @@ dependencies = [ "serde", ] +[[package]] +name = "ron" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91260f321dbf3b5a16ff91c451dc9eb644ce72775a6812f9c3dfffe63818f8f" +dependencies = [ + "base64 0.12.0", + "bitflags", + "serde", +] + [[package]] name = "rust-argon2" version = "0.7.0" @@ -5700,11 +5773,11 @@ dependencies = [ [[package]] name = "storage-map" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd0a4829a5c591dc24a944a736d6b1e4053e51339a79fd5d4702c4c999a9c45e" +checksum = "418bb14643aa55a7841d5303f72cf512cfb323b8cc221d51580500a1ca75206c" dependencies = [ - "lock_api", + "lock_api 0.4.1", ] [[package]] @@ -6856,7 +6929,7 @@ dependencies = [ "num-traits", "plane-split", "rayon", - "ron", + "ron 0.5.1", "serde", "serde_json", "sig", @@ -6954,8 +7027,8 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.5.0" -source = "git+https://github.com/gfx-rs/wgpu#f7ec6cc1fe73651cfeda44295cd41533ec60f850" +version = "0.6.0" +source = "git+https://github.com/gfx-rs/wgpu#1d0e0ce37ede5ec53000ab252c27b8cf856865b2" dependencies = [ "arrayvec 0.5.1", "bitflags", @@ -6970,8 +7043,8 @@ dependencies = [ "gfx-hal", "gfx-memory", "naga", - "parking_lot 0.10.2", - "ron", + "parking_lot 0.11.0", + "ron 0.6.0", "serde", "smallvec 1.4.2", "thiserror", @@ -6981,8 +7054,8 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.5.0" -source = "git+https://github.com/gfx-rs/wgpu#f7ec6cc1fe73651cfeda44295cd41533ec60f850" +version = "0.6.0" +source = "git+https://github.com/gfx-rs/wgpu#1d0e0ce37ede5ec53000ab252c27b8cf856865b2" dependencies = [ "bitflags", "serde", diff --git a/components/script/dom/gpucommandencoder.rs b/components/script/dom/gpucommandencoder.rs index 7d0a4153289..60eabbf1973 100644 --- a/components/script/dom/gpucommandencoder.rs +++ b/components/script/dom/gpucommandencoder.rs @@ -29,7 +29,7 @@ use std::borrow::Cow; use std::cell::Cell; use std::collections::HashSet; use webgpu::wgpu::command as wgpu_com; -use webgpu::{self, identity::WebGPUOpResult, wgt, WebGPU, WebGPURequest}; +use webgpu::{self, wgt, WebGPU, WebGPURequest}; // https://gpuweb.github.io/gpuweb/#enumdef-encoder-state #[derive(MallocSizeOf, PartialEq)] @@ -58,7 +58,6 @@ impl GPUCommandEncoder { channel: WebGPU, device: &GPUDevice, encoder: webgpu::WebGPUCommandEncoder, - valid: bool, label: Option, ) -> Self { Self { @@ -69,7 +68,7 @@ impl GPUCommandEncoder { encoder, buffers: DomRefCell::new(HashSet::new()), state: DomRefCell::new(GPUCommandEncoderState::Open), - valid: Cell::new(valid), + valid: Cell::new(true), } } @@ -78,12 +77,11 @@ impl GPUCommandEncoder { channel: WebGPU, device: &GPUDevice, encoder: webgpu::WebGPUCommandEncoder, - valid: bool, label: Option, ) -> DomRoot { reflect_dom_object( Box::new(GPUCommandEncoder::new_inherited( - channel, device, encoder, valid, label, + channel, device, encoder, label, )), global, ) @@ -103,10 +101,6 @@ impl GPUCommandEncoder { *self.state.borrow_mut() = GPUCommandEncoderState::Closed; } } - - pub fn device(&self) -> &GPUDevice { - &*self.device - } } impl GPUCommandEncoderMethods for GPUCommandEncoder { @@ -125,26 +119,16 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { &self, descriptor: &GPUComputePassDescriptor, ) -> DomRoot { - let scope_id = self.device.use_current_scope(); self.set_state( GPUCommandEncoderState::EncodingComputePass, GPUCommandEncoderState::Open, ); - let (compute_pass, res) = if !self.valid.get() { - ( - None, - WebGPUOpResult::ValidationError(String::from( - "CommandEncoder is not in Open State", - )), - ) - } else { - ( - Some(wgpu_com::ComputePass::new(self.encoder.0)), - WebGPUOpResult::Success, - ) - }; - self.device.handle_server_msg(scope_id, res); + let compute_pass = if !self.valid.get() { + None + } else { + Some(wgpu_com::ComputePass::new(self.encoder.0)) + }; GPUComputePassEncoder::new( &self.global(), @@ -160,19 +144,13 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { &self, descriptor: &GPURenderPassDescriptor, ) -> DomRoot { - let scope_id = self.device.use_current_scope(); self.set_state( GPUCommandEncoderState::EncodingRenderPass, GPUCommandEncoderState::Open, ); - let (render_pass, res) = if !self.valid.get() { - ( - None, - WebGPUOpResult::ValidationError(String::from( - "CommandEncoder is not in Open State", - )), - ) + let render_pass = if !self.valid.get() { + None } else { let depth_stencil = descriptor.depthStencilAttachment.as_ref().map(|depth| { let (depth_load_op, clear_depth) = match depth.depthLoadValue { @@ -265,14 +243,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { ), depth_stencil_attachment: depth_stencil.as_ref(), }; - ( - Some(wgpu_com::RenderPass::new(self.encoder.0, desc)), - WebGPUOpResult::Success, - ) + Some(wgpu_com::RenderPass::new(self.encoder.0, desc)) }; - self.device.handle_server_msg(scope_id, res); - GPURenderPassEncoder::new( &self.global(), self.channel.clone(), @@ -291,15 +264,7 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { destination_offset: GPUSize64, size: GPUSize64, ) { - let scope_id = self.device.use_current_scope(); - if !(*self.state.borrow() == GPUCommandEncoderState::Open) { - self.device.handle_server_msg( - scope_id, - WebGPUOpResult::ValidationError(String::from( - "CommandEncoder is not in Open State", - )), - ); self.valid.set(false); return; } @@ -311,10 +276,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { self.channel .0 .send(( - scope_id, + None, WebGPURequest::CopyBufferToBuffer { command_encoder_id: self.encoder.0, - device_id: self.device.id().0, source_id: source.id().0, source_offset, destination_id: destination.id().0, @@ -332,15 +296,7 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { destination: &GPUTextureCopyView, copy_size: GPUExtent3D, ) { - let scope_id = self.device.use_current_scope(); - if !(*self.state.borrow() == GPUCommandEncoderState::Open) { - self.device.handle_server_msg( - scope_id, - WebGPUOpResult::ValidationError(String::from( - "CommandEncoder is not in Open State", - )), - ); self.valid.set(false); return; } @@ -352,10 +308,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { self.channel .0 .send(( - scope_id, + None, WebGPURequest::CopyBufferToTexture { command_encoder_id: self.encoder.0, - device_id: self.device.id().0, source: convert_buffer_cv(source), destination: convert_texture_cv(destination), copy_size: convert_texture_size_to_wgt(&convert_texture_size_to_dict( @@ -373,15 +328,7 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { destination: &GPUBufferCopyView, copy_size: GPUExtent3D, ) { - let scope_id = self.device.use_current_scope(); - if !(*self.state.borrow() == GPUCommandEncoderState::Open) { - self.device.handle_server_msg( - scope_id, - WebGPUOpResult::ValidationError(String::from( - "CommandEncoder is not in Open State", - )), - ); self.valid.set(false); return; } @@ -393,10 +340,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { self.channel .0 .send(( - scope_id, + None, WebGPURequest::CopyTextureToBuffer { command_encoder_id: self.encoder.0, - device_id: self.device.id().0, source: convert_texture_cv(source), destination: convert_buffer_cv(destination), copy_size: convert_texture_size_to_wgt(&convert_texture_size_to_dict( @@ -414,15 +360,7 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { destination: &GPUTextureCopyView, copy_size: GPUExtent3D, ) { - let scope_id = self.device.use_current_scope(); - if !(*self.state.borrow() == GPUCommandEncoderState::Open) { - self.device.handle_server_msg( - scope_id, - WebGPUOpResult::ValidationError(String::from( - "CommandEncoder is not in Open State", - )), - ); self.valid.set(false); return; } @@ -430,10 +368,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder { self.channel .0 .send(( - scope_id, + None, WebGPURequest::CopyTextureToTexture { command_encoder_id: self.encoder.0, - device_id: self.device.id().0, source: convert_texture_cv(source), destination: convert_texture_cv(destination), copy_size: convert_texture_size_to_wgt(&convert_texture_size_to_dict( diff --git a/components/script/dom/gpucomputepassencoder.rs b/components/script/dom/gpucomputepassencoder.rs index a73ee8bde34..f0f4325ae6d 100644 --- a/components/script/dom/gpucomputepassencoder.rs +++ b/components/script/dom/gpucomputepassencoder.rs @@ -99,10 +99,9 @@ impl GPUComputePassEncoderMethods for GPUComputePassEncoder { self.channel .0 .send(( - self.command_encoder.device().use_current_scope(), + None, WebGPURequest::RunComputePass { command_encoder_id: self.command_encoder.id().0, - device_id: self.command_encoder.device().id().0, compute_pass, }, )) diff --git a/components/script/dom/gpudevice.rs b/components/script/dom/gpudevice.rs index 4ce23aa5728..e1347d6daf5 100644 --- a/components/script/dom/gpudevice.rs +++ b/components/script/dom/gpudevice.rs @@ -775,7 +775,6 @@ impl GPUDeviceMethods for GPUDevice { self.channel.clone(), &self, encoder, - true, descriptor.parent.label.as_ref().cloned(), ) } diff --git a/components/script/dom/gpurenderpassencoder.rs b/components/script/dom/gpurenderpassencoder.rs index 9d1abf12511..ac7424b1999 100644 --- a/components/script/dom/gpurenderpassencoder.rs +++ b/components/script/dom/gpurenderpassencoder.rs @@ -164,10 +164,9 @@ impl GPURenderPassEncoderMethods for GPURenderPassEncoder { self.channel .0 .send(( - self.command_encoder.device().use_current_scope(), + None, WebGPURequest::RunRenderPass { command_encoder_id: self.command_encoder.id().0, - device_id: self.command_encoder.device().id().0, render_pass, }, )) diff --git a/components/script/dom/gpuswapchain.rs b/components/script/dom/gpuswapchain.rs index 0552eea7564..a60449ae616 100644 --- a/components/script/dom/gpuswapchain.rs +++ b/components/script/dom/gpuswapchain.rs @@ -90,7 +90,6 @@ impl GPUSwapChainMethods for GPUSwapChain { /// https://gpuweb.github.io/gpuweb/#dom-gpuswapchain-getcurrenttexture fn GetCurrentTexture(&self) -> DomRoot { self.context.mark_as_dirty(); - //self.context.send_swap_chain_present(); DomRoot::from_ref(&*self.texture) } } diff --git a/components/webgpu/Cargo.toml b/components/webgpu/Cargo.toml index 2b78a737c38..cb9421e8d6b 100644 --- a/components/webgpu/Cargo.toml +++ b/components/webgpu/Cargo.toml @@ -22,5 +22,5 @@ servo_config = { path = "../config" } smallvec = { version = "0.6", features = ["serde"] } webrender_api = { git = "https://github.com/servo/webrender" } webrender_traits = { path = "../webrender_traits" } -wgpu-core = { version = "0.5.0", git = "https://github.com/gfx-rs/wgpu", features = ["replay", "trace", "serial-pass"] } -wgpu-types = { version = "0.5.0", git = "https://github.com/gfx-rs/wgpu", features = ["replay", "trace"] } +wgpu-core = { version = "0.6.0", git = "https://github.com/gfx-rs/wgpu", features = ["replay", "trace", "serial-pass"] } +wgpu-types = { version = "0.6.0", git = "https://github.com/gfx-rs/wgpu", features = ["replay", "trace"] } diff --git a/components/webgpu/lib.rs b/components/webgpu/lib.rs index a7169834586..7d4dbd3e808 100644 --- a/components/webgpu/lib.rs +++ b/components/webgpu/lib.rs @@ -20,7 +20,9 @@ use serde::{Deserialize, Serialize}; use servo_config::pref; use smallvec::SmallVec; use std::borrow::Cow; -use std::collections::{HashMap, HashSet}; +use std::cell::RefCell; +use std::collections::hash_map::Entry; +use std::collections::HashMap; use std::num::NonZeroU64; use std::rc::Rc; use std::slice; @@ -87,7 +89,6 @@ pub enum WebGPURequest { }, CopyBufferToBuffer { command_encoder_id: id::CommandEncoderId, - device_id: id::DeviceId, source_id: id::BufferId, source_offset: wgt::BufferAddress, destination_id: id::BufferId, @@ -96,21 +97,18 @@ pub enum WebGPURequest { }, CopyBufferToTexture { command_encoder_id: id::CommandEncoderId, - device_id: id::DeviceId, source: BufferCopyView, destination: TextureCopyView, copy_size: wgt::Extent3d, }, CopyTextureToBuffer { command_encoder_id: id::CommandEncoderId, - device_id: id::DeviceId, source: TextureCopyView, destination: BufferCopyView, copy_size: wgt::Extent3d, }, CopyTextureToTexture { command_encoder_id: id::CommandEncoderId, - device_id: id::DeviceId, source: TextureCopyView, destination: TextureCopyView, copy_size: wgt::Extent3d, @@ -214,12 +212,10 @@ pub enum WebGPURequest { }, RunComputePass { command_encoder_id: id::CommandEncoderId, - device_id: id::DeviceId, compute_pass: Option, }, RunRenderPass { command_encoder_id: id::CommandEncoderId, - device_id: id::DeviceId, render_pass: Option, }, Submit { @@ -346,7 +342,7 @@ struct WGPU<'a> { present_buffer_maps: HashMap, WebGPURequest)>>>, //TODO: Remove this (https://github.com/gfx-rs/wgpu/issues/867) - error_command_buffers: HashSet, + error_command_encoders: RefCell>, webrender_api: webrender_api::RenderApi, webrender_document: webrender_api::DocumentId, external_images: Arc>, @@ -378,7 +374,7 @@ impl<'a> WGPU<'a> { _invalid_adapters: Vec::new(), buffer_maps: HashMap::new(), present_buffer_maps: HashMap::new(), - error_command_buffers: HashSet::new(), + error_command_encoders: RefCell::new(HashMap::new()), webrender_api: webrender_api_sender.create_api(), webrender_document, external_images, @@ -466,6 +462,12 @@ impl<'a> WGPU<'a> { let global = &self.global; let result = if is_error { Err(String::from("Invalid GPUCommandEncoder")) + } else if let Some(err) = self + .error_command_encoders + .borrow() + .get(&command_encoder_id) + { + Err(err.clone()) } else { gfx_select!(command_encoder_id => global.command_encoder_finish( command_encoder_id, @@ -474,13 +476,12 @@ impl<'a> WGPU<'a> { .map_err(|e| format!("{:?}", e)) }; if result.is_err() { - self.error_command_buffers.insert(command_encoder_id); + self.encoder_record_error(command_encoder_id, result.clone()); } self.send_result(device_id, scope_id, result); }, WebGPURequest::CopyBufferToBuffer { command_encoder_id, - device_id, source_id, source_offset, destination_id, @@ -496,11 +497,10 @@ impl<'a> WGPU<'a> { destination_offset, size )); - self.send_result(device_id, scope_id, result); + self.encoder_record_error(command_encoder_id, result); }, WebGPURequest::CopyBufferToTexture { command_encoder_id, - device_id, source, destination, copy_size, @@ -512,11 +512,10 @@ impl<'a> WGPU<'a> { &destination, ©_size )); - self.send_result(device_id, scope_id, result); + self.encoder_record_error(command_encoder_id, result); }, WebGPURequest::CopyTextureToBuffer { command_encoder_id, - device_id, source, destination, copy_size, @@ -528,11 +527,10 @@ impl<'a> WGPU<'a> { &destination, ©_size )); - self.send_result(device_id, scope_id, result); + self.encoder_record_error(command_encoder_id, result); }, WebGPURequest::CopyTextureToTexture { command_encoder_id, - device_id, source, destination, copy_size, @@ -544,7 +542,7 @@ impl<'a> WGPU<'a> { &destination, ©_size )); - self.send_result(device_id, scope_id, result); + self.encoder_record_error(command_encoder_id, result); }, WebGPURequest::CreateBindGroup { device_id, @@ -863,7 +861,9 @@ impl<'a> WGPU<'a> { return; }, WebGPURequest::FreeCommandBuffer(command_buffer_id) => { - self.error_command_buffers.remove(&command_buffer_id); + self.error_command_encoders + .borrow_mut() + .remove(&command_buffer_id); }, WebGPURequest::FreeDevice(device_id) => { let device = WebGPUDevice(device_id); @@ -974,7 +974,6 @@ impl<'a> WGPU<'a> { }, WebGPURequest::RunComputePass { command_encoder_id, - device_id, compute_pass, } => { let global = &self.global; @@ -986,11 +985,10 @@ impl<'a> WGPU<'a> { } else { Err(String::from("Invalid ComputePass")) }; - self.send_result(device_id, scope_id, result); + self.encoder_record_error(command_encoder_id, result); }, WebGPURequest::RunRenderPass { command_encoder_id, - device_id, render_pass, } => { let global = &self.global; @@ -1002,7 +1000,7 @@ impl<'a> WGPU<'a> { } else { Err(String::from("Invalid RenderPass")) }; - self.send_result(device_id, scope_id, result); + self.encoder_record_error(command_encoder_id, result); }, WebGPURequest::Submit { queue_id, @@ -1011,7 +1009,7 @@ impl<'a> WGPU<'a> { let global = &self.global; let cmd_id = command_buffers .iter() - .find(|id| self.error_command_buffers.contains(id)); + .find(|id| self.error_command_encoders.borrow().contains_key(id)); let result = if cmd_id.is_some() { Err(String::from("Invalid command buffer submitted")) } else { @@ -1129,17 +1127,20 @@ impl<'a> WGPU<'a> { status: BufferMapAsyncStatus, userdata: *mut u8, ) { - let info = - Rc::from_raw(userdata as *const BufferMapInfo); + let info = Rc::from_raw( + userdata + as *const BufferMapInfo<(Option, WebGPURequest)>, + ); match status { BufferMapAsyncStatus::Success => { - if let Err(e) = - info.sender.send(WebGPURequest::UpdateWebRenderData { + if let Err(e) = info.sender.send(( + None, + WebGPURequest::UpdateWebRenderData { buffer_id: info.buffer_id, buffer_size: info.size, external_id: info.external_id.unwrap(), - }) - { + }, + )) { warn!("Could not send UpdateWebRenderData ({})", e); } }, @@ -1274,6 +1275,18 @@ impl<'a> WGPU<'a> { warn!("Failed to send WebGPUOpResult ({})", w); } } + + fn encoder_record_error( + &self, + encoder_id: id::CommandEncoderId, + result: Result, + ) { + if let Err(e) = result { + if let Entry::Vacant(v) = self.error_command_encoders.borrow_mut().entry(encoder_id) { + v.insert(format!("{:?}", e)); + } + } + } } fn convert_to_pointer(obj: Rc) -> *mut u8 { diff --git a/servo-tidy.toml b/servo-tidy.toml index 0bb3eae35cb..e2eac2e9852 100644 --- a/servo-tidy.toml +++ b/servo-tidy.toml @@ -31,14 +31,17 @@ rand = [ packages = [ "arrayvec", "base64", + "cloudabi", "cocoa", "gleam", "libloading", + "lock_api", "metal", "miniz_oxide", "num-rational", "parking_lot", "parking_lot_core", + "ron", "wayland-sys", # https://github.com/servo/servo/issues/26933 diff --git a/tests/wpt/webgpu/meta/webgpu/cts.html.ini b/tests/wpt/webgpu/meta/webgpu/cts.html.ini index 9a0e4bdddb0..4f1bc0ef2b3 100644 --- a/tests/wpt/webgpu/meta/webgpu/cts.html.ini +++ b/tests/wpt/webgpu/meta/webgpu/cts.html.ini @@ -4,24 +4,12 @@ [cts.html?q=webgpu:api,validation,render_pass,resolve:*] - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetWidth=4] - expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetViewBaseMipLevel=1;resolveTargetViewMipCount=2;resolveTargetHeight=4;resolveTargetWidth=4] expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:colorAttachmentHeight=4] - expected: FAIL - - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetUsage=1] - expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetFormat="bgra8unorm"] expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:colorAttachmentSamples=1] - expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetFormat="rgba8unorm-srgb"] expected: FAIL @@ -31,21 +19,12 @@ [webgpu:api,validation,render_pass,resolve:resolve_attachment:colorAttachmentFormat="rgba8unorm-srgb"] expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetHeight=4] - expected: FAIL - - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetSamples=4] - expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetViewArrayLayerCount=2] expected: FAIL [webgpu:api,validation,render_pass,resolve:resolve_attachment:colorAttachmentFormat="bgra8unorm"] expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:colorAttachmentWidth=4] - expected: FAIL - [webgpu:api,validation,render_pass,resolve:resolve_attachment:resolveTargetViewBaseArrayLayer=1;resolveTargetViewArrayLayerCount=2] expected: FAIL @@ -144,9 +123,6 @@ [cts.html?q=webgpu:api,validation,setBlendColor:*] [cts.html?q=webgpu:api,validation,render_pass_descriptor:*] - [webgpu:api,validation,render_pass_descriptor:check_the_use_of_multisampled_textures_as_color_attachments:] - expected: FAIL - [webgpu:api,validation,render_pass_descriptor:check_mip_level_count_for_color_or_depth_stencil:mipLevelCount=2;baseMipLevel=0] expected: FAIL @@ -156,39 +132,18 @@ [webgpu:api,validation,render_pass_descriptor:use_a_resolve_target_in_a_format_different_than_the_attachment_is_not_allowed:] expected: FAIL - [webgpu:api,validation,render_pass_descriptor:it_is_invalid_to_use_a_resolve_target_in_error_state:] - expected: FAIL - - [webgpu:api,validation,render_pass_descriptor:size_of_the_resolve_target_must_be_the_same_as_the_color_attachment:] - expected: FAIL - - [webgpu:api,validation,render_pass_descriptor:attachments_must_have_the_same_size:] - expected: FAIL - [webgpu:api,validation,render_pass_descriptor:check_layer_count_for_color_or_depth_stencil:arrayLayerCount=5;baseArrayLayer=0] expected: FAIL [webgpu:api,validation,render_pass_descriptor:it_is_invalid_to_use_a_resolve_target_with_mipmap_level_count_greater_than_1:] expected: FAIL - [webgpu:api,validation,render_pass_descriptor:it_is_invalid_to_set_resolve_target_if_color_attachment_is_non_multisampled:] - expected: FAIL - [webgpu:api,validation,render_pass_descriptor:OOB_color_attachment_indices_are_handled:colorAttachmentsCount=5] expected: FAIL [webgpu:api,validation,render_pass_descriptor:attachments_must_match_whether_they_are_used_for_color_or_depth_stencil:] expected: FAIL - [webgpu:api,validation,render_pass_descriptor:it_is_invalid_to_use_a_multisampled_resolve_target:] - expected: FAIL - - [webgpu:api,validation,render_pass_descriptor:it_is_invalid_to_use_a_resolve_target_whose_usage_is_not_output_attachment:] - expected: FAIL - - [webgpu:api,validation,render_pass_descriptor:check_depth_stencil_attachment_sample_counts_mismatch:] - expected: FAIL - [cts.html?q=webgpu:examples:*] [webgpu:examples:gpu,async:] @@ -255,12 +210,6 @@ [webgpu:api,validation,render_pass,storeOp:store_op_and_read_only:readonly=false;stencilReadOnly=true] expected: FAIL - [webgpu:api,validation,render_pass,storeOp:store_op_and_read_only:readonly=true;stencilStoreOp="clear"] - expected: FAIL - - [webgpu:api,validation,render_pass,storeOp:store_op_and_read_only:readonly=true;depthStoreOp="clear"] - expected: FAIL - [webgpu:api,validation,render_pass,storeOp:store_op_and_read_only:readonly="_undef_";depthReadOnly=true] expected: FAIL @@ -273,381 +222,81 @@ [cts.html?q=webgpu:api,operation,command_buffer,render,basic:*] [cts.html?q=webgpu:api,validation,copyBufferToBuffer:*] - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=32] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_offset_alignment:srcOffset=2;dstOffset=0] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_with_invalid_buffer:] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=128] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=256] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=0;dstOffset=9007199254740984;copySize=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=8] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=128] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=2] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_within_same_buffer:srcOffset=4;dstOffset=0;copySize=8] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=64] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=0;dstOffset=16;copySize=9007199254740984] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=512] expected: FAIL [webgpu:api,validation,copyBufferToBuffer:copy_out_of_bounds:srcOffset=0;dstOffset=36;copySize=0] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=128] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_out_of_bounds:srcOffset=0;dstOffset=36;copySize=4] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=8] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=256] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=4] expected: FAIL [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=2] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=128] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=1] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=32] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=1] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=8] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=0;dstOffset=9007199254740984;copySize=9007199254740984] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=64] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=16] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_out_of_bounds:srcOffset=36;dstOffset=0;copySize=0] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_out_of_bounds:srcOffset=36;dstOffset=0;copySize=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=8] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=1] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=1] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=8] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=64] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=512] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=9007199254740984;dstOffset=0;copySize=16] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=256] expected: FAIL [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=512] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=32] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=1] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_size_alignment:copySize=5] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_size_alignment:copySize=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=256] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=8] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=16] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_within_same_buffer:srcOffset=0;dstOffset=4;copySize=8] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=256] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=9007199254740984;dstOffset=9007199254740984;copySize=9007199254740984] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=512] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_offset_alignment:srcOffset=0;dstOffset=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_offset_alignment:srcOffset=0;dstOffset=5] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_within_same_buffer:srcOffset=0;dstOffset=8;copySize=4] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=128] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=32] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=32] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=512] expected: FAIL [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=16] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_out_of_bounds:srcOffset=0;dstOffset=20;copySize=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=64] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=1] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=32] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=1] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=512] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=64] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=512] expected: FAIL [webgpu:api,validation,copyBufferToBuffer:copy_within_same_buffer:srcOffset=8;dstOffset=0;copySize=4] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=1] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=0;dstOffset=0;copySize=9007199254740984] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=8] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=64] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=1] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=2] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=8] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=64] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=32] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=32] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=128] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=16;dstUsage=32] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=128] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=64] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=256] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=64] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=9007199254740984;dstOffset=0;copySize=9007199254740984] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=1;dstUsage=256] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=128] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=8;dstUsage=64] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=256] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=2;dstUsage=32] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_overflow:srcOffset=16;dstOffset=0;copySize=9007199254740984] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=256] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=256;dstUsage=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=128] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=512;dstUsage=512] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_out_of_bounds:srcOffset=20;dstOffset=0;copySize=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:copy_out_of_bounds:srcOffset=0;dstOffset=0;copySize=36] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=16] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=1] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=512] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=4] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=32;dstUsage=8] - expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=128;dstUsage=512] expected: FAIL - [webgpu:api,validation,copyBufferToBuffer:copy_offset_alignment:srcOffset=5;dstOffset=0] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=4;dstUsage=128] - expected: FAIL - - [webgpu:api,validation,copyBufferToBuffer:buffer_usage:srcUsage=64;dstUsage=256] - expected: FAIL - [cts.html?q=webgpu:api,validation,copy_between_linear_data_and_texture,copyBetweenLinearDataAndTexture_textureRelated:*] expected: CRASH