commit 35cd0a7e2d4870a886e712bed91d17586935bb74 parent 9efb0eb6c01d2ab9d68ac9ca17a3cabeae39992a Author: Jim Blandy <jimb@red-bean.com> Date: Tue, 21 Oct 2025 03:00:10 +0000 Bug 1995050: Update wgpu to upstream a70b8336 (2025-10-16) r=webgpu-reviewers,supply-chain-reviewers,teoxoy Filed bug 1995066 for regressions in WebGPU CTS on Windows in webgpu:api,operation,command_buffer,image_copy:offsets_and_sizes Differential Revision: https://phabricator.services.mozilla.com/D269106 Diffstat:
66 files changed, 1227 insertions(+), 573 deletions(-)
diff --git a/.cargo/config.toml.in b/.cargo/config.toml.in @@ -40,9 +40,9 @@ git = "https://github.com/franziskuskiefer/cose-rust" rev = "43c22248d136c8b38fe42ea709d08da6355cf04b" replace-with = "vendored-sources" -[source."git+https://github.com/gfx-rs/wgpu?rev=1072b87894b7c3084f80bc9d2679e822435186ba"] +[source."git+https://github.com/gfx-rs/wgpu?rev=a70b8336c01b0869e0459baae5a30fdfe365e5ad"] git = "https://github.com/gfx-rs/wgpu" -rev = "1072b87894b7c3084f80bc9d2679e822435186ba" +rev = "a70b8336c01b0869e0459baae5a30fdfe365e5ad" replace-with = "vendored-sources" [source."git+https://github.com/glandium/allocator-api2?rev=ad5f3d56a5a4519eff52af4ff85293431466ef5c"] diff --git a/Cargo.lock b/Cargo.lock @@ -4732,7 +4732,7 @@ checksum = "a2983372caf4480544083767bf2d27defafe32af49ab4df3a0b7fc90793a3664" [[package]] name = "naga" version = "27.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=1072b87894b7c3084f80bc9d2679e822435186ba#1072b87894b7c3084f80bc9d2679e822435186ba" +source = "git+https://github.com/gfx-rs/wgpu?rev=a70b8336c01b0869e0459baae5a30fdfe365e5ad#a70b8336c01b0869e0459baae5a30fdfe365e5ad" dependencies = [ "arrayvec", "bit-set", @@ -7877,7 +7877,7 @@ dependencies = [ [[package]] name = "wgpu-core" version = "27.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=1072b87894b7c3084f80bc9d2679e822435186ba#1072b87894b7c3084f80bc9d2679e822435186ba" +source = "git+https://github.com/gfx-rs/wgpu?rev=a70b8336c01b0869e0459baae5a30fdfe365e5ad#a70b8336c01b0869e0459baae5a30fdfe365e5ad" dependencies = [ "arrayvec", "bit-set", @@ -7907,7 +7907,7 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" version = "27.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=1072b87894b7c3084f80bc9d2679e822435186ba#1072b87894b7c3084f80bc9d2679e822435186ba" +source = "git+https://github.com/gfx-rs/wgpu?rev=a70b8336c01b0869e0459baae5a30fdfe365e5ad#a70b8336c01b0869e0459baae5a30fdfe365e5ad" dependencies = [ "wgpu-hal", ] @@ -7915,7 +7915,7 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" version = "27.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=1072b87894b7c3084f80bc9d2679e822435186ba#1072b87894b7c3084f80bc9d2679e822435186ba" +source = "git+https://github.com/gfx-rs/wgpu?rev=a70b8336c01b0869e0459baae5a30fdfe365e5ad#a70b8336c01b0869e0459baae5a30fdfe365e5ad" dependencies = [ "wgpu-hal", ] @@ -7923,7 +7923,7 @@ dependencies = [ [[package]] name = "wgpu-hal" version = "27.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=1072b87894b7c3084f80bc9d2679e822435186ba#1072b87894b7c3084f80bc9d2679e822435186ba" +source = "git+https://github.com/gfx-rs/wgpu?rev=a70b8336c01b0869e0459baae5a30fdfe365e5ad#a70b8336c01b0869e0459baae5a30fdfe365e5ad" dependencies = [ "android_system_properties", "arrayvec", @@ -7961,7 +7961,7 @@ dependencies = [ [[package]] name = "wgpu-types" version = "27.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=1072b87894b7c3084f80bc9d2679e822435186ba#1072b87894b7c3084f80bc9d2679e822435186ba" +source = "git+https://github.com/gfx-rs/wgpu?rev=a70b8336c01b0869e0459baae5a30fdfe365e5ad#a70b8336c01b0869e0459baae5a30fdfe365e5ad" dependencies = [ "bitflags 2.9.0", "bytemuck", diff --git a/dom/webgpu/Device.cpp b/dom/webgpu/Device.cpp @@ -231,7 +231,7 @@ already_AddRefed<Sampler> Device::CreateSampler( desc.address_modes[2] = ffi::WGPUAddressMode(aDesc.mAddressModeW); desc.mag_filter = ffi::WGPUFilterMode(aDesc.mMagFilter); desc.min_filter = ffi::WGPUFilterMode(aDesc.mMinFilter); - desc.mipmap_filter = ffi::WGPUFilterMode(aDesc.mMipmapFilter); + desc.mipmap_filter = ffi::WGPUMipmapFilterMode(aDesc.mMipmapFilter); desc.lod_min_clamp = aDesc.mLodMinClamp; desc.lod_max_clamp = aDesc.mLodMaxClamp; desc.max_anisotropy = aDesc.mMaxAnisotropy; diff --git a/gfx/wgpu_bindings/Cargo.toml b/gfx/wgpu_bindings/Cargo.toml @@ -17,7 +17,7 @@ default = [] [dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "1072b87894b7c3084f80bc9d2679e822435186ba" +rev = "a70b8336c01b0869e0459baae5a30fdfe365e5ad" features = ["serde", "trace", "strict_asserts", "wgsl", "api_log_info"] # We want the wgpu-core Metal backend on macOS and iOS. @@ -25,32 +25,32 @@ features = ["serde", "trace", "strict_asserts", "wgsl", "api_log_info"] [target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "1072b87894b7c3084f80bc9d2679e822435186ba" +rev = "a70b8336c01b0869e0459baae5a30fdfe365e5ad" features = ["metal"] # We want the wgpu-core Direct3D backends on Windows. [target.'cfg(windows)'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "1072b87894b7c3084f80bc9d2679e822435186ba" +rev = "a70b8336c01b0869e0459baae5a30fdfe365e5ad" features = ["dx12"] # We want the wgpu-core Vulkan backend on Linux and Windows. [target.'cfg(any(windows, all(unix, not(any(target_os = "macos", target_os = "ios")))))'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "1072b87894b7c3084f80bc9d2679e822435186ba" +rev = "a70b8336c01b0869e0459baae5a30fdfe365e5ad" features = ["vulkan"] [dependencies.wgt] package = "wgpu-types" git = "https://github.com/gfx-rs/wgpu" -rev = "1072b87894b7c3084f80bc9d2679e822435186ba" +rev = "a70b8336c01b0869e0459baae5a30fdfe365e5ad" [dependencies.wgh] package = "wgpu-hal" git = "https://github.com/gfx-rs/wgpu" -rev = "1072b87894b7c3084f80bc9d2679e822435186ba" +rev = "a70b8336c01b0869e0459baae5a30fdfe365e5ad" features = ["device_lost_panic", "internal_error_panic"] [target.'cfg(windows)'.dependencies] diff --git a/gfx/wgpu_bindings/moz.yaml b/gfx/wgpu_bindings/moz.yaml @@ -8,8 +8,8 @@ origin: name: wgpu description: A cross-platform pure-Rust graphics API, modeled on the WebGPU standard url: https://github.com/gfx-rs/wgpu - release: 1072b87894b7c3084f80bc9d2679e822435186ba (2025-10-06T18:59:45Z). - revision: 1072b87894b7c3084f80bc9d2679e822435186ba + release: a70b8336c01b0869e0459baae5a30fdfe365e5ad (Thu Oct 16 15:58:18 2025 -0400) + revision: a70b8336c01b0869e0459baae5a30fdfe365e5ad license: ['MIT', 'Apache-2.0'] updatebot: diff --git a/gfx/wgpu_bindings/src/client.rs b/gfx/wgpu_bindings/src/client.rs @@ -242,7 +242,7 @@ pub struct SamplerDescriptor<'a> { address_modes: [wgt::AddressMode; 3], mag_filter: wgt::FilterMode, min_filter: wgt::FilterMode, - mipmap_filter: wgt::FilterMode, + mipmap_filter: wgt::MipmapFilterMode, lod_min_clamp: f32, lod_max_clamp: f32, compare: Option<&'a wgt::CompareFunction>, @@ -653,6 +653,7 @@ pub extern "C" fn wgpu_client_receive_server_message(client: &Client, byte_buf: name, vendor, support_use_shared_texture_in_swap_chain, + transient_saves_memory, }) = adapter_information { let nss = |s: &str| { @@ -672,6 +673,7 @@ pub extern "C" fn wgpu_client_receive_server_message(client: &Client, byte_buf: name: nss(&name), vendor, support_use_shared_texture_in_swap_chain, + transient_saves_memory, }; unsafe { wgpu_child_resolve_request_adapter_promise( diff --git a/gfx/wgpu_bindings/src/lib.rs b/gfx/wgpu_bindings/src/lib.rs @@ -126,6 +126,7 @@ pub struct AdapterInformation<S> { driver_info: S, backend: wgt::Backend, support_use_shared_texture_in_swap_chain: bool, + transient_saves_memory: bool, } #[repr(C)] diff --git a/gfx/wgpu_bindings/src/server.rs b/gfx/wgpu_bindings/src/server.rs @@ -2651,6 +2651,7 @@ unsafe fn process_message( driver, driver_info, backend, + transient_saves_memory, } = global.adapter_get_info(adapter_id); let is_hardware = match device_type { @@ -2688,6 +2689,7 @@ unsafe fn process_message( driver_info: Cow::Owned(driver_info), backend, support_use_shared_texture_in_swap_chain, + transient_saves_memory, }; Some(info) } else { diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml @@ -4317,9 +4317,12 @@ criteria = "safe-to-deploy" delta = "26.0.0 -> 27.0.0" [[audits.naga]] -who = "Andy Leiserson <aleiserson@mozilla.com>" +who = [ + "Andy Leiserson <aleiserson@mozilla.com>", + "Jim Blandy <jimb@red-bean.com>", +] criteria = "safe-to-deploy" -delta = "27.0.0 -> 27.0.0@git:1072b87894b7c3084f80bc9d2679e822435186ba" +delta = "27.0.0 -> 27.0.0@git:a70b8336c01b0869e0459baae5a30fdfe365e5ad" importable = false [[audits.net2]] @@ -6843,9 +6846,12 @@ criteria = "safe-to-deploy" delta = "26.0.0 -> 27.0.0" [[audits.wgpu-core]] -who = "Andy Leiserson <aleiserson@mozilla.com>" +who = [ + "Andy Leiserson <aleiserson@mozilla.com>", + "Jim Blandy <jimb@red-bean.com>", +] criteria = "safe-to-deploy" -delta = "27.0.0 -> 27.0.0@git:1072b87894b7c3084f80bc9d2679e822435186ba" +delta = "27.0.0 -> 27.0.0@git:a70b8336c01b0869e0459baae5a30fdfe365e5ad" importable = false [[audits.wgpu-core-deps-apple]] @@ -6869,9 +6875,12 @@ criteria = "safe-to-deploy" delta = "26.0.0 -> 27.0.0" [[audits.wgpu-core-deps-apple]] -who = "Andy Leiserson <aleiserson@mozilla.com>" +who = [ + "Andy Leiserson <aleiserson@mozilla.com>", + "Jim Blandy <jimb@red-bean.com>", +] criteria = "safe-to-deploy" -delta = "27.0.0 -> 27.0.0@git:1072b87894b7c3084f80bc9d2679e822435186ba" +delta = "27.0.0 -> 27.0.0@git:a70b8336c01b0869e0459baae5a30fdfe365e5ad" importable = false [[audits.wgpu-core-deps-windows-linux-android]] @@ -6895,9 +6904,12 @@ criteria = "safe-to-deploy" delta = "26.0.0 -> 27.0.0" [[audits.wgpu-core-deps-windows-linux-android]] -who = "Andy Leiserson <aleiserson@mozilla.com>" +who = [ + "Andy Leiserson <aleiserson@mozilla.com>", + "Jim Blandy <jimb@red-bean.com>", +] criteria = "safe-to-deploy" -delta = "27.0.0 -> 27.0.0@git:1072b87894b7c3084f80bc9d2679e822435186ba" +delta = "27.0.0 -> 27.0.0@git:a70b8336c01b0869e0459baae5a30fdfe365e5ad" importable = false [[audits.wgpu-hal]] @@ -6999,9 +7011,12 @@ criteria = "safe-to-deploy" delta = "26.0.0 -> 27.0.0" [[audits.wgpu-hal]] -who = "Andy Leiserson <aleiserson@mozilla.com>" +who = [ + "Andy Leiserson <aleiserson@mozilla.com>", + "Jim Blandy <jimb@red-bean.com>", +] criteria = "safe-to-deploy" -delta = "27.0.0 -> 27.0.0@git:1072b87894b7c3084f80bc9d2679e822435186ba" +delta = "27.0.0 -> 27.0.0@git:a70b8336c01b0869e0459baae5a30fdfe365e5ad" importable = false [[audits.wgpu-types]] @@ -7098,9 +7113,12 @@ criteria = "safe-to-deploy" delta = "26.0.0 -> 27.0.0" [[audits.wgpu-types]] -who = "Andy Leiserson <aleiserson@mozilla.com>" +who = [ + "Andy Leiserson <aleiserson@mozilla.com>", + "Jim Blandy <jimb@red-bean.com>", +] criteria = "safe-to-deploy" -delta = "27.0.0 -> 27.0.0@git:1072b87894b7c3084f80bc9d2679e822435186ba" +delta = "27.0.0 -> 27.0.0@git:a70b8336c01b0869e0459baae5a30fdfe365e5ad" importable = false [[audits.whatsys]] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/operation/command_buffer/image_copy/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/operation/command_buffer/image_copy/cts.https.html.ini @@ -1095,14 +1095,22 @@ [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16float";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16sint";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16snorm";dimension="1d"] @@ -1113,8 +1121,12 @@ [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16uint";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r16unorm";dimension="1d"] @@ -1143,26 +1155,42 @@ [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8sint";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8snorm";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8uint";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="r8unorm";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg11b10ufloat";dimension="1d"] @@ -1221,26 +1249,42 @@ [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8sint";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8snorm";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8uint";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="1d"] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="2d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rg8unorm";dimension="3d"] + expected: + if os == "win": FAIL [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="rgb10a2uint";dimension="1d"] @@ -2442,8 +2486,7 @@ [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="2d"] expected: - if os == "mac" and debug: [PASS, FAIL] - if os == "mac" and not debug: FAIL + if os == "mac": [PASS, FAIL] [:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="3d"] expected: diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/operation/memory_sync/texture/same_subresource/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/operation/memory_sync/texture/same_subresource/cts.https.html.ini @@ -259,6 +259,8 @@ [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"b2t-copy","in":"command-encoder"}] [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"storage","in":"compute-pass-encoder"}] + expected: + if os == "linux" and not debug: [PASS, FAIL] [:boundary="command-buffer";first={"op":"attachment-store","in":"command-encoder"};second={"op":"t2t-copy","in":"command-encoder"}] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/capability_checks/limits/maxBindingsPerBindGroup/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/capability_checks/limits/maxBindingsPerBindGroup/cts.https.html.ini @@ -37,22 +37,16 @@ [:limitTest="atDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL [:limitTest="atDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] @@ -67,22 +61,16 @@ [:limitTest="atMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL [:limitTest="atMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] @@ -97,22 +85,16 @@ [:limitTest="betweenDefaultAndMaximum";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL [:limitTest="betweenDefaultAndMaximum";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL [:limitTest="overMaximum";testValueName="atLimit";createPipelineType="createComputePipeline";async=false] @@ -151,22 +133,16 @@ [:limitTest="underDefault";testValueName="atLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=false] - expected: FAIL [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createComputePipeline";async=true] - expected: FAIL [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=false] - expected: FAIL [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipeline";async=true] - expected: FAIL [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=false] - expected: FAIL [:limitTest="underDefault";testValueName="overLimit";createPipelineType="createRenderPipelineWithFragmentStage";async=true] - expected: FAIL [cts.https.html?q=webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:validate:*] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/encoding/cmds/copyTextureToTexture/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/encoding/cmds/copyTextureToTexture/cts.https.html.ini @@ -9118,13 +9118,11 @@ [:srcFormat="rgba32float";dstFormat="bgra8unorm"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="bgra8unorm-srgb"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="depth16unorm"] expected: @@ -9133,28 +9131,23 @@ [:srcFormat="rgba32float";dstFormat="r16float"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="r16sint"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="r16snorm"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="r16uint"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="r16unorm"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="r32float"] expected: @@ -9173,8 +9166,7 @@ [:srcFormat="rgba32float";dstFormat="r8sint"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="r8snorm"] expected: @@ -9235,23 +9227,19 @@ [:srcFormat="rgba32float";dstFormat="rg8sint"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rg8snorm"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rg8uint"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rg8unorm"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rgb10a2uint"] expected: @@ -9310,28 +9298,23 @@ [:srcFormat="rgba32float";dstFormat="rgba8sint"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rgba8snorm"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rgba8uint"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rgba8unorm"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="rgba8unorm-srgb"] expected: - if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:srcFormat="rgba32float";dstFormat="stencil8"] expected: diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/encoding/cmds/render/indirect_draw/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/encoding/cmds/render/indirect_draw/cts.https.html.ini @@ -17,6 +17,8 @@ [cts.https.html?q=webgpu:api,validation,encoding,cmds,render,indirect_draw:indirect_offset_alignment:*] implementation-status: backlog + expected: + if os == "mac" and debug: [OK, CRASH] [:] expected: FAIL diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/state/device_lost/destroy/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/api/validation/state/device_lost/destroy/cts.https.html.ini @@ -2448,13 +2448,13 @@ expected: if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] if os == "win" and not debug: [TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:format="bgra8unorm-srgb";usageType="render";usageCopy="src";awaitLost=true] expected: if os == "win": [FAIL, TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:format="bgra8unorm-srgb";usageType="render";usageCopy="src-dest";awaitLost=false] @@ -4383,29 +4383,32 @@ [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=false] expected: - if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "win": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="render";usageCopy="dst";awaitLost=true] expected: - if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "win": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=false] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="render";usageCopy="none";awaitLost=true] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=false] expected: - if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "win": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="render";usageCopy="src";awaitLost=true] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="render";usageCopy="src-dest";awaitLost=false] @@ -4420,10 +4423,12 @@ [:format="rg8sint";usageType="storage";usageCopy="dst";awaitLost=false] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="storage";usageCopy="dst";awaitLost=true] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="storage";usageCopy="none";awaitLost=false] @@ -4436,18 +4441,22 @@ [:format="rg8sint";usageType="storage";usageCopy="src";awaitLost=false] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="storage";usageCopy="src";awaitLost=true] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="storage";usageCopy="src-dest";awaitLost=false] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="storage";usageCopy="src-dest";awaitLost=true] expected: + if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rg8sint";usageType="texture";usageCopy="dst";awaitLost=false] @@ -5502,7 +5511,7 @@ [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=false] expected: - if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and debug: [PASS, FAIL, TIMEOUT, NOTRUN] if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] @@ -5510,7 +5519,7 @@ [:format="rgba8sint";usageType="texture";usageCopy="none";awaitLost=true] expected: - if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and debug: [PASS, FAIL, TIMEOUT, NOTRUN] if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] @@ -5722,14 +5731,14 @@ [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=false] expected: - if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and debug: [PASS, FAIL, TIMEOUT, NOTRUN] if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:format="rgba8uint";usageType="render";usageCopy="src-dest";awaitLost=true] expected: - if os == "win" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and debug: [PASS, FAIL, TIMEOUT, NOTRUN] if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/subgroupMinMax/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/subgroupMinMax/cts.https.html.ini @@ -9191,7 +9191,7 @@ [:case=369;type="f32";op="subgroupMin";wgSize=[128,1,1\]] expected: if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:case=369;type="f32";op="subgroupMin";wgSize=[64,2,1\]] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/subgroupMul/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/subgroupMul/cts.https.html.ini @@ -9630,7 +9630,7 @@ [:case=745;type="f16";wgSize=[128,1,1\]] expected: if os == "win": [PASS, TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:case=745;type="f16";wgSize=[64,2,1\]] @@ -9648,7 +9648,7 @@ [:case=745;type="f32";wgSize=[64,2,1\]] expected: if os == "win": [PASS, TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:case=746;type="f16";wgSize=[128,1,1\]] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureGather/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureGather/cts.https.html.ini @@ -1220,7 +1220,7 @@ [:stage="f";format="depth24plus-stencil8";modeU="m";modeV="c";offset=false] expected: - if os == "mac" and not debug: [PASS, FAIL] + if os == "mac": [PASS, FAIL] [:stage="f";format="depth24plus-stencil8";modeU="m";modeV="c";offset=true] expected: @@ -1244,9 +1244,11 @@ [:stage="f";format="depth24plus-stencil8";modeU="r";modeV="c";offset=false] expected: - if os == "mac" and not debug: [PASS, FAIL] + if os == "mac": [PASS, FAIL] [:stage="f";format="depth24plus-stencil8";modeU="r";modeV="c";offset=true] + expected: + if os == "mac" and debug: [PASS, FAIL] [:stage="f";format="depth24plus-stencil8";modeU="r";modeV="m";offset=false] expected: @@ -1685,13 +1687,15 @@ [:stage="v";format="depth32float-stencil8";modeU="r";modeV="c";offset=false] expected: - if os == "mac" and not debug: [PASS, FAIL] + if os == "mac": [PASS, FAIL] [:stage="v";format="depth32float-stencil8";modeU="r";modeV="c";offset=true] expected: if os == "mac" and not debug: [PASS, FAIL] [:stage="v";format="depth32float-stencil8";modeU="r";modeV="m";offset=false] + expected: + if os == "mac" and debug: [PASS, FAIL] [:stage="v";format="depth32float-stencil8";modeU="r";modeV="m";offset=true] @@ -5034,13 +5038,13 @@ [:stage="c";format="bc1-rgba-unorm-srgb";filt="linear";modeU="c";modeV="c";offset=false] expected: - if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "win": [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="bc1-rgba-unorm-srgb";filt="linear";modeU="c";modeV="c";offset=true] expected: - if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "win": [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] @@ -5058,7 +5062,7 @@ [:stage="c";format="bc1-rgba-unorm-srgb";filt="linear";modeU="c";modeV="r";offset=false] expected: - if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "win": [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] @@ -32669,6 +32673,7 @@ [:stage="f";format="bc3-rgba-unorm";filt="linear";mode="c"] expected: + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="f";format="bc3-rgba-unorm";filt="linear";mode="m"] @@ -32679,6 +32684,7 @@ [:stage="f";format="bc3-rgba-unorm";filt="linear";mode="r"] expected: + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="f";format="bc3-rgba-unorm";filt="nearest";mode="c"] @@ -36244,17 +36250,20 @@ [:stage="v";format="r8sint";filt="nearest";mode="c"] expected: - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="r8sint";filt="nearest";mode="m"] expected: - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="r8sint";filt="nearest";mode="r"] expected: - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="r8snorm";filt="linear";mode="c"] @@ -36664,7 +36673,8 @@ [:stage="v";format="rg8unorm";filt="nearest";mode="c"] expected: - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="rg8unorm";filt="nearest";mode="m"] @@ -42141,13 +42151,14 @@ expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="depth24plus-stencil8";filt="nearest";modeU="m";modeV="m";offset=false] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="depth24plus-stencil8";filt="nearest";modeU="m";modeV="m";offset=true] @@ -42160,13 +42171,14 @@ expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="depth24plus-stencil8";filt="nearest";modeU="m";modeV="r";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="depth24plus-stencil8";filt="nearest";modeU="r";modeV="c";offset=false] @@ -66963,7 +66975,8 @@ [:stage="c";format="bc3-rgba-unorm";filt="nearest";mode="r"] expected: - if os == "mac": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:stage="c";format="bc3-rgba-unorm-srgb";filt="linear";mode="c"] expected: @@ -68835,10 +68848,18 @@ if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x5-unorm-srgb";filt="linear";mode="m"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x5-unorm-srgb";filt="linear";mode="r"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x5-unorm-srgb";filt="nearest";mode="c"] expected: @@ -68862,40 +68883,88 @@ if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm";filt="linear";mode="c"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm";filt="linear";mode="m"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm";filt="linear";mode="r"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm";filt="nearest";mode="c"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm";filt="nearest";mode="m"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm";filt="nearest";mode="r"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm-srgb";filt="linear";mode="c"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm-srgb";filt="linear";mode="m"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm-srgb";filt="linear";mode="r"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm-srgb";filt="nearest";mode="c"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm-srgb";filt="nearest";mode="m"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x6-unorm-srgb";filt="nearest";mode="r"] - expected: [TIMEOUT, NOTRUN] + expected: + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [TIMEOUT, NOTRUN] + if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-8x8-unorm";filt="linear";mode="c"] expected: [TIMEOUT, NOTRUN] @@ -71216,7 +71285,7 @@ [:stage="f";format="rgba8unorm";filt="linear";mode="m"] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="f";format="rgba8unorm";filt="linear";mode="r"] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSample/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSample/cts.https.html.ini @@ -398,6 +398,8 @@ [:format="depth24plus-stencil8";mode="c";offset=false] [:format="depth24plus-stencil8";mode="c";offset=true] + expected: + if os == "mac" and not debug: [PASS, FAIL] [:format="depth24plus-stencil8";mode="m";offset=false] expected: @@ -447,7 +449,7 @@ [:format="depth32float-stencil8";mode="m";offset=true] expected: - if os == "mac" and not debug: [PASS, FAIL] + if os == "mac": [PASS, FAIL] [:format="depth32float-stencil8";mode="r";offset=false] expected: @@ -5377,7 +5379,7 @@ [:format="bc4-r-unorm";filt="nearest";modeU="c";modeV="m";offset=true] expected: - if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "win": [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] @@ -5445,6 +5447,7 @@ [:format="bc4-r-unorm";filt="nearest";modeU="r";modeV="r";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] @@ -6214,7 +6217,7 @@ [:format="depth24plus";filt="nearest";modeU="m";modeV="c";offset=false] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and not debug: [PASS, FAIL, TIMEOUT, NOTRUN] [:format="depth24plus";filt="nearest";modeU="m";modeV="c";offset=true] @@ -6252,12 +6255,12 @@ [:format="depth24plus";filt="nearest";modeU="r";modeV="m";offset=false] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and not debug: [PASS, FAIL, TIMEOUT, NOTRUN] [:format="depth24plus";filt="nearest";modeU="r";modeV="m";offset=true] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and not debug: [PASS, FAIL, TIMEOUT, NOTRUN] [:format="depth24plus";filt="nearest";modeU="r";modeV="r";offset=false] @@ -57894,7 +57897,7 @@ [:format="bc7-rgba-unorm";filt="nearest";mode="r"] expected: - if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] [:format="bc7-rgba-unorm-srgb";filt="linear";mode="c"] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleBias/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleBias/cts.https.html.ini @@ -5562,7 +5562,7 @@ [:format="depth24plus";filt="nearest";modeU="m";modeV="r";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:format="depth24plus";filt="nearest";modeU="m";modeV="r";offset=true] expected: @@ -19117,10 +19117,18 @@ expected: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="m";modeV="c";offset=false] - expected: FAIL + expected: + if os == "win": FAIL + if os == "linux": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="m";modeV="c";offset=true] - expected: FAIL + expected: + if os == "win": FAIL + if os == "linux": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="m";modeV="m";offset=false] expected: @@ -19137,10 +19145,18 @@ if os == "mac" and not debug: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="m";modeV="r";offset=false] - expected: FAIL + expected: + if os == "win": FAIL + if os == "linux": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="m";modeV="r";offset=true] - expected: FAIL + expected: + if os == "win": FAIL + if os == "linux": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="r";modeV="c";offset=false] expected: FAIL @@ -19149,10 +19165,18 @@ expected: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="r";modeV="m";offset=false] - expected: FAIL + expected: + if os == "win": FAIL + if os == "linux": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="r";modeV="m";offset=true] - expected: FAIL + expected: + if os == "win": FAIL + if os == "linux": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:format="rg11b10ufloat";filt="nearest";modeU="r";modeV="r";offset=false] expected: FAIL diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleCompare/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleCompare/cts.https.html.ini @@ -880,7 +880,7 @@ [:format="depth24plus";filt="nearest";modeU="m";modeV="m";offset=true] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and not debug: FAIL diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleCompareLevel/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleCompareLevel/cts.https.html.ini @@ -3754,7 +3754,7 @@ if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="depth24plus-stencil8";filt="linear";modeU="r";modeV="m";offset=false] expected: @@ -3775,14 +3775,14 @@ if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="depth24plus-stencil8";filt="linear";modeU="r";modeV="r";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="depth24plus-stencil8";filt="nearest";modeU="c";modeV="c";offset=false] expected: @@ -4440,14 +4440,16 @@ expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth16unorm";filt="nearest";modeU="c";modeV="m";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth16unorm";filt="nearest";modeU="c";modeV="r";offset=false] @@ -4512,14 +4514,16 @@ expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth16unorm";filt="nearest";modeU="r";modeV="c";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth16unorm";filt="nearest";modeU="r";modeV="m";offset=false] @@ -4540,14 +4544,16 @@ expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth16unorm";filt="nearest";modeU="r";modeV="r";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth24plus";filt="linear";modeU="c";modeV="c";offset=false] @@ -4607,14 +4613,14 @@ [:stage="v";format="depth24plus";filt="nearest";modeU="c";modeV="c";offset=false] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth24plus";filt="nearest";modeU="c";modeV="c";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] @@ -4631,14 +4637,14 @@ [:stage="v";format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=false] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="v";format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "win" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "win" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "linux": [TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleGrad/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleGrad/cts.https.html.ini @@ -5018,33 +5018,31 @@ [:stage="c";format="depth24plus";filt="nearest";modeU="c";modeV="c";offset=false] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="c";modeV="c";offset=true] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="c";modeV="m";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="c";modeV="m";offset=true] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="c";modeV="r";offset=true] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="m";modeV="c";offset=false] expected: @@ -5074,12 +5072,12 @@ [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=true] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="m";offset=false] expected: @@ -5094,12 +5092,12 @@ [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="r";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="r";offset=true] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus-stencil8";filt="nearest";modeU="c";modeV="c";offset=false] expected: @@ -7086,10 +7084,13 @@ if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="nearest";modeU="c";modeV="c";offset=false] + expected: + if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="nearest";modeU="c";modeV="c";offset=true] expected: - if os == "mac": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:stage="c";format="rg11b10ufloat";filt="nearest";modeU="c";modeV="m";offset=false] expected: @@ -7761,19 +7762,26 @@ [:stage="c";format="rgb10a2unorm";filt="linear";modeU="m";modeV="c";offset=true] expected: - if os == "mac": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:stage="c";format="rgb10a2unorm";filt="linear";modeU="m";modeV="m";offset=false] + expected: + if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rgb10a2unorm";filt="linear";modeU="m";modeV="m";offset=true] expected: - if os == "mac": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:stage="c";format="rgb10a2unorm";filt="linear";modeU="m";modeV="r";offset=false] + expected: + if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rgb10a2unorm";filt="linear";modeU="m";modeV="r";offset=true] expected: - if os == "mac": FAIL + if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: FAIL [:stage="c";format="rgb10a2unorm";filt="linear";modeU="r";modeV="c";offset=false] @@ -46259,7 +46267,8 @@ [:stage="c";format="bgra8unorm-srgb";dim="3d";filt="nearest";modeU="m";modeV="r";modeW="r";offset=false] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="bgra8unorm-srgb";dim="3d";filt="nearest";modeU="m";modeV="r";modeW="r";offset=true] @@ -147765,30 +147774,27 @@ [:stage="c";format="rg11b10ufloat";filt="linear";modeU="c";modeV="c";offset=false] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="c";modeV="c";offset=true] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="c";modeV="m";offset=false] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="c";modeV="m";offset=true] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="c";modeV="r";offset=false] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="c";modeV="r";offset=true] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="m";modeV="c";offset=false] expected: @@ -147816,12 +147822,11 @@ [:stage="c";format="rg11b10ufloat";filt="linear";modeU="r";modeV="c";offset=false] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="r";modeV="c";offset=true] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="r";modeV="m";offset=false] expected: @@ -147833,12 +147838,11 @@ [:stage="c";format="rg11b10ufloat";filt="linear";modeU="r";modeV="r";offset=false] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="linear";modeU="r";modeV="r";offset=true] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="nearest";modeU="c";modeV="c";offset=false] expected: @@ -147878,12 +147882,11 @@ [:stage="c";format="rg11b10ufloat";filt="nearest";modeU="m";modeV="m";offset=false] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="nearest";modeU="m";modeV="m";offset=true] expected: - if os == "mac" and debug: [FAIL, TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac": [FAIL, TIMEOUT, NOTRUN] [:stage="c";format="rg11b10ufloat";filt="nearest";modeU="m";modeV="r";offset=false] expected: @@ -167180,21 +167183,21 @@ [:stage="c";format="bc7-rgba-unorm-srgb";filt="linear";mode="c"] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and not debug: FAIL [:stage="c";format="bc7-rgba-unorm-srgb";filt="linear";mode="m"] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and not debug: FAIL [:stage="c";format="bc7-rgba-unorm-srgb";filt="linear";mode="r"] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and not debug: FAIL @@ -167208,7 +167211,7 @@ [:stage="c";format="bc7-rgba-unorm-srgb";filt="nearest";mode="m"] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and not debug: FAIL @@ -167456,7 +167459,9 @@ [:stage="c";format="etc2-rgb8a1unorm";filt="linear";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8a1unorm";filt="linear";mode="m"] expected: @@ -167464,19 +167469,27 @@ [:stage="c";format="etc2-rgb8a1unorm";filt="linear";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8a1unorm";filt="nearest";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8a1unorm";filt="nearest";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8a1unorm";filt="nearest";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8a1unorm-srgb";filt="linear";mode="c"] expected: @@ -167504,51 +167517,75 @@ [:stage="c";format="etc2-rgb8unorm";filt="linear";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm";filt="linear";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm";filt="linear";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm";filt="nearest";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm";filt="nearest";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm";filt="nearest";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm-srgb";filt="linear";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm-srgb";filt="linear";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm-srgb";filt="linear";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm-srgb";filt="nearest";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm-srgb";filt="nearest";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgb8unorm-srgb";filt="nearest";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="c";format="etc2-rgba8unorm";filt="linear";mode="c"] expected: @@ -170031,7 +170068,10 @@ [:stage="f";format="etc2-rgb8a1unorm-srgb";filt="linear";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgb8a1unorm-srgb";filt="linear";mode="r"] expected: @@ -170099,31 +170139,52 @@ [:stage="f";format="etc2-rgba8unorm";filt="linear";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm";filt="linear";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm";filt="linear";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm";filt="nearest";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm";filt="nearest";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm";filt="nearest";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm-srgb";filt="linear";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm-srgb";filt="linear";mode="m"] expected: @@ -170134,19 +170195,31 @@ [:stage="f";format="etc2-rgba8unorm-srgb";filt="linear";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm-srgb";filt="nearest";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm-srgb";filt="nearest";mode="m"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="etc2-rgba8unorm-srgb";filt="nearest";mode="r"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="f";format="r16float";filt="linear";mode="c"] expected: diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleLevel/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/execution/expression/call/builtin/textureSampleLevel/cts.https.html.ini @@ -559,11 +559,14 @@ [:stage="f";format="depth24plus-stencil8";viewDimension="cube-array";A="i32";mode="r"] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="f";format="depth24plus-stencil8";viewDimension="cube-array";A="u32";mode="c"] expected: - if debug: [TIMEOUT, NOTRUN] + if os == "win" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="f";format="depth24plus-stencil8";viewDimension="cube-array";A="u32";mode="m"] expected: @@ -779,7 +782,7 @@ if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac" and not debug: [PASS, FAIL] [:stage="v";format="depth24plus";viewDimension="cube-array";A="u32";mode="r"] expected: @@ -1096,7 +1099,7 @@ [:stage="f";format="depth24plus-stencil8";mode="r";offset=false] expected: - if os == "mac" and debug: [PASS, FAIL] + if os == "mac": [PASS, FAIL] [:stage="f";format="depth24plus-stencil8";mode="r";offset=true] expected: @@ -5432,7 +5435,7 @@ [:stage="f";format="astc-4x4-unorm-srgb";filt="linear";modeU="m";modeV="m"] expected: if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] - if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] + if os == "linux": [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="f";format="astc-4x4-unorm-srgb";filt="linear";modeU="m";modeV="r"] @@ -20881,7 +20884,7 @@ [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="c";offset=true] expected: @@ -20891,7 +20894,7 @@ [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="m";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="m";offset=true] expected: @@ -20901,7 +20904,7 @@ [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="r";offset=false] expected: if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:stage="c";format="depth24plus";filt="nearest";modeU="r";modeV="r";offset=true] expected: @@ -43436,7 +43439,7 @@ [:stage="f";format="rg11b10ufloat";dim="cube";filt="nearest"] expected: if os == "win" and debug: [PASS, TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="f";format="rg16float";dim="3d";filt="linear"] @@ -44544,7 +44547,7 @@ if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] - if os == "mac": [TIMEOUT, NOTRUN] + if os == "mac" and debug: [TIMEOUT, NOTRUN] [:stage="v";format="bc1-rgba-unorm";dim="cube";filt="linear"] expected: @@ -45024,9 +45027,7 @@ [:stage="v";format="depth32float-stencil8";dim="cube";filt="nearest"] expected: - if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and debug: [TIMEOUT, NOTRUN] - if os == "mac": [TIMEOUT, NOTRUN] + if debug: [TIMEOUT, NOTRUN] [:stage="v";format="eac-r11snorm";dim="3d";filt="linear"] expected: @@ -49691,17 +49692,17 @@ [:stage="c";format="bc5-rg-snorm";dim="cube";filt="linear";mode="c";offset=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="bc5-rg-snorm";dim="cube";filt="linear";mode="m";offset=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="bc5-rg-snorm";dim="cube";filt="linear";mode="r";offset=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="bc5-rg-snorm";dim="cube";filt="nearest";mode="c";offset=false] @@ -49711,7 +49712,7 @@ [:stage="c";format="bc5-rg-snorm";dim="cube";filt="nearest";mode="m";offset=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:stage="c";format="bc5-rg-snorm";dim="cube";filt="nearest";mode="r";offset=false] @@ -87823,7 +87824,7 @@ [:stage="c";format="depth24plus";filt="nearest";mode="m"] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux" and debug: [FAIL, TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] if os == "mac" and not debug: [PASS, FAIL] @@ -90122,14 +90123,14 @@ if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, FAIL] + if os == "mac" and not debug: [PASS, FAIL, TIMEOUT, NOTRUN] [:stage="f";format="depth32float-stencil8";filt="nearest";mode="r"] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: [PASS, FAIL] + if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] [:stage="f";format="eac-r11snorm";filt="linear";mode="c"] expected: diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/validation/expression/call/builtin/subgroupShuffle/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/shader/validation/expression/call/builtin/subgroupShuffle/cts.https.html.ini @@ -1285,7 +1285,7 @@ [:retType="i32";op="subgroupShuffleDown";paramType="i32"] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:retType="i32";op="subgroupShuffleDown";paramType="u32"] expected: @@ -1311,7 +1311,7 @@ [:retType="i32";op="subgroupShuffleDown";paramType="vec2%3Ci32%3E"] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:retType="i32";op="subgroupShuffleDown";paramType="vec2%3Cu32%3E"] expected: @@ -1337,7 +1337,7 @@ [:retType="i32";op="subgroupShuffleDown";paramType="vec3%3Ci32%3E"] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:retType="i32";op="subgroupShuffleDown";paramType="vec3%3Cu32%3E"] expected: @@ -1345,7 +1345,7 @@ [:retType="i32";op="subgroupShuffleDown";paramType="vec4%3Cabstract-float%3E"] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:retType="i32";op="subgroupShuffleDown";paramType="vec4%3Cabstract-int%3E"] expected: @@ -1355,11 +1355,11 @@ [:retType="i32";op="subgroupShuffleDown";paramType="vec4%3Cf16%3E"] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:retType="i32";op="subgroupShuffleDown";paramType="vec4%3Cf32%3E"] expected: - if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] + if os == "mac": [PASS, TIMEOUT, NOTRUN] [:retType="i32";op="subgroupShuffleDown";paramType="vec4%3Ci32%3E"] expected: diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/canvas/getCurrentTexture/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/canvas/getCurrentTexture/cts.https.html.ini @@ -51,8 +51,7 @@ if os == "win" and debug: [PASS, FAIL] if os == "win" and not debug: FAIL if os == "linux" and not debug: [PASS, FAIL] - if os == "mac" and debug: FAIL - if os == "mac" and not debug: [PASS, FAIL] + if os == "mac": [PASS, FAIL] [cts.https.html?q=webgpu:web_platform,canvas,getCurrentTexture:multiple_frames:*] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/copyToTexture/ImageBitmap/cts.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/copyToTexture/ImageBitmap/cts.https.html.ini @@ -1334,7 +1334,7 @@ [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [PASS, TIMEOUT, NOTRUN] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="r16float";dstPremultiplied=true] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/copyToTexture/ImageBitmap/dedicated.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/copyToTexture/ImageBitmap/dedicated.https.html.ini @@ -1307,7 +1307,7 @@ [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] @@ -3125,6 +3125,7 @@ if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] + if os == "mac" and not debug: [PASS, TIMEOUT, NOTRUN] [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="bgra8unorm-srgb";dstPremultiplied=true] expected: @@ -3336,7 +3337,7 @@ if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgb10a2unorm";dstPremultiplied=true] expected: @@ -3345,7 +3346,7 @@ if os == "linux" and debug: [TIMEOUT, NOTRUN] if os == "linux" and not debug: [FAIL, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] - if os == "mac" and not debug: FAIL + if os == "mac" and not debug: [FAIL, TIMEOUT, NOTRUN] [:alpha="premultiply";orientation="none";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba16float";dstPremultiplied=false] expected: @@ -5252,7 +5253,7 @@ [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] [:orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] diff --git a/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/copyToTexture/ImageBitmap/shared.https.html.ini b/testing/web-platform/mozilla/meta/webgpu/cts/webgpu/web_platform/copyToTexture/ImageBitmap/shared.https.html.ini @@ -1307,7 +1307,7 @@ [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=false] expected: - if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and debug: [PASS, TIMEOUT, NOTRUN] if os == "mac" and debug: [TIMEOUT, NOTRUN] [:alpha="none";orientation="none";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="rg16float";dstPremultiplied=true] @@ -2189,7 +2189,8 @@ [:alpha="premultiply";orientation="flipY";colorSpaceConversion="default";srcFlipYInCopy=true;dstFormat="rgba8unorm-srgb";dstPremultiplied=true] expected: if os == "win" and debug: [TIMEOUT, NOTRUN] - if os == "linux": [TIMEOUT, NOTRUN] + if os == "linux" and debug: [TIMEOUT, NOTRUN] + if os == "linux" and not debug: [PASS, TIMEOUT, NOTRUN] if os == "mac": [TIMEOUT, NOTRUN] [:alpha="premultiply";orientation="flipY";colorSpaceConversion="none";srcFlipYInCopy=false;dstFormat="bgra8unorm";dstPremultiplied=false] diff --git a/third_party/rust/wgpu-core/.cargo-checksum.json b/third_party/rust/wgpu-core/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"14fc314e094524575e12773badac343c650bfd0c983d828539a4ac887a64bbf6","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","build.rs":"5e3619e28faeac243cbae1a5f739ad15035dc9e1254957b64fd1deed6f393c8a","src/as_hal.rs":"473936fe2c26563f9fea71bbafdb7eb3d8ff5f4fe9376052d18db3ea8e2908ff","src/binding_model.rs":"9943f0814b697f446ee374343a980e49ca2f8fae1bb1955ba889eb0bee4b1f3b","src/command/allocator.rs":"386cb6e60bd332a881dbbe57ff66a0fa83f35e3ee924559f1689418ac6c7273a","src/command/bind.rs":"c88aa87bf3052fe0993b79ff047339fac4557ead85973f4a37bf236fba401222","src/command/bundle.rs":"d078bb708cbdea42ebebc5c5a510bff3cad982b67be3682ed5956bfb212114f1","src/command/clear.rs":"932afc6e1858f8c93d3ecf721215a0bc584a8e613444641a98f5cb98e3061b4b","src/command/compute.rs":"3c2d8e6cf2ff53c94f7d25f42d1a74ea656ea6122f8022d90d0f43b0f82a29ed","src/command/compute_command.rs":"18aa0b8e389a5d345243b876b1abbacfc998a19d23069e092183fa7be10fa0ab","src/command/draw.rs":"e7bf195d33683a19b077e64d181cb27b8acde724732ac9af3c94d83c3f21559e","src/command/encoder.rs":"7655f8c248120f39e37f3ad0f84bd9816df78a75657790ab12d5aba144fef65f","src/command/encoder_command.rs":"4e1d28040d9330a803644e377bd7675ec503cd0396c31394658dc67d71a4b50f","src/command/ffi.rs":"1fb626579a7726a32d571a17a14f2656def0c170f4f6297e7e51772a6fc5a566","src/command/memory_init.rs":"f68a796c4262d261620cf85e5762e267dee013f4ef5d61f67fcb173b59048983","src/command/mod.rs":"8fa942354820b79c78040e4da0fd6e7f4423486f691f4545490c79857904f106","src/command/pass.rs":"5ee6e7a68329b716b5a5231b27794682b5b17a6ee2c237f658bb9b71dd2efeca","src/command/query.rs":"fa7cb51fbbaa50febe0e61c473891d4131125c290180a05d49b60f5138931fb4","src/command/ray_tracing.rs":"4768a6dba5f737d3550a90ca35fe75c39fe241fc2d41c3795eb329139c5e6ec6","src/command/render.rs":"4a5409a4ffe48252bd44061c96baa948cc8cd13912e2cc5dec6e40c8d7c259b6","src/command/render_command.rs":"3f1bc2fec688fa3f33052867eeb2e194020a643f7d16f6111b8b128594c38570","src/command/timestamp_writes.rs":"da06fb07b8d0917be3e7fb9212d0ffc6b16526e1c1df617213ef354c3e1fb446","src/command/transfer.rs":"28fdca903934d7e2e5d12d28f952ad3e9ef804c8452f9d020831b5e6aca7e19d","src/command/transition_resources.rs":"753cb02adfee4758404c403d19fd76e6c8de77de01435a2cbe2f60bdbe44bde1","src/conv.rs":"c3354002c8c69994692c923d3772744a0f634b760ca73d79634041190d06453a","src/device/bgl.rs":"fcb1d53b692970912781748379df675268981c97352872abf2e7bb0b1ebdd533","src/device/global.rs":"8911123058c91e2695c5712b4e106c6175060adf0c2c2ebd0a28c2751c91ec31","src/device/life.rs":"44bd34cf5ab1c1a21729f2188df6d2ca0238f11c5f723380c8a4a16fbbd90b88","src/device/mod.rs":"dc8271ae7b62e1096f1a9068f671e6ed8cf7a11b5f9987066d5c173c6e4c4ad8","src/device/queue.rs":"598048a8cf2597a9f737144193743e3a4290d92aeca7a9de21bd8ca38d8a65d1","src/device/ray_tracing.rs":"cb13bc0caf54113ca12ce5db147af339474ec4b2423f2556600b5ea936b408cc","src/device/resource.rs":"bbf63c260edbfdf3522c1c8cda41f447a4b00caec3c41cc66d8dabd282f6ec1b","src/device/trace.rs":"39e52ee5b220eb6a13d949582f1f87756189648bf2f05ea7148b0a67b73c226f","src/error.rs":"4f07a0b09b30b2d6cbc855d0091d724000f492018af3b41e80befbeccf2a6f4e","src/global.rs":"bd76f9552496996f9eba6502e5caf1bcd6ca33bf3d5008795b5335f74e56fd55","src/hash_utils.rs":"9f57a627fe3f00659391670141df62f68d67922c7b186f2a9a5958ab16fb576f","src/hub.rs":"308c53e05134e5a48294c61511e43077adfdb5c334237de2016ed4537d562382","src/id.rs":"134974aa304d1d0eb7349438b9660519886c513f01d5868cd4331d2bc78f2cb8","src/identity.rs":"712ccda267eb602655c53672a94346aa4c9f88c0044ae6edcd658a814c9a50cf","src/indirect_validation/dispatch.rs":"b15d926e0de732c3c39c965f168f99598fa508ca4b0883061993d99dd644b31a","src/indirect_validation/draw.rs":"6d8338f37f406c6e2cf89713e8493f167e1d8e999737f2976de298810c2ada76","src/indirect_validation/mod.rs":"79466e4f9a59386e833958b3537beed6ffb6a7ee62aaabcf35382c2683998e43","src/indirect_validation/utils.rs":"e6a3b636dd71ff6b01d5abd5a589a0136fb30aa1d517a43f45cf2e5ad54da245","src/indirect_validation/validate_draw.wgsl":"fa7bba5f28c6c181f2d55ecfe386a5e5cd276bcb3c36aa7f963f43c535a9bf9a","src/init_tracker/buffer.rs":"6167a400ab271ba857f1c507e60a46fbd318c185aff87eecf7eb05f7f09b6963","src/init_tracker/mod.rs":"aa87df3428e3b23507377c71eae92dc1dd9f5d5374aa0b03906fb81507fc6ce6","src/init_tracker/texture.rs":"ffdc67d4be23bcd48b22945de94ac0ea8ee571f91eb6d00323b9afe6fa91eef3","src/instance.rs":"ea7f8e9e1dff27c19e6ddfd0842d001e057e2cb856b1ec1443ab717ac13de276","src/lib.rs":"57d2562e33b04113cc6c2ca3bc9a215ec779a291be82b680ff037fac7d7a8a15","src/lock/mod.rs":"8d3ae3f8d004d7f7d8a3aefe9f30b35669cb8e2409f5fba27b1fcb116b2429c4","src/lock/observing.rs":"f2df071927940e34e808d718c890caea0c3b70c56c2499c98efbddc052eda46f","src/lock/rank.rs":"238e6a97c58ee1a804863c8011bb257864301170344d18596bdaab09f3f74b54","src/lock/ranked.rs":"a95d6bf7f2ef510047a4c33687076beccf38a0148aac3261bd29fa7555e3f488","src/lock/vanilla.rs":"ca8156d4c981473d437db1056487a44c714760d685819eaff8cf82fb0098a608","src/pipeline.rs":"b7aae46522bc6843b0f47dac7e73e33197c76e9724cfb4be3b949bfa27a99fb1","src/pipeline_cache.rs":"256bf8df58d8ab904afddc132349d03e4f659b6bd6882bc8df582dcfd05ae3d5","src/pool.rs":"e11bfdc73a66321d26715465fa74657dcd26a9b856b80b8369b4aac2132a4295","src/present.rs":"bf0c6c47e58496199955013170f41cbf10755c1572583d5af4b88686c28ffb66","src/ray_tracing.rs":"a4261ccd978e8fab1fef48a168d2d33f8a9f2dae89f285ecd9ec8a6d0894fa3b","src/registry.rs":"ecd457e8956e065050bb9c63ca404505e56ffed6d540b3f14f745d7c4010b205","src/resource.rs":"729534761eccf965758ed82a21c7ffd357d7378c9216b25d0649185ce714b8b2","src/scratch.rs":"ea5c40e4d18a12f09cc1038f2dcdddb69b13e99275ac987d826658229a39b326","src/snatch.rs":"bf422810afd952894e365cd397763d42d6365ce3c5a5b4c1170566432f462939","src/storage.rs":"29427dea035d03abc8b8abdebecc5591378f1366088d1468ab2beb8536e7d675","src/timestamp_normalization/common.wgsl":"9f65aef0526ff9dde945fae70cef064ad961b0aee4291759ae82974cd2ead0a7","src/timestamp_normalization/mod.rs":"89444ad79900c12c2dc44780f1525cd0554d6ed1d9038938dd0075e8173ae59d","src/timestamp_normalization/timestamp_normalization.wgsl":"4b2202b965e4c67482d03a546ac38c72a602d79ed9a60e6f7217393c49afad49","src/track/blas.rs":"18c7b5b89a60ab49bbc0f4f8b85a24502c1d968714ef4c586095e119848d902a","src/track/buffer.rs":"1ab5310367606fc74f0791733ea5ba2e09acc92ff7f4f4773f66bcfb3138c52f","src/track/metadata.rs":"04b8bcf8ded7c7c805d9336cfc874da9d8de7d12d99f7525f0540780a1dffc45","src/track/mod.rs":"a66ce12a4dc430a63bd6a3e05818695e407cfb079b320a5cd000bd1b45ceb6a3","src/track/range.rs":"2688b05a0c6e8510ff6ba3a9623e8b83f433a05ba743129928c56c93d9a9c233","src/track/stateless.rs":"3db699f5f48a319fa07fb16cdf51e1623d6ecac7a476467ee366e014ea665b89","src/track/texture.rs":"754c54f3051c8c780f3904c8c9213fc91ea1838ee14301731dd069a98c8c6695","src/validation.rs":"39a38eb27487d1510d883253539c68a45ecb1cfb8f2afb65ac065b84108b7b55","src/weak_vec.rs":"a4193add5912b91226a3155cc613365b7fafdf2e7929d21d68bc19d149696e85"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"14fc314e094524575e12773badac343c650bfd0c983d828539a4ac887a64bbf6","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","build.rs":"5e3619e28faeac243cbae1a5f739ad15035dc9e1254957b64fd1deed6f393c8a","src/as_hal.rs":"473936fe2c26563f9fea71bbafdb7eb3d8ff5f4fe9376052d18db3ea8e2908ff","src/binding_model.rs":"9943f0814b697f446ee374343a980e49ca2f8fae1bb1955ba889eb0bee4b1f3b","src/command/allocator.rs":"386cb6e60bd332a881dbbe57ff66a0fa83f35e3ee924559f1689418ac6c7273a","src/command/bind.rs":"c88aa87bf3052fe0993b79ff047339fac4557ead85973f4a37bf236fba401222","src/command/bundle.rs":"d078bb708cbdea42ebebc5c5a510bff3cad982b67be3682ed5956bfb212114f1","src/command/clear.rs":"932afc6e1858f8c93d3ecf721215a0bc584a8e613444641a98f5cb98e3061b4b","src/command/compute.rs":"5c74db1124542f2b41435f7dec4f9118e44b3efa8a38f84e1d03e73ebfa1a9b9","src/command/compute_command.rs":"18aa0b8e389a5d345243b876b1abbacfc998a19d23069e092183fa7be10fa0ab","src/command/draw.rs":"e7bf195d33683a19b077e64d181cb27b8acde724732ac9af3c94d83c3f21559e","src/command/encoder.rs":"7655f8c248120f39e37f3ad0f84bd9816df78a75657790ab12d5aba144fef65f","src/command/encoder_command.rs":"4e1d28040d9330a803644e377bd7675ec503cd0396c31394658dc67d71a4b50f","src/command/ffi.rs":"1fb626579a7726a32d571a17a14f2656def0c170f4f6297e7e51772a6fc5a566","src/command/memory_init.rs":"f68a796c4262d261620cf85e5762e267dee013f4ef5d61f67fcb173b59048983","src/command/mod.rs":"1f51c68df72ea90316eebafa141a974b658467b2ad6543302a5eaea642ef1506","src/command/pass.rs":"5ee6e7a68329b716b5a5231b27794682b5b17a6ee2c237f658bb9b71dd2efeca","src/command/query.rs":"fa7cb51fbbaa50febe0e61c473891d4131125c290180a05d49b60f5138931fb4","src/command/ray_tracing.rs":"4768a6dba5f737d3550a90ca35fe75c39fe241fc2d41c3795eb329139c5e6ec6","src/command/render.rs":"42dfc095c886316acf4e2f892329487fedeba44de4d273267b7dd49e5118ff95","src/command/render_command.rs":"3f1bc2fec688fa3f33052867eeb2e194020a643f7d16f6111b8b128594c38570","src/command/timestamp_writes.rs":"da06fb07b8d0917be3e7fb9212d0ffc6b16526e1c1df617213ef354c3e1fb446","src/command/transfer.rs":"28fdca903934d7e2e5d12d28f952ad3e9ef804c8452f9d020831b5e6aca7e19d","src/command/transition_resources.rs":"753cb02adfee4758404c403d19fd76e6c8de77de01435a2cbe2f60bdbe44bde1","src/conv.rs":"4e4115429df502099f7230d47a050d307f6237c7c11c9c90cba9e34dc909ebdd","src/device/bgl.rs":"b081fe1393f1dd917151efc3a10ee0269fecd3920eac3b45411c1197a98c5a06","src/device/global.rs":"e6ca310ed5f0ed4bd369d25b0f6ee6711624484f35c9fd533111f603aae25618","src/device/life.rs":"44bd34cf5ab1c1a21729f2188df6d2ca0238f11c5f723380c8a4a16fbbd90b88","src/device/mod.rs":"dc8271ae7b62e1096f1a9068f671e6ed8cf7a11b5f9987066d5c173c6e4c4ad8","src/device/queue.rs":"598048a8cf2597a9f737144193743e3a4290d92aeca7a9de21bd8ca38d8a65d1","src/device/ray_tracing.rs":"cb13bc0caf54113ca12ce5db147af339474ec4b2423f2556600b5ea936b408cc","src/device/resource.rs":"7e52478bdfb2d4c38c104a90defc5e4c0ebc48578e79ae36205e4a1de25d253c","src/device/trace.rs":"39e52ee5b220eb6a13d949582f1f87756189648bf2f05ea7148b0a67b73c226f","src/error.rs":"4f07a0b09b30b2d6cbc855d0091d724000f492018af3b41e80befbeccf2a6f4e","src/global.rs":"bd76f9552496996f9eba6502e5caf1bcd6ca33bf3d5008795b5335f74e56fd55","src/hash_utils.rs":"9f57a627fe3f00659391670141df62f68d67922c7b186f2a9a5958ab16fb576f","src/hub.rs":"308c53e05134e5a48294c61511e43077adfdb5c334237de2016ed4537d562382","src/id.rs":"134974aa304d1d0eb7349438b9660519886c513f01d5868cd4331d2bc78f2cb8","src/identity.rs":"712ccda267eb602655c53672a94346aa4c9f88c0044ae6edcd658a814c9a50cf","src/indirect_validation/dispatch.rs":"b15d926e0de732c3c39c965f168f99598fa508ca4b0883061993d99dd644b31a","src/indirect_validation/draw.rs":"6d8338f37f406c6e2cf89713e8493f167e1d8e999737f2976de298810c2ada76","src/indirect_validation/mod.rs":"79466e4f9a59386e833958b3537beed6ffb6a7ee62aaabcf35382c2683998e43","src/indirect_validation/utils.rs":"e6a3b636dd71ff6b01d5abd5a589a0136fb30aa1d517a43f45cf2e5ad54da245","src/indirect_validation/validate_draw.wgsl":"fa7bba5f28c6c181f2d55ecfe386a5e5cd276bcb3c36aa7f963f43c535a9bf9a","src/init_tracker/buffer.rs":"6167a400ab271ba857f1c507e60a46fbd318c185aff87eecf7eb05f7f09b6963","src/init_tracker/mod.rs":"aa87df3428e3b23507377c71eae92dc1dd9f5d5374aa0b03906fb81507fc6ce6","src/init_tracker/texture.rs":"ffdc67d4be23bcd48b22945de94ac0ea8ee571f91eb6d00323b9afe6fa91eef3","src/instance.rs":"e7b9a20e070cc401f75dfe07aceb8f2950a4d99ed8a7d4413ef9f0813f5a8ca1","src/lib.rs":"57d2562e33b04113cc6c2ca3bc9a215ec779a291be82b680ff037fac7d7a8a15","src/lock/mod.rs":"8d3ae3f8d004d7f7d8a3aefe9f30b35669cb8e2409f5fba27b1fcb116b2429c4","src/lock/observing.rs":"5bf62cef9f3ae67e99af640442fadd4e1f762480d990ee69ed9924c9e94a8dce","src/lock/rank.rs":"238e6a97c58ee1a804863c8011bb257864301170344d18596bdaab09f3f74b54","src/lock/ranked.rs":"a95d6bf7f2ef510047a4c33687076beccf38a0148aac3261bd29fa7555e3f488","src/lock/vanilla.rs":"ca8156d4c981473d437db1056487a44c714760d685819eaff8cf82fb0098a608","src/pipeline.rs":"b7aae46522bc6843b0f47dac7e73e33197c76e9724cfb4be3b949bfa27a99fb1","src/pipeline_cache.rs":"41a3a76cb9a10777ace910984cabf80b0b73d103108e2db73c2440a4c0a9c191","src/pool.rs":"e11bfdc73a66321d26715465fa74657dcd26a9b856b80b8369b4aac2132a4295","src/present.rs":"bf0c6c47e58496199955013170f41cbf10755c1572583d5af4b88686c28ffb66","src/ray_tracing.rs":"a4261ccd978e8fab1fef48a168d2d33f8a9f2dae89f285ecd9ec8a6d0894fa3b","src/registry.rs":"ecd457e8956e065050bb9c63ca404505e56ffed6d540b3f14f745d7c4010b205","src/resource.rs":"f51d76decc1732a9b8f0c7c0541a58752db5086699f6519f4d8c1c39b20c602f","src/scratch.rs":"ea5c40e4d18a12f09cc1038f2dcdddb69b13e99275ac987d826658229a39b326","src/snatch.rs":"bf422810afd952894e365cd397763d42d6365ce3c5a5b4c1170566432f462939","src/storage.rs":"29427dea035d03abc8b8abdebecc5591378f1366088d1468ab2beb8536e7d675","src/timestamp_normalization/common.wgsl":"9f65aef0526ff9dde945fae70cef064ad961b0aee4291759ae82974cd2ead0a7","src/timestamp_normalization/mod.rs":"89444ad79900c12c2dc44780f1525cd0554d6ed1d9038938dd0075e8173ae59d","src/timestamp_normalization/timestamp_normalization.wgsl":"4b2202b965e4c67482d03a546ac38c72a602d79ed9a60e6f7217393c49afad49","src/track/blas.rs":"18c7b5b89a60ab49bbc0f4f8b85a24502c1d968714ef4c586095e119848d902a","src/track/buffer.rs":"1ab5310367606fc74f0791733ea5ba2e09acc92ff7f4f4773f66bcfb3138c52f","src/track/metadata.rs":"04b8bcf8ded7c7c805d9336cfc874da9d8de7d12d99f7525f0540780a1dffc45","src/track/mod.rs":"a66ce12a4dc430a63bd6a3e05818695e407cfb079b320a5cd000bd1b45ceb6a3","src/track/range.rs":"2688b05a0c6e8510ff6ba3a9623e8b83f433a05ba743129928c56c93d9a9c233","src/track/stateless.rs":"3db699f5f48a319fa07fb16cdf51e1623d6ecac7a476467ee366e014ea665b89","src/track/texture.rs":"754c54f3051c8c780f3904c8c9213fc91ea1838ee14301731dd069a98c8c6695","src/validation.rs":"a4f661cd65a621e1aebf2d5c5aa3d726373647d6cbab36ed8ebdcb42bbecf416","src/weak_vec.rs":"a4193add5912b91226a3155cc613365b7fafdf2e7929d21d68bc19d149696e85"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/wgpu-core/src/command/compute.rs b/third_party/rust/wgpu-core/src/command/compute.rs @@ -7,7 +7,7 @@ use wgt::{ use alloc::{borrow::Cow, boxed::Box, sync::Arc, vec::Vec}; use core::{convert::Infallible, fmt, str}; -use crate::{binding_model::BindError, resource::RawResourceAccess}; +use crate::{api_log, binding_model::BindError, resource::RawResourceAccess}; use crate::{ binding_model::{LateMinBufferBindingSizeMismatch, PushConstantUploadError}, command::{ @@ -853,6 +853,8 @@ fn set_pipeline( } fn dispatch(state: &mut State, groups: [u32; 3]) -> Result<(), ComputePassErrorInner> { + api_log!("ComputePass::dispatch {groups:?}"); + state.is_ready()?; state.flush_states(None)?; @@ -888,6 +890,8 @@ fn dispatch_indirect( buffer: Arc<Buffer>, offset: u64, ) -> Result<(), ComputePassErrorInner> { + api_log!("ComputePass::dispatch_indirect"); + buffer.same_device(device)?; state.is_ready()?; diff --git a/third_party/rust/wgpu-core/src/command/mod.rs b/third_party/rust/wgpu-core/src/command/mod.rs @@ -898,6 +898,229 @@ impl CommandEncoder { raw.transition_textures(&texture_barriers); } } + + fn finish( + self: &Arc<Self>, + desc: &wgt::CommandBufferDescriptor<Label>, + ) -> (Arc<CommandBuffer>, Option<CommandEncoderError>) { + let mut cmd_enc_status = self.data.lock(); + + let res = match cmd_enc_status.finish() { + CommandEncoderStatus::Finished(cmd_buf_data) => Ok(cmd_buf_data), + CommandEncoderStatus::Error(err) => Err(err), + _ => unreachable!(), + }; + + let res = res.and_then(|mut cmd_buf_data| { + self.device.check_is_valid()?; + let snatch_guard = self.device.snatchable_lock.read(); + let mut debug_scope_depth = 0; + + let mut commands = mem::take(&mut cmd_buf_data.commands); + for command in commands.drain(..) { + if matches!( + command, + ArcCommand::RunRenderPass { .. } | ArcCommand::RunComputePass { .. } + ) { + // Compute passes and render passes can accept either an + // open or closed encoder. This state object holds an + // `InnerCommandEncoder`. See the documentation of + // [`EncodingState`]. + let mut state = EncodingState { + device: &self.device, + raw_encoder: &mut cmd_buf_data.encoder, + tracker: &mut cmd_buf_data.trackers, + buffer_memory_init_actions: &mut cmd_buf_data.buffer_memory_init_actions, + texture_memory_actions: &mut cmd_buf_data.texture_memory_actions, + as_actions: &mut cmd_buf_data.as_actions, + temp_resources: &mut cmd_buf_data.temp_resources, + indirect_draw_validation_resources: &mut cmd_buf_data + .indirect_draw_validation_resources, + snatch_guard: &snatch_guard, + debug_scope_depth: &mut debug_scope_depth, + }; + + match command { + ArcCommand::RunRenderPass { + pass, + color_attachments, + depth_stencil_attachment, + timestamp_writes, + occlusion_query_set, + } => { + api_log!( + "Begin encoding render pass with '{}' label", + pass.label.as_deref().unwrap_or("") + ); + let res = encode_render_pass( + &mut state, + pass, + color_attachments, + depth_stencil_attachment, + timestamp_writes, + occlusion_query_set, + ); + match res.as_ref() { + Err(err) => api_log!("Finished encoding render pass ({err:?})"), + Ok(_) => api_log!("Finished encoding render pass (success)"), + } + res?; + } + ArcCommand::RunComputePass { + pass, + timestamp_writes, + } => { + api_log!( + "Begin encoding compute pass with '{}' label", + pass.label.as_deref().unwrap_or("") + ); + let res = encode_compute_pass(&mut state, pass, timestamp_writes); + match res.as_ref() { + Err(err) => api_log!("Finished encoding compute pass ({err:?})"), + Ok(_) => api_log!("Finished encoding compute pass (success)"), + } + res?; + } + _ => unreachable!(), + } + } else { + // All the other non-pass encoding routines assume the + // encoder is open, so open it if necessary. This state + // object holds an `&mut dyn hal::DynCommandEncoder`. By + // convention, a bare HAL encoder reference in + // [`EncodingState`] must always be an open encoder. + let raw_encoder = cmd_buf_data.encoder.open_if_closed()?; + let mut state = EncodingState { + device: &self.device, + raw_encoder, + tracker: &mut cmd_buf_data.trackers, + buffer_memory_init_actions: &mut cmd_buf_data.buffer_memory_init_actions, + texture_memory_actions: &mut cmd_buf_data.texture_memory_actions, + as_actions: &mut cmd_buf_data.as_actions, + temp_resources: &mut cmd_buf_data.temp_resources, + indirect_draw_validation_resources: &mut cmd_buf_data + .indirect_draw_validation_resources, + snatch_guard: &snatch_guard, + debug_scope_depth: &mut debug_scope_depth, + }; + match command { + ArcCommand::CopyBufferToBuffer { + src, + src_offset, + dst, + dst_offset, + size, + } => { + copy_buffer_to_buffer( + &mut state, &src, src_offset, &dst, dst_offset, size, + )?; + } + ArcCommand::CopyBufferToTexture { src, dst, size } => { + copy_buffer_to_texture(&mut state, &src, &dst, &size)?; + } + ArcCommand::CopyTextureToBuffer { src, dst, size } => { + copy_texture_to_buffer(&mut state, &src, &dst, &size)?; + } + ArcCommand::CopyTextureToTexture { src, dst, size } => { + copy_texture_to_texture(&mut state, &src, &dst, &size)?; + } + ArcCommand::ClearBuffer { dst, offset, size } => { + clear_buffer(&mut state, dst, offset, size)?; + } + ArcCommand::ClearTexture { + dst, + subresource_range, + } => { + clear_texture_cmd(&mut state, dst, &subresource_range)?; + } + ArcCommand::WriteTimestamp { + query_set, + query_index, + } => { + write_timestamp(&mut state, query_set, query_index)?; + } + ArcCommand::ResolveQuerySet { + query_set, + start_query, + query_count, + destination, + destination_offset, + } => { + resolve_query_set( + &mut state, + query_set, + start_query, + query_count, + destination, + destination_offset, + )?; + } + ArcCommand::PushDebugGroup(label) => { + push_debug_group(&mut state, &label)?; + } + ArcCommand::PopDebugGroup => { + pop_debug_group(&mut state)?; + } + ArcCommand::InsertDebugMarker(label) => { + insert_debug_marker(&mut state, &label)?; + } + ArcCommand::BuildAccelerationStructures { blas, tlas } => { + build_acceleration_structures(&mut state, blas, tlas)?; + } + ArcCommand::TransitionResources { + buffer_transitions, + texture_transitions, + } => { + transition_resources( + &mut state, + buffer_transitions, + texture_transitions, + )?; + } + ArcCommand::RunComputePass { .. } | ArcCommand::RunRenderPass { .. } => { + unreachable!() + } + } + } + } + + if debug_scope_depth > 0 { + Err(CommandEncoderError::DebugGroupError( + DebugGroupError::MissingPop, + ))?; + } + + // Close the encoder, unless it was closed already by a render or compute pass. + cmd_buf_data.encoder.close_if_open()?; + + // Note: if we want to stop tracking the swapchain texture view, + // this is the place to do it. + + Ok(cmd_buf_data) + }); + + let (data, error) = match res { + Err(e) => { + if e.is_destroyed_error() { + // Errors related to destroyed resources are not reported until the + // command buffer is submitted. + (CommandEncoderStatus::Error(e.clone()), None) + } else { + (CommandEncoderStatus::Error(e.clone()), Some(e)) + } + } + + Ok(data) => (CommandEncoderStatus::Finished(data), None), + }; + + let cmd_buf = Arc::new(CommandBuffer { + device: self.device.clone(), + label: desc.label.to_string(), + data: Mutex::new(rank::COMMAND_BUFFER_DATA, data), + }); + + (cmd_buf, error) + } } impl CommandBuffer { @@ -1285,205 +1508,9 @@ impl Global { let hub = &self.hub; let cmd_enc = hub.command_encoders.get(encoder_id); - let mut cmd_enc_status = cmd_enc.data.lock(); - - let res = match cmd_enc_status.finish() { - CommandEncoderStatus::Finished(cmd_buf_data) => Ok(cmd_buf_data), - CommandEncoderStatus::Error(err) => Err(err), - _ => unreachable!(), - }; - - let res = res.and_then(|mut cmd_buf_data| { - cmd_enc.device.check_is_valid()?; - let snatch_guard = cmd_enc.device.snatchable_lock.read(); - let mut debug_scope_depth = 0; - - let mut commands = mem::take(&mut cmd_buf_data.commands); - for command in commands.drain(..) { - if matches!( - command, - ArcCommand::RunRenderPass { .. } | ArcCommand::RunComputePass { .. } - ) { - // Compute passes and render passes can accept either an - // open or closed encoder. This state object holds an - // `InnerCommandEncoder`. See the documentation of - // [`EncodingState`]. - let mut state = EncodingState { - device: &cmd_enc.device, - raw_encoder: &mut cmd_buf_data.encoder, - tracker: &mut cmd_buf_data.trackers, - buffer_memory_init_actions: &mut cmd_buf_data.buffer_memory_init_actions, - texture_memory_actions: &mut cmd_buf_data.texture_memory_actions, - as_actions: &mut cmd_buf_data.as_actions, - temp_resources: &mut cmd_buf_data.temp_resources, - indirect_draw_validation_resources: &mut cmd_buf_data - .indirect_draw_validation_resources, - snatch_guard: &snatch_guard, - debug_scope_depth: &mut debug_scope_depth, - }; - - match command { - ArcCommand::RunRenderPass { - pass, - color_attachments, - depth_stencil_attachment, - timestamp_writes, - occlusion_query_set, - } => { - encode_render_pass( - &mut state, - pass, - color_attachments, - depth_stencil_attachment, - timestamp_writes, - occlusion_query_set, - )?; - } - ArcCommand::RunComputePass { - pass, - timestamp_writes, - } => { - encode_compute_pass(&mut state, pass, timestamp_writes)?; - } - _ => unreachable!(), - } - } else { - // All the other non-pass encoding routines assume the - // encoder is open, so open it if necessary. This state - // object holds an `&mut dyn hal::DynCommandEncoder`. By - // convention, a bare HAL encoder reference in - // [`EncodingState`] must always be an open encoder. - let raw_encoder = cmd_buf_data.encoder.open_if_closed()?; - let mut state = EncodingState { - device: &cmd_enc.device, - raw_encoder, - tracker: &mut cmd_buf_data.trackers, - buffer_memory_init_actions: &mut cmd_buf_data.buffer_memory_init_actions, - texture_memory_actions: &mut cmd_buf_data.texture_memory_actions, - as_actions: &mut cmd_buf_data.as_actions, - temp_resources: &mut cmd_buf_data.temp_resources, - indirect_draw_validation_resources: &mut cmd_buf_data - .indirect_draw_validation_resources, - snatch_guard: &snatch_guard, - debug_scope_depth: &mut debug_scope_depth, - }; - match command { - ArcCommand::CopyBufferToBuffer { - src, - src_offset, - dst, - dst_offset, - size, - } => { - copy_buffer_to_buffer( - &mut state, &src, src_offset, &dst, dst_offset, size, - )?; - } - ArcCommand::CopyBufferToTexture { src, dst, size } => { - copy_buffer_to_texture(&mut state, &src, &dst, &size)?; - } - ArcCommand::CopyTextureToBuffer { src, dst, size } => { - copy_texture_to_buffer(&mut state, &src, &dst, &size)?; - } - ArcCommand::CopyTextureToTexture { src, dst, size } => { - copy_texture_to_texture(&mut state, &src, &dst, &size)?; - } - ArcCommand::ClearBuffer { dst, offset, size } => { - clear_buffer(&mut state, dst, offset, size)?; - } - ArcCommand::ClearTexture { - dst, - subresource_range, - } => { - clear_texture_cmd(&mut state, dst, &subresource_range)?; - } - ArcCommand::WriteTimestamp { - query_set, - query_index, - } => { - write_timestamp(&mut state, query_set, query_index)?; - } - ArcCommand::ResolveQuerySet { - query_set, - start_query, - query_count, - destination, - destination_offset, - } => { - resolve_query_set( - &mut state, - query_set, - start_query, - query_count, - destination, - destination_offset, - )?; - } - ArcCommand::PushDebugGroup(label) => { - push_debug_group(&mut state, &label)?; - } - ArcCommand::PopDebugGroup => { - pop_debug_group(&mut state)?; - } - ArcCommand::InsertDebugMarker(label) => { - insert_debug_marker(&mut state, &label)?; - } - ArcCommand::BuildAccelerationStructures { blas, tlas } => { - build_acceleration_structures(&mut state, blas, tlas)?; - } - ArcCommand::TransitionResources { - buffer_transitions, - texture_transitions, - } => { - transition_resources( - &mut state, - buffer_transitions, - texture_transitions, - )?; - } - ArcCommand::RunComputePass { .. } | ArcCommand::RunRenderPass { .. } => { - unreachable!() - } - } - } - } - - if debug_scope_depth > 0 { - Err(CommandEncoderError::DebugGroupError( - DebugGroupError::MissingPop, - ))?; - } - - // Close the encoder, unless it was closed already by a render or compute pass. - cmd_buf_data.encoder.close_if_open()?; - - // Note: if we want to stop tracking the swapchain texture view, - // this is the place to do it. - - Ok(cmd_buf_data) - }); - - let (data, error) = match res { - Err(e) => { - if e.is_destroyed_error() { - // Errors related to destroyed resources are not reported until the - // command buffer is submitted. - (CommandEncoderStatus::Error(e.clone()), None) - } else { - (CommandEncoderStatus::Error(e.clone()), Some(e)) - } - } - - Ok(data) => (CommandEncoderStatus::Finished(data), None), - }; - - let cmd_buf = CommandBuffer { - device: cmd_enc.device.clone(), - label: desc.label.to_string(), - data: Mutex::new(rank::COMMAND_BUFFER_DATA, data), - }; - let cmd_buf_id = hub.command_buffers.prepare(id_in).assign(Arc::new(cmd_buf)); + let (cmd_buf, error) = cmd_enc.finish(desc); + let cmd_buf_id = hub.command_buffers.prepare(id_in).assign(cmd_buf); (cmd_buf_id, error) } diff --git a/third_party/rust/wgpu-core/src/command/render.rs b/third_party/rust/wgpu-core/src/command/render.rs @@ -629,6 +629,8 @@ pub enum ColorAttachmentError { mip_level: u32, depth_or_array_layer: u32, }, + #[error("Color attachment's usage contains {0:?}. This can only be used with StoreOp::{1:?}, but StoreOp::{2:?} was provided")] + InvalidUsageForStoreOp(TextureUsages, StoreOp, StoreOp), } impl WebGpuError for ColorAttachmentError { @@ -1585,6 +1587,18 @@ impl Global { let view = texture_views.get(*view_id).get()?; view.same_device(device)?; + if view.desc.usage.contains(TextureUsages::TRANSIENT) + && *store_op != StoreOp::Discard + { + return Err(RenderPassErrorInner::ColorAttachment( + ColorAttachmentError::InvalidUsageForStoreOp( + TextureUsages::TRANSIENT, + StoreOp::Discard, + *store_op, + ), + )); + } + let resolve_target = if let Some(resolve_target_id) = resolve_target { let rt_arc = texture_views.get(*resolve_target_id).get()?; rt_arc.same_device(device)?; diff --git a/third_party/rust/wgpu-core/src/conv.rs b/third_party/rust/wgpu-core/src/conv.rs @@ -124,6 +124,10 @@ pub fn map_texture_usage( wgt::TextureUses::STORAGE_ATOMIC, usage.contains(wgt::TextureUsages::STORAGE_ATOMIC), ); + u.set( + wgt::TextureUses::TRANSIENT, + usage.contains(wgt::TextureUsages::TRANSIENT), + ); u } @@ -183,6 +187,10 @@ pub fn map_texture_usage_from_hal(uses: wgt::TextureUses) -> wgt::TextureUsages wgt::TextureUsages::STORAGE_ATOMIC, uses.contains(wgt::TextureUses::STORAGE_ATOMIC), ); + u.set( + wgt::TextureUsages::TRANSIENT, + uses.contains(wgt::TextureUses::TRANSIENT), + ); u } diff --git a/third_party/rust/wgpu-core/src/device/bgl.rs b/third_party/rust/wgpu-core/src/device/bgl.rs @@ -63,19 +63,10 @@ impl EntryMap { /// Errors if there are duplicate bindings or if any binding index is greater than /// the device's limits. pub fn from_entries( - device_limits: &wgt::Limits, entries: &[wgt::BindGroupLayoutEntry], ) -> Result<Self, binding_model::CreateBindGroupLayoutError> { let mut inner = FastIndexMap::with_capacity_and_hasher(entries.len(), Default::default()); for entry in entries { - if entry.binding >= device_limits.max_bindings_per_bind_group { - return Err( - binding_model::CreateBindGroupLayoutError::InvalidBindingIndex { - binding: entry.binding, - maximum: device_limits.max_bindings_per_bind_group, - }, - ); - } if inner.insert(entry.binding, *entry).is_some() { return Err(binding_model::CreateBindGroupLayoutError::ConflictBinding( entry.binding, diff --git a/third_party/rust/wgpu-core/src/device/global.rs b/third_party/rust/wgpu-core/src/device/global.rs @@ -693,7 +693,7 @@ impl Global { break 'error e.into(); } - let entry_map = match bgl::EntryMap::from_entries(&device.limits, &desc.entries) { + let entry_map = match bgl::EntryMap::from_entries(&desc.entries) { Ok(map) => map, Err(e) => break 'error e, }; diff --git a/third_party/rust/wgpu-core/src/device/resource.rs b/third_party/rust/wgpu-core/src/device/resource.rs @@ -1274,6 +1274,22 @@ impl Device { } } + if desc.usage.contains(wgt::TextureUsages::TRANSIENT) { + if !desc.usage.contains(wgt::TextureUsages::RENDER_ATTACHMENT) { + return Err(CreateTextureError::InvalidUsage( + wgt::TextureUsages::TRANSIENT, + )); + } + let extra_usage = + desc.usage - wgt::TextureUsages::TRANSIENT - wgt::TextureUsages::RENDER_ATTACHMENT; + if !extra_usage.is_empty() { + return Err(CreateTextureError::IncompatibleUsage( + wgt::TextureUsages::TRANSIENT, + extra_usage, + )); + } + } + let format_features = self .describe_format_features(desc.format) .map_err(|error| CreateTextureError::MissingFeatures(desc.format, error))?; @@ -1651,7 +1667,8 @@ impl Device { let level_end = texture.desc.mip_level_count; if mip_level_end > level_end { return Err(resource::CreateTextureViewError::TooManyMipLevels { - requested: mip_level_end, + base_mip_level: desc.range.base_mip_level, + mip_level_count: resolved_mip_level_count, total: level_end, }); } @@ -1668,7 +1685,8 @@ impl Device { let layer_end = texture.desc.array_layer_count(); if array_layer_end > layer_end { return Err(resource::CreateTextureViewError::TooManyArrayLayers { - requested: array_layer_end, + base_array_layer: desc.range.base_array_layer, + array_layer_count: resolved_array_layer_count, total: layer_end, }); }; @@ -1951,9 +1969,9 @@ impl Device { }, ); } - if !matches!(desc.mipmap_filter, wgt::FilterMode::Linear) { + if !matches!(desc.mipmap_filter, wgt::MipmapFilterMode::Linear) { return Err( - resource::CreateSamplerError::InvalidFilterModeWithAnisotropy { + resource::CreateSamplerError::InvalidMipmapFilterModeWithAnisotropy { filter_type: resource::SamplerFilterErrorType::MipmapFilter, filter_mode: desc.mipmap_filter, anisotropic_clamp: desc.anisotropy_clamp, @@ -1999,7 +2017,7 @@ impl Device { comparison: desc.compare.is_some(), filtering: desc.min_filter == wgt::FilterMode::Linear || desc.mag_filter == wgt::FilterMode::Linear - || desc.mipmap_filter == wgt::FilterMode::Linear, + || desc.mipmap_filter == wgt::MipmapFilterMode::Linear, }; let sampler = Arc::new(sampler); @@ -2292,6 +2310,15 @@ impl Device { } for entry in entry_map.values() { + if entry.binding >= self.limits.max_bindings_per_bind_group { + return Err( + binding_model::CreateBindGroupLayoutError::InvalidBindingIndex { + binding: entry.binding, + maximum: self.limits.max_bindings_per_bind_group, + }, + ); + } + use wgt::BindingType as Bt; let mut required_features = wgt::Features::empty(); diff --git a/third_party/rust/wgpu-core/src/instance.rs b/third_party/rust/wgpu-core/src/instance.rs @@ -699,7 +699,7 @@ impl Adapter { ), ); allowed_usages.set( - wgt::TextureUsages::RENDER_ATTACHMENT, + wgt::TextureUsages::RENDER_ATTACHMENT | wgt::TextureUsages::TRANSIENT, caps.intersects(Tfc::COLOR_ATTACHMENT | Tfc::DEPTH_STENCIL_ATTACHMENT), ); allowed_usages.set( diff --git a/third_party/rust/wgpu-core/src/lock/observing.rs b/third_party/rust/wgpu-core/src/lock/observing.rs @@ -71,7 +71,7 @@ impl<T> Mutex<T> { } #[track_caller] - pub fn lock(&self) -> MutexGuard<T> { + pub fn lock(&self) -> MutexGuard<'_, T> { let saved = acquire(self.rank, Location::caller()); MutexGuard { inner: self.inner.lock(), @@ -146,7 +146,7 @@ impl<T> RwLock<T> { } #[track_caller] - pub fn read(&self) -> RwLockReadGuard<T> { + pub fn read(&self) -> RwLockReadGuard<'_, T> { let saved = acquire(self.rank, Location::caller()); RwLockReadGuard { inner: self.inner.read(), @@ -155,7 +155,7 @@ impl<T> RwLock<T> { } #[track_caller] - pub fn write(&self) -> RwLockWriteGuard<T> { + pub fn write(&self) -> RwLockWriteGuard<'_, T> { let saved = acquire(self.rank, Location::caller()); RwLockWriteGuard { inner: self.inner.write(), diff --git a/third_party/rust/wgpu-core/src/pipeline_cache.rs b/third_party/rust/wgpu-core/src/pipeline_cache.rs @@ -130,7 +130,7 @@ const ABI: u32 = size_of::<*const ()>() as u32; /// /// Note that wgpu does not protect against malicious writes to e.g. a file used /// to store a pipeline cache. -/// That is the resonsibility of the end application, such as by using a +/// That is the responsibility of the end application, such as by using a /// private space. const HASH_SPACE_VALUE: u64 = 0xFEDCBA9_876543210; @@ -322,6 +322,7 @@ mod tests { driver: String::new(), driver_info: String::new(), backend: wgt::Backend::Vulkan, + transient_saves_memory: true, }; // IMPORTANT: If these tests fail, then you MUST increment HEADER_VERSION diff --git a/third_party/rust/wgpu-core/src/resource.rs b/third_party/rust/wgpu-core/src/resource.rs @@ -1509,6 +1509,8 @@ pub enum CreateTextureError { CreateTextureView(#[from] CreateTextureViewError), #[error("Invalid usage flags {0:?}")] InvalidUsage(wgt::TextureUsages), + #[error("Texture usage {0:?} is not compatible with texture usage {1:?}")] + IncompatibleUsage(wgt::TextureUsages, wgt::TextureUsages), #[error(transparent)] InvalidDimension(#[from] TextureDimensionError), #[error("Depth texture ({1:?}) can't be created as {0:?}")] @@ -1564,6 +1566,7 @@ impl WebGpuError for CreateTextureError { Self::MissingDownlevelFlags(e) => e, Self::InvalidUsage(_) + | Self::IncompatibleUsage(_, _) | Self::InvalidDepthDimension(_, _) | Self::InvalidCompressedDimension(_, _) | Self::InvalidMipLevelCount { .. } @@ -1714,20 +1717,22 @@ pub enum CreateTextureViewError { view: wgt::TextureViewDimension, texture: wgt::TextureDimension, }, - #[error("Texture view format `{0:?}` is not renderable")] + #[error("Texture view format `{0:?}` cannot be used as a render attachment. Make sure the format supports RENDER_ATTACHMENT usage and required device features are enabled.")] TextureViewFormatNotRenderable(wgt::TextureFormat), - #[error("Texture view format `{0:?}` is not storage bindable")] + #[error("Texture view format `{0:?}` cannot be used as a storage binding. Make sure the format supports STORAGE usage and required device features are enabled.")] TextureViewFormatNotStorage(wgt::TextureFormat), - #[error("Invalid texture view usage `{view:?}` with texture of usage `{texture:?}`")] + #[error("Texture view usages (`{view:?}`) must be a subset of the texture's original usages (`{texture:?}`)")] InvalidTextureViewUsage { view: wgt::TextureUsages, texture: wgt::TextureUsages, }, - #[error("Invalid texture view dimension `{0:?}` of a multisampled texture")] + #[error("Texture view dimension `{0:?}` cannot be used with a multisampled texture")] InvalidMultisampledTextureViewDimension(wgt::TextureViewDimension), - #[error("Invalid texture depth `{depth}` for texture view of dimension `Cubemap`. Cubemap views must use images of size 6.")] + #[error( + "TextureView has an arrayLayerCount of {depth}. Views of type `Cube` must have arrayLayerCount of 6." + )] InvalidCubemapTextureDepth { depth: u32 }, - #[error("Invalid texture depth `{depth}` for texture view of dimension `CubemapArray`. Cubemap views must use images with sizes which are a multiple of 6.")] + #[error("TextureView has an arrayLayerCount of {depth}. Views of type `CubeArray` must have an arrayLayerCount that is a multiple of 6.")] InvalidCubemapArrayTextureDepth { depth: u32 }, #[error("Source texture width and height must be equal for a texture view of dimension `Cube`/`CubeArray`")] InvalidCubeTextureViewSize, @@ -1736,22 +1741,41 @@ pub enum CreateTextureViewError { #[error("Array layer count is 0")] ZeroArrayLayerCount, #[error( - "TextureView mip level count + base mip level {requested} must be <= Texture mip level count {total}" + "TextureView spans mip levels [{base_mip_level}, {end_mip_level}) \ + (mipLevelCount {mip_level_count}) but the texture view only has {total} total mip levels", + end_mip_level = base_mip_level + mip_level_count )] - TooManyMipLevels { requested: u32, total: u32 }, - #[error("TextureView array layer count + base array layer {requested} must be <= Texture depth/array layer count {total}")] - TooManyArrayLayers { requested: u32, total: u32 }, + TooManyMipLevels { + base_mip_level: u32, + mip_level_count: u32, + total: u32, + }, + #[error( + "TextureView spans array layers [{base_array_layer}, {end_array_layer}) \ + (arrayLayerCount {array_layer_count}) but the texture view only has {total} total layers", + end_array_layer = base_array_layer + array_layer_count + )] + TooManyArrayLayers { + base_array_layer: u32, + array_layer_count: u32, + total: u32, + }, #[error("Requested array layer count {requested} is not valid for the target view dimension {dim:?}")] InvalidArrayLayerCount { requested: u32, dim: wgt::TextureViewDimension, }, - #[error("Aspect {requested_aspect:?} is not in the source texture format {texture_format:?}")] + #[error( + "Aspect {requested_aspect:?} is not a valid aspect of the source texture format {texture_format:?}" + )] InvalidAspect { texture_format: wgt::TextureFormat, requested_aspect: wgt::TextureAspect, }, - #[error("Unable to view texture {texture:?} as {view:?}")] + #[error( + "Trying to create a view of format {view:?} of a texture with format {texture:?}, \ + but this view format is not present in the texture's viewFormat array" + )] FormatReinterpretation { texture: wgt::TextureFormat, view: wgt::TextureFormat, @@ -1908,7 +1932,7 @@ pub struct SamplerDescriptor<'a> { /// How to filter the texture when it needs to be minified (made smaller) pub min_filter: wgt::FilterMode, /// How to filter between mip map levels - pub mipmap_filter: wgt::FilterMode, + pub mipmap_filter: wgt::MipmapFilterMode, /// Minimum level of detail (i.e. mip level) to use pub lod_min_clamp: f32, /// Maximum level of detail (i.e. mip level) to use @@ -1989,6 +2013,12 @@ pub enum CreateSamplerError { filter_mode: wgt::FilterMode, anisotropic_clamp: u16, }, + #[error("Invalid filter mode for {filter_type:?}: {filter_mode:?}. When anistropic clamp is not 1 (it is {anisotropic_clamp}), all filter modes must be linear.")] + InvalidMipmapFilterModeWithAnisotropy { + filter_type: SamplerFilterErrorType, + filter_mode: wgt::MipmapFilterMode, + anisotropic_clamp: u16, + }, #[error(transparent)] MissingFeatures(#[from] MissingFeatures), } @@ -2008,7 +2038,8 @@ impl WebGpuError for CreateSamplerError { Self::InvalidLodMinClamp(_) | Self::InvalidLodMaxClamp { .. } | Self::InvalidAnisotropy(_) - | Self::InvalidFilterModeWithAnisotropy { .. } => return ErrorType::Validation, + | Self::InvalidFilterModeWithAnisotropy { .. } + | Self::InvalidMipmapFilterModeWithAnisotropy { .. } => return ErrorType::Validation, }; e.webgpu_error_type() } diff --git a/third_party/rust/wgpu-core/src/validation.rs b/third_party/rust/wgpu-core/src/validation.rs @@ -313,6 +313,14 @@ pub enum StageError { MultipleEntryPointsFound, #[error(transparent)] InvalidResource(#[from] InvalidResourceError), + #[error( + "Location[{location}] {var}'s index exceeds the `max_color_attachments` limit ({limit})" + )] + ColorAttachmentLocationTooLarge { + location: u32, + var: InterfaceVar, + limit: u32, + }, } impl WebGpuError for StageError { @@ -334,7 +342,8 @@ impl WebGpuError for StageError { | Self::TooManyVaryings { .. } | Self::MissingEntryPoint(..) | Self::NoEntryPointFound - | Self::MultipleEntryPointsFound => return ErrorType::Validation, + | Self::MultipleEntryPointsFound + | Self::ColorAttachmentLocationTooLarge { .. } => return ErrorType::Validation, }; e.webgpu_error_type() } @@ -1317,29 +1326,55 @@ impl Interface { } } - if shader_stage == naga::ShaderStage::Vertex { - for output in entry_point.outputs.iter() { - //TODO: count builtins towards the limit? - inter_stage_components += match *output { - Varying::Local { ref iv, .. } => iv.ty.dim.num_components(), - Varying::BuiltIn(_) => 0, - }; - - if let Some( - cmp @ wgt::CompareFunction::Equal | cmp @ wgt::CompareFunction::NotEqual, - ) = compare_function - { - if let Varying::BuiltIn(naga::BuiltIn::Position { invariant: false }) = *output + match shader_stage { + naga::ShaderStage::Vertex => { + for output in entry_point.outputs.iter() { + //TODO: count builtins towards the limit? + inter_stage_components += match *output { + Varying::Local { ref iv, .. } => iv.ty.dim.num_components(), + Varying::BuiltIn(_) => 0, + }; + + if let Some( + cmp @ wgt::CompareFunction::Equal | cmp @ wgt::CompareFunction::NotEqual, + ) = compare_function { - log::warn!( - "Vertex shader with entry point {entry_point_name} outputs a @builtin(position) without the @invariant \ - attribute and is used in a pipeline with {cmp:?}. On some machines, this can cause bad artifacting as {cmp:?} assumes \ - the values output from the vertex shader exactly match the value in the depth buffer. The @invariant attribute on the \ - @builtin(position) vertex output ensures that the exact same pixel depths are used every render." - ); + if let Varying::BuiltIn(naga::BuiltIn::Position { invariant: false }) = + *output + { + log::warn!( + concat!( + "Vertex shader with entry point {} outputs a ", + "@builtin(position) without the @invariant attribute and ", + "is used in a pipeline with {cmp:?}. On some machines, ", + "this can cause bad artifacting as {cmp:?} assumes the ", + "values output from the vertex shader exactly match the ", + "value in the depth buffer. The @invariant attribute on the ", + "@builtin(position) vertex output ensures that the exact ", + "same pixel depths are used every render." + ), + entry_point_name, + cmp = cmp + ); + } } } } + naga::ShaderStage::Fragment => { + for output in &entry_point.outputs { + let &Varying::Local { location, ref iv } = output else { + continue; + }; + if location >= self.limits.max_color_attachments { + return Err(StageError::ColorAttachmentLocationTooLarge { + location, + var: iv.clone(), + limit: self.limits.max_color_attachments, + }); + } + } + } + _ => (), } if inter_stage_components > self.limits.max_inter_stage_shader_components { @@ -1357,6 +1392,7 @@ impl Interface { Varying::BuiltIn(_) => None, }) .collect(); + Ok(outputs) } diff --git a/third_party/rust/wgpu-hal/.cargo-checksum.json b/third_party/rust/wgpu-hal/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"e237617065b309c62aa46857a2429372e306e200e70250060b80056c6685e437","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","README.md":"cf9e84804a635e4a8a9fefc596be9da6bf7354dde0d105e27d56a12cb20dd8e3","build.rs":"e720cf033fecfdc7e4f34010af2a86340c99b8aaabf69559d32391521e25de6c","examples/halmark/main.rs":"3dbc158d925da6ef4450b9a1d335cb0d748c5d71ef517f110701d73aea185454","examples/halmark/shader.wgsl":"26c256ec36d6f0e9a1647431ca772766bee4382d64eaa718ba7b488dcfb6bcca","examples/raw-gles.em.html":"70fbe68394a1a4522192de1dcfaf7d399f60d7bdf5de70b708f9bb0417427546","examples/raw-gles.rs":"5f4cfa893e99dfec559803bc513457793dcc549154c604385fb287f99a3ea675","examples/ray-traced-triangle/main.rs":"8cbfdf3e4cd29d23e2c9fd543a36976d849a7161670e094baeda390db9306b57","examples/ray-traced-triangle/shader.wgsl":"cc10caf92746724a71f6dd0dbc3a71e57b37c7d1d83278556805a535c0728a9d","src/auxil/dxgi/conv.rs":"3ca856c93916c0be714924ff077aa1f366be5557cc164210154d252e7e49fb77","src/auxil/dxgi/exception.rs":"7138831914a59dc7cbb71512068e9134144b9bc8f43312682edccb0b3ee24a48","src/auxil/dxgi/factory.rs":"81e479e550a09127384d8080e43d5f5bae8e8dda6082fe41a87bea8f872eb0f1","src/auxil/dxgi/mod.rs":"e6c5cc3b73bb97742135d6f35308c42f0822304764978fb8dabb0e848863352a","src/auxil/dxgi/name.rs":"ff942da0da1a497ee4d2be21604f7ba9fae963588105b3d1f63aae1a0c536e82","src/auxil/dxgi/result.rs":"e7a9dfb48d8ef8cbe58b28b1ace5caf7818ee50505ba3220bb0509e66ae469b7","src/auxil/dxgi/time.rs":"b6911800be3873cbe277b2534b3839c6f005f3d9a09341aace4752e207d584a2","src/auxil/mod.rs":"540b9250d9f0e0af709245ce1e284eaca15b27d47550b0ebba2a512da1666c48","src/auxil/renderdoc.rs":"94898f747476e269b2910d42e769f2bbb6be0cb466ad92f9d381f55799d2756e","src/dx12/adapter.rs":"9923abf84344c9ec2719ce4a0829bbc9b78307721b485bfd65c2912062037fe5","src/dx12/command.rs":"c1882f684b2e2bdb659ced0b5a1e353825c7b220998009d07dafdd1841af3ecf","src/dx12/conv.rs":"ef5fa91bbe8b044b7f7949452a04eefbf4b0d3a97f6d89665e021efae8568643","src/dx12/dcomp.rs":"53bde57557d80e571257f76933d66475a765e063d8b635675f9dd2563039a4c5","src/dx12/descriptor.rs":"ccd4feb6bd3e0a0ffc26142f8a81fca26180d0f50146b6eb2f670cbc89ea7064","src/dx12/device.rs":"435427d5377c3d298c0dcbad46fb390b13e4448e3e74f24863d6a546b8e57307","src/dx12/instance.rs":"75bddc3807756c691ede3ff944915e443a8bb2b5ac6d0d99babd4ed50d1e3fb9","src/dx12/mod.rs":"60076d7b4afc45418bb7b0b2952b7766aaf785670822628cb2bf9f1d9fe08cf1","src/dx12/sampler.rs":"d18d243efe4fa667dbab5b75b5b91d47de94d441976d9f44a46a2b49ba38473d","src/dx12/shader_compilation.rs":"c901a797c69e08c8c0ec93ea37c5f31084eb21c26c7d703d7031f987f2243509","src/dx12/suballocation.rs":"014e9ec4a94519b877ad3adc2ea5d182aa6cdf502248009d28dc5833a9edb93c","src/dx12/types.rs":"3fc7619fc09303eb3c936d4ded6889f94ce9e8b9aa62742ce900baa1b1e1cca7","src/dx12/view.rs":"79b3f7331d9795e60f9b53023cbf0df46c3a05b1e8bd5c7bcca8acdd235b124f","src/dynamic/adapter.rs":"e93f7d082a3950c9e8ccff8a631d251c7598b4b25dda9fe6347dadfa3ba07829","src/dynamic/command.rs":"9635dea15d8a885011d2b8b6b9cc5ffe2126cc3f141f47f7aaf46e1f201abea9","src/dynamic/device.rs":"f77c2406f2c42fed77fce29d731b490ac615dae2c5ddb9e01fee4f8ece1b3a34","src/dynamic/instance.rs":"7b515c201e1ca24f24439544dbfa1d19ea1412a4f89bd803e009aed13b021e55","src/dynamic/mod.rs":"2577d3aef6441f5b42b427d80ba3cf7fee2a97b2fc12335a1fba383e8a79a9b2","src/dynamic/queue.rs":"d76abb4797e90253386d24584f186dbe1909e772560156b2e891fa043cfefbdc","src/dynamic/surface.rs":"4328c2fe86931f50aa00ac3d6982d0879b774eebf7a507903d1b1898c891fb4d","src/gles/adapter.rs":"7cbe1b3dda180d0eee69af3474308175dfb964db071ec9779baf21ffd641f679","src/gles/command.rs":"c13d50eeb1a4aaab367a3b4a7fe6c25c8c73377e68d0d8cc43791d1a7202d23b","src/gles/conv.rs":"de1ad6c07d26e8f9f3be8a7a51bca212e92fd5449aaa85c6ad9c37b91afa6994","src/gles/device.rs":"745d94da0eff6f580425932983b9182e52437b7fa1443c92c5d63f3a14bebb5b","src/gles/egl.rs":"2a336cd6bf3cc6660677ac2621f903c9dd72a1cf484d41c7b69c341b809844c4","src/gles/emscripten.rs":"316d2bb6f2a4bb126dbe68a223f7393399080d116b61c39504454acdf4f9cfaf","src/gles/fence.rs":"a2e7b6abd2fd4a438de90b9f58452c64cd8bba83999c90fd6390e3db128b9c6c","src/gles/mod.rs":"24a29ca8f7a5c3c7601d74b3fd8a9d4b402e7b794b6fd70bda36acf5960ae828","src/gles/queue.rs":"5152f5698a2998a55125d13f04788b960726fd4b49ae4d2ec8f9642c8825c7fd","src/gles/shaders/clear.frag":"9133ed8ed97d3641fbb6b5f5ea894a3554c629ccc1b80a5fc9221d7293aa1954","src/gles/shaders/clear.vert":"a543768725f4121ff2e9e1fb5b00644931e9d6f2f946c0ef01968afb5a135abd","src/gles/shaders/srgb_present.frag":"dd9a43c339a2fa4ccf7f6a1854c6f400cabf271a7d5e9230768e9f39d47f3ff5","src/gles/shaders/srgb_present.vert":"6e85d489403d80b81cc94790730bb53b309dfc5eeede8f1ea3412a660f31d357","src/gles/web.rs":"cb5940bf7b2381811675011b640040274f407a7d1908d0f82c813d6a9d3b00f7","src/gles/wgl.rs":"ed0cee8844447b461ed5340f81eb55bb051ceaac67a5768985318ceac133cbe4","src/lib.rs":"b3f23ecd0152da354d91ef01af558b3ad65f0040bbdfd8574c297071d3c97445","src/metal/adapter.rs":"9184c7658efe5dd43224d23294ebd3fe98a19b0290c41703496de276dad5f996","src/metal/command.rs":"20bf613b67ccc043de6e8ad3f3d332bbb678cc06c1593cf1880083de090574ba","src/metal/conv.rs":"85e8168be334ba24d109575a0a7e91b2ad3459403173e99e5cdd5d977cc5c18f","src/metal/device.rs":"5ff22c78a8ef905a2c265818bdb63e522ec6622becc20f1eee01adf8f0a6f77f","src/metal/layer_observer.rs":"8370a6e443d01739b951b8538ee719a03b69fc0cbac92c748db418fbcc8837b5","src/metal/mod.rs":"82d7e8b96ba04fab5b42722574e9f081def9e50c92dcc7d554d8111b9d0aa2a1","src/metal/surface.rs":"22dc6da86ac74b044b6498764920f0467bb5060f4dffb156b6c1e260db0c48b7","src/metal/time.rs":"c32d69f30e846dfcc0e39e01097fb80df63b2bebb6586143bb62494999850246","src/noop/buffer.rs":"b5edc5e2c52287dfbd4f619e36097ac233041eb9ab287b889b6ee477d740fa09","src/noop/command.rs":"3de99a1a260cfea2e6ca2e76797c1923cc26b069b08362c38798ce27cdc75543","src/noop/mod.rs":"f658892b80640c2061b0028013c23041a1b12033a928a347a02e40aeb9e819a6","src/validation_canary.rs":"2e8f84e5f85671b3e55ddd410476171c762e34cbea315b37921cbb6ff18bfb4f","src/vulkan/adapter.rs":"0c973c328064c509e2c05cf7d72fff881aad3d75234aa6040f09869e986eec17","src/vulkan/command.rs":"22fd05428c141ce58000c8f3541d39195023ffdfb72c4b00379a5c50a3ecea82","src/vulkan/conv.rs":"b89788f8f89283a80ee99b2d4231c4fe2ad36906f8743f6e9e1eaa974edd4816","src/vulkan/device.rs":"3ad27857637708fff85c52f9270e4e87b30408030c48092b2744cf229aaea287","src/vulkan/drm.rs":"45f7bf1dd854688a65261e4674d80f90c997b193a162fd2ae658acf4e2003552","src/vulkan/instance.rs":"6740bc9ca240aa512509520d2b5a9cd2129330c413d94fce786b8301fa5f2202","src/vulkan/mod.rs":"bff4adbad402e7bdaabe69b20425e250a2c1117154dbc365c3a12f59bf9034e3","src/vulkan/sampler.rs":"f65729d6df5cce681b7756b3e48074017f0c7f42da69ca55e26cc723cd14ad59","src/vulkan/semaphore_list.rs":"102266d8e1b9f2ec1decf681bcc9e1a4cbff29533a258f2699fb6c573c434771"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"3bb12274c64bd1630ac6a7743a9d520f7fa1815de18119ce564eac6f09628dae","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","README.md":"cf9e84804a635e4a8a9fefc596be9da6bf7354dde0d105e27d56a12cb20dd8e3","build.rs":"e720cf033fecfdc7e4f34010af2a86340c99b8aaabf69559d32391521e25de6c","examples/halmark/main.rs":"4861eedb91ca024ede5b18e6db5a861b03f21108de9566bcc4d71bb5720df62a","examples/halmark/shader.wgsl":"26c256ec36d6f0e9a1647431ca772766bee4382d64eaa718ba7b488dcfb6bcca","examples/raw-gles.em.html":"70fbe68394a1a4522192de1dcfaf7d399f60d7bdf5de70b708f9bb0417427546","examples/raw-gles.rs":"5f4cfa893e99dfec559803bc513457793dcc549154c604385fb287f99a3ea675","examples/ray-traced-triangle/main.rs":"8cbfdf3e4cd29d23e2c9fd543a36976d849a7161670e094baeda390db9306b57","examples/ray-traced-triangle/shader.wgsl":"cc10caf92746724a71f6dd0dbc3a71e57b37c7d1d83278556805a535c0728a9d","src/auxil/dxgi/conv.rs":"3ca856c93916c0be714924ff077aa1f366be5557cc164210154d252e7e49fb77","src/auxil/dxgi/exception.rs":"7138831914a59dc7cbb71512068e9134144b9bc8f43312682edccb0b3ee24a48","src/auxil/dxgi/factory.rs":"81e479e550a09127384d8080e43d5f5bae8e8dda6082fe41a87bea8f872eb0f1","src/auxil/dxgi/mod.rs":"e6c5cc3b73bb97742135d6f35308c42f0822304764978fb8dabb0e848863352a","src/auxil/dxgi/name.rs":"ff942da0da1a497ee4d2be21604f7ba9fae963588105b3d1f63aae1a0c536e82","src/auxil/dxgi/result.rs":"e7a9dfb48d8ef8cbe58b28b1ace5caf7818ee50505ba3220bb0509e66ae469b7","src/auxil/dxgi/time.rs":"b6911800be3873cbe277b2534b3839c6f005f3d9a09341aace4752e207d584a2","src/auxil/mod.rs":"540b9250d9f0e0af709245ce1e284eaca15b27d47550b0ebba2a512da1666c48","src/auxil/renderdoc.rs":"94898f747476e269b2910d42e769f2bbb6be0cb466ad92f9d381f55799d2756e","src/dx12/adapter.rs":"cb365ea13f2ef8ed19d0f9724058be365adacf8d7b42d84909566442edf81a12","src/dx12/command.rs":"9aa909aaa12ab9bf09e73f26b7197eee620fe6e9b742b3df90dc352e612d874d","src/dx12/conv.rs":"a320fca45fd1990762ff10dad1d8bbb29833d9b693b0887bf2898021a737612c","src/dx12/dcomp.rs":"53bde57557d80e571257f76933d66475a765e063d8b635675f9dd2563039a4c5","src/dx12/descriptor.rs":"ccd4feb6bd3e0a0ffc26142f8a81fca26180d0f50146b6eb2f670cbc89ea7064","src/dx12/device.rs":"592d9336e807e5bbafe204923e6546547160eb660ade038f5707cbd3cb9306fe","src/dx12/instance.rs":"75bddc3807756c691ede3ff944915e443a8bb2b5ac6d0d99babd4ed50d1e3fb9","src/dx12/mod.rs":"592a110924259e8754a919bfbc3efda1292f7416a447d585fe56fe910e6225d0","src/dx12/sampler.rs":"d18d243efe4fa667dbab5b75b5b91d47de94d441976d9f44a46a2b49ba38473d","src/dx12/shader_compilation.rs":"c901a797c69e08c8c0ec93ea37c5f31084eb21c26c7d703d7031f987f2243509","src/dx12/suballocation.rs":"014e9ec4a94519b877ad3adc2ea5d182aa6cdf502248009d28dc5833a9edb93c","src/dx12/types.rs":"3fc7619fc09303eb3c936d4ded6889f94ce9e8b9aa62742ce900baa1b1e1cca7","src/dx12/view.rs":"79b3f7331d9795e60f9b53023cbf0df46c3a05b1e8bd5c7bcca8acdd235b124f","src/dynamic/adapter.rs":"e93f7d082a3950c9e8ccff8a631d251c7598b4b25dda9fe6347dadfa3ba07829","src/dynamic/command.rs":"9635dea15d8a885011d2b8b6b9cc5ffe2126cc3f141f47f7aaf46e1f201abea9","src/dynamic/device.rs":"f77c2406f2c42fed77fce29d731b490ac615dae2c5ddb9e01fee4f8ece1b3a34","src/dynamic/instance.rs":"7b515c201e1ca24f24439544dbfa1d19ea1412a4f89bd803e009aed13b021e55","src/dynamic/mod.rs":"2577d3aef6441f5b42b427d80ba3cf7fee2a97b2fc12335a1fba383e8a79a9b2","src/dynamic/queue.rs":"d76abb4797e90253386d24584f186dbe1909e772560156b2e891fa043cfefbdc","src/dynamic/surface.rs":"4328c2fe86931f50aa00ac3d6982d0879b774eebf7a507903d1b1898c891fb4d","src/gles/adapter.rs":"1508d5a6eb1d616e085613c6136b97841b64a12b1a4fc4ccf07fd5bf113cbe2e","src/gles/command.rs":"c13d50eeb1a4aaab367a3b4a7fe6c25c8c73377e68d0d8cc43791d1a7202d23b","src/gles/conv.rs":"6ffb8688de38c2fdd956571dd549535259e2811225adc1df02509e8e642ee775","src/gles/device.rs":"7a8679a4e990bb237cab961b0a2dbdbf5414c57b943048f63f7ddb189932db58","src/gles/egl.rs":"2509e5a5c422e213a3050d852d70a13dfc06737c829a8fc169f45791d8e27fed","src/gles/emscripten.rs":"316d2bb6f2a4bb126dbe68a223f7393399080d116b61c39504454acdf4f9cfaf","src/gles/fence.rs":"a2e7b6abd2fd4a438de90b9f58452c64cd8bba83999c90fd6390e3db128b9c6c","src/gles/mod.rs":"b6d80623eaf58719bafac26875fd0f75f8546b02c58b96a75d703e3a350e31df","src/gles/queue.rs":"5152f5698a2998a55125d13f04788b960726fd4b49ae4d2ec8f9642c8825c7fd","src/gles/shaders/clear.frag":"9133ed8ed97d3641fbb6b5f5ea894a3554c629ccc1b80a5fc9221d7293aa1954","src/gles/shaders/clear.vert":"a543768725f4121ff2e9e1fb5b00644931e9d6f2f946c0ef01968afb5a135abd","src/gles/shaders/srgb_present.frag":"dd9a43c339a2fa4ccf7f6a1854c6f400cabf271a7d5e9230768e9f39d47f3ff5","src/gles/shaders/srgb_present.vert":"6e85d489403d80b81cc94790730bb53b309dfc5eeede8f1ea3412a660f31d357","src/gles/web.rs":"cb5940bf7b2381811675011b640040274f407a7d1908d0f82c813d6a9d3b00f7","src/gles/wgl.rs":"ed0cee8844447b461ed5340f81eb55bb051ceaac67a5768985318ceac133cbe4","src/lib.rs":"b5354488fbffb0ae575700c8f4addec0d8466a402df4eb4ab338a41aae9b683b","src/metal/adapter.rs":"75ddf04c2005238d69e4eed5ac86ea43644089eccf23b39a77ab94753e85f61c","src/metal/command.rs":"20bf613b67ccc043de6e8ad3f3d332bbb678cc06c1593cf1880083de090574ba","src/metal/conv.rs":"85e8168be334ba24d109575a0a7e91b2ad3459403173e99e5cdd5d977cc5c18f","src/metal/device.rs":"a293d260b5618b8b8fcb0137c51302989a7982f3db06ca051b5fe898266776f7","src/metal/layer_observer.rs":"8370a6e443d01739b951b8538ee719a03b69fc0cbac92c748db418fbcc8837b5","src/metal/mod.rs":"e30c545106732670d9733090d4de543021b38638cf0ee89ba2ba9d8246ea218a","src/metal/surface.rs":"22dc6da86ac74b044b6498764920f0467bb5060f4dffb156b6c1e260db0c48b7","src/metal/time.rs":"c32d69f30e846dfcc0e39e01097fb80df63b2bebb6586143bb62494999850246","src/noop/buffer.rs":"b5edc5e2c52287dfbd4f619e36097ac233041eb9ab287b889b6ee477d740fa09","src/noop/command.rs":"3de99a1a260cfea2e6ca2e76797c1923cc26b069b08362c38798ce27cdc75543","src/noop/mod.rs":"47b663d15f1ceb6d77a16e91549bc9634dfd2cfaf58c9b945639fb36c364f77e","src/validation_canary.rs":"2e8f84e5f85671b3e55ddd410476171c762e34cbea315b37921cbb6ff18bfb4f","src/vulkan/adapter.rs":"6a3de2f25d3e8397b30d6de15db4c9e92b18181eb33f31bf520a4c12fd1cc355","src/vulkan/command.rs":"22fd05428c141ce58000c8f3541d39195023ffdfb72c4b00379a5c50a3ecea82","src/vulkan/conv.rs":"03eb28b81d3e41ccfcb2b3f7f029cd671ccdf9556594c6d8b6cc2b22144ec4f2","src/vulkan/device.rs":"5c8072544acbfe1aae3e43ec2dd7e941f0bde32da621b3e3ba68ffebb5b3c285","src/vulkan/drm.rs":"45f7bf1dd854688a65261e4674d80f90c997b193a162fd2ae658acf4e2003552","src/vulkan/instance.rs":"6740bc9ca240aa512509520d2b5a9cd2129330c413d94fce786b8301fa5f2202","src/vulkan/mod.rs":"8dd3e851374d876a51e683fbcb621d1f191e360197e4dde4b0b47f83b3632c5b","src/vulkan/sampler.rs":"f65729d6df5cce681b7756b3e48074017f0c7f42da69ca55e26cc723cd14ad59","src/vulkan/semaphore_list.rs":"102266d8e1b9f2ec1decf681bcc9e1a4cbff29533a258f2699fb6c573c434771"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/wgpu-hal/Cargo.toml b/third_party/rust/wgpu-hal/Cargo.toml @@ -49,7 +49,6 @@ targets = [ ] [features] -cargo-clippy = [] device_lost_panic = [] dx12 = [ "naga/hlsl-out", @@ -65,7 +64,7 @@ dx12 = [ "dep:profiling", "dep:range-alloc", "dep:windows-core", - "gpu-allocator/d3d12", + "dep:gpu-allocator", "windows/Win32_Graphics_Direct3D_Fxc", "windows/Win32_Graphics_Direct3D_Dxc", "windows/Win32_Graphics_Direct3D", @@ -224,11 +223,6 @@ default-features = false version = "0.6.2" default-features = false -[dependencies.rustc-hash] -version = "1.1" -optional = true -default-features = false - [dependencies.thiserror] version = "2.0.12" default-features = false @@ -408,6 +402,7 @@ optional = true [target."cfg(windows)".dependencies.gpu-allocator] version = "0.27" +features = ["d3d12"] optional = true default-features = false @@ -433,4 +428,7 @@ default-features = false [lints.rust.unexpected_cfgs] level = "warn" priority = 0 -check-cfg = ["cfg(web_sys_unstable_apis)"] +check-cfg = [ + 'cfg(feature, values("cargo-clippy"))', + "cfg(web_sys_unstable_apis)", +] diff --git a/third_party/rust/wgpu-hal/examples/halmark/main.rs b/third_party/rust/wgpu-hal/examples/halmark/main.rs @@ -385,7 +385,7 @@ impl<A: hal::Api> Example<A> { address_modes: [wgpu_types::AddressMode::ClampToEdge; 3], mag_filter: wgpu_types::FilterMode::Linear, min_filter: wgpu_types::FilterMode::Nearest, - mipmap_filter: wgpu_types::FilterMode::Nearest, + mipmap_filter: wgpu_types::MipmapFilterMode::Nearest, lod_clamp: 0.0..32.0, compare: None, anisotropy_clamp: 1, diff --git a/third_party/rust/wgpu-hal/src/dx12/adapter.rs b/third_party/rust/wgpu-hal/src/dx12/adapter.rs @@ -142,6 +142,7 @@ impl super::Adapter { } }, driver_info: String::new(), + transient_saves_memory: false, }; let mut options = Direct3D12::D3D12_FEATURE_DATA_D3D12_OPTIONS::default(); @@ -200,6 +201,21 @@ impl super::Adapter { .is_ok() }; + let unrestricted_buffer_texture_copy_pitch_supported = { + let mut features13 = Direct3D12::D3D12_FEATURE_DATA_D3D12_OPTIONS13::default(); + unsafe { + device.CheckFeatureSupport( + Direct3D12::D3D12_FEATURE_D3D12_OPTIONS13, + <*mut _>::cast(&mut features13), + size_of_val(&features13) as u32, + ) + } + .is_ok() + && features13 + .UnrestrictedBufferTextureCopyPitchSupported + .as_bool() + }; + let mut max_sampler_descriptor_heap_size = Direct3D12::D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE; { @@ -304,6 +320,7 @@ impl super::Adapter { suballocation_supported: !info.name.contains("Iris(R) Xe"), shader_model, max_sampler_descriptor_heap_size, + unrestricted_buffer_texture_copy_pitch_supported, }; // Theoretically vram limited, but in practice 2^20 is the limit diff --git a/third_party/rust/wgpu-hal/src/dx12/command.rs b/third_party/rust/wgpu-hal/src/dx12/command.rs @@ -14,7 +14,7 @@ use crate::{ dxgi::{name::ObjectExt, result::HResult as _}, }, dx12::borrow_interface_temporarily, - AccelerationStructureEntries, + AccelerationStructureEntries, CommandEncoder as _, }; fn make_box(origin: &wgt::Origin3d, size: &crate::CopyExtent) -> Direct3D12::D3D12_BOX { @@ -312,6 +312,78 @@ impl super::CommandEncoder { } } } + + unsafe fn buf_tex_intermediate<T>( + &mut self, + region: crate::BufferTextureCopy, + tex_fmt: wgt::TextureFormat, + copy_op: impl FnOnce(&mut Self, &super::Buffer, wgt::BufferSize, crate::BufferTextureCopy) -> T, + ) -> (T, super::Buffer) { + let size = { + let copy_info = region.buffer_layout.get_buffer_texture_copy_info( + tex_fmt, + region.texture_base.aspect.map(), + ®ion.size.into(), + ); + copy_info.unwrap().bytes_in_copy + }; + + let size = wgt::BufferSize::new(size).unwrap(); + + let buffer = { + let (resource, allocation) = + super::suballocation::DeviceAllocationContext::from(&*self) + .create_buffer(&crate::BufferDescriptor { + label: None, + size: size.get(), + usage: wgt::BufferUses::COPY_SRC | wgt::BufferUses::COPY_DST, + memory_flags: crate::MemoryFlags::empty(), + }) + .expect(concat!( + "internal error: ", + "failed to allocate intermediate buffer ", + "for offset alignment" + )); + super::Buffer { + resource, + size: size.get(), + allocation, + } + }; + + let mut region = region; + region.buffer_layout.offset = 0; + + unsafe { + self.transition_buffers( + [crate::BufferBarrier { + buffer: &buffer, + usage: crate::StateTransition { + from: wgt::BufferUses::empty(), + to: wgt::BufferUses::COPY_DST, + }, + }] + .into_iter(), + ) + }; + + let t = copy_op(self, &buffer, size, region); + + unsafe { + self.transition_buffers( + [crate::BufferBarrier { + buffer: &buffer, + usage: crate::StateTransition { + from: wgt::BufferUses::COPY_DST, + to: wgt::BufferUses::COPY_SRC, + }, + }] + .into_iter(), + ) + }; + + (t, buffer) + } } impl crate::CommandEncoder for super::CommandEncoder { @@ -366,6 +438,7 @@ impl crate::CommandEncoder for super::CommandEncoder { Ok(super::CommandBuffer { raw }) } unsafe fn reset_all<I: Iterator<Item = super::CommandBuffer>>(&mut self, command_buffers: I) { + self.intermediate_copy_bufs.clear(); for cmd_buf in command_buffers { self.free_lists.push(cmd_buf.raw); } @@ -612,30 +685,59 @@ impl crate::CommandEncoder for super::CommandEncoder { ) where T: Iterator<Item = crate::BufferTextureCopy>, { - let list = self.list.as_ref().unwrap(); - for r in regions { + let offset_alignment = self.shared.private_caps.texture_data_placement_alignment(); + + for naive_copy_region in regions { + let is_offset_aligned = naive_copy_region.buffer_layout.offset % offset_alignment == 0; + let (final_copy_region, src) = if is_offset_aligned { + (naive_copy_region, src) + } else { + let (intermediate_to_dst_region, intermediate_buf) = unsafe { + let src_offset = naive_copy_region.buffer_layout.offset; + self.buf_tex_intermediate( + naive_copy_region, + dst.format, + |this, buf, size, intermediate_to_dst_region| { + let layout = crate::BufferCopy { + src_offset, + dst_offset: 0, + size, + }; + this.copy_buffer_to_buffer(src, buf, [layout].into_iter()); + intermediate_to_dst_region + }, + ) + }; + self.intermediate_copy_bufs.push(intermediate_buf); + let intermediate_buf = self.intermediate_copy_bufs.last().unwrap(); + (intermediate_to_dst_region, intermediate_buf) + }; + + let list = self.list.as_ref().unwrap(); + let src_location = Direct3D12::D3D12_TEXTURE_COPY_LOCATION { pResource: unsafe { borrow_interface_temporarily(&src.resource) }, Type: Direct3D12::D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT, Anonymous: Direct3D12::D3D12_TEXTURE_COPY_LOCATION_0 { - PlacedFootprint: r.to_subresource_footprint(dst.format), + PlacedFootprint: final_copy_region.to_subresource_footprint(dst.format), }, }; let dst_location = Direct3D12::D3D12_TEXTURE_COPY_LOCATION { pResource: unsafe { borrow_interface_temporarily(&dst.resource) }, Type: Direct3D12::D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, Anonymous: Direct3D12::D3D12_TEXTURE_COPY_LOCATION_0 { - SubresourceIndex: dst.calc_subresource_for_copy(&r.texture_base), + SubresourceIndex: dst + .calc_subresource_for_copy(&final_copy_region.texture_base), }, }; - let src_box = make_box(&wgt::Origin3d::ZERO, &r.size); + let src_box = make_box(&wgt::Origin3d::ZERO, &final_copy_region.size); unsafe { list.CopyTextureRegion( &dst_location, - r.texture_base.origin.x, - r.texture_base.origin.y, - r.texture_base.origin.z, + final_copy_region.texture_base.origin.x, + final_copy_region.texture_base.origin.y, + final_copy_region.texture_base.origin.z, &src_location, Some(&src_box), ) @@ -652,8 +754,12 @@ impl crate::CommandEncoder for super::CommandEncoder { ) where T: Iterator<Item = crate::BufferTextureCopy>, { - let list = self.list.as_ref().unwrap(); - for r in regions { + let copy_aligned = |this: &mut Self, + src: &super::Texture, + dst: &super::Buffer, + r: crate::BufferTextureCopy| { + let list = this.list.as_ref().unwrap(); + let src_location = Direct3D12::D3D12_TEXTURE_COPY_LOCATION { pResource: unsafe { borrow_interface_temporarily(&src.resource) }, Type: Direct3D12::D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, @@ -673,6 +779,37 @@ impl crate::CommandEncoder for super::CommandEncoder { unsafe { list.CopyTextureRegion(&dst_location, 0, 0, 0, &src_location, Some(&src_box)) }; + }; + + let offset_alignment = self.shared.private_caps.texture_data_placement_alignment(); + + for r in regions { + let is_offset_aligned = r.buffer_layout.offset % offset_alignment == 0; + if is_offset_aligned { + copy_aligned(self, src, dst, r) + } else { + let orig_offset = r.buffer_layout.offset; + let (intermediate_to_dst_region, src) = unsafe { + self.buf_tex_intermediate( + r, + src.format, + |this, buf, size, intermediate_region| { + copy_aligned(this, src, buf, intermediate_region); + crate::BufferCopy { + src_offset: 0, + dst_offset: orig_offset, + size, + } + }, + ) + }; + + unsafe { + self.copy_buffer_to_buffer(&src, dst, [intermediate_to_dst_region].into_iter()); + } + + self.intermediate_copy_bufs.push(src); + }; } } @@ -920,7 +1057,7 @@ impl crate::CommandEncoder for super::CommandEncoder { Flags: Direct3D12::D3D12_RESOURCE_BARRIER_FLAG_NONE, Anonymous: Direct3D12::D3D12_RESOURCE_BARRIER_0 { // Note: this assumes `D3D12_RESOURCE_STATE_RENDER_TARGET`. - // If it's not the case, we can include the `TextureUses` in `PassResove`. + // If it's not the case, we can include the `TextureUses` in `PassResolve`. Transition: mem::ManuallyDrop::new( Direct3D12::D3D12_RESOURCE_TRANSITION_BARRIER { pResource: unsafe { borrow_interface_temporarily(&resolve.src.0) }, diff --git a/third_party/rust/wgpu-hal/src/dx12/conv.rs b/third_party/rust/wgpu-hal/src/dx12/conv.rs @@ -85,6 +85,13 @@ pub fn map_filter_mode(mode: wgt::FilterMode) -> Direct3D12::D3D12_FILTER_TYPE { } } +pub fn map_mipmap_filter_mode(mode: wgt::MipmapFilterMode) -> Direct3D12::D3D12_FILTER_TYPE { + match mode { + wgt::MipmapFilterMode::Nearest => Direct3D12::D3D12_FILTER_TYPE_POINT, + wgt::MipmapFilterMode::Linear => Direct3D12::D3D12_FILTER_TYPE_LINEAR, + } +} + pub fn map_comparison(func: wgt::CompareFunction) -> Direct3D12::D3D12_COMPARISON_FUNC { use wgt::CompareFunction as Cf; match func { diff --git a/third_party/rust/wgpu-hal/src/dx12/device.rs b/third_party/rust/wgpu-hal/src/dx12/device.rs @@ -726,7 +726,7 @@ impl crate::Device for super::Device { let mut filter = Direct3D12::D3D12_FILTER( (conv::map_filter_mode(desc.min_filter).0 << Direct3D12::D3D12_MIN_FILTER_SHIFT) | (conv::map_filter_mode(desc.mag_filter).0 << Direct3D12::D3D12_MAG_FILTER_SHIFT) - | (conv::map_filter_mode(desc.mipmap_filter).0 + | (conv::map_mipmap_filter_mode(desc.mipmap_filter).0 << Direct3D12::D3D12_MIP_FILTER_SHIFT) | (reduction.0 << Direct3D12::D3D12_FILTER_REDUCTION_TYPE_SHIFT), ); @@ -796,6 +796,7 @@ impl crate::Device for super::Device { mem_allocator: self.mem_allocator.clone(), rtv_pool: Arc::clone(&self.rtv_pool), temp_rtv_handles: Vec::new(), + intermediate_copy_bufs: Vec::new(), null_rtv_handle: self.null_rtv_handle, list: None, free_lists: Vec::new(), diff --git a/third_party/rust/wgpu-hal/src/dx12/mod.rs b/third_party/rust/wgpu-hal/src/dx12/mod.rs @@ -96,7 +96,11 @@ use windows::{ core::{Free, Interface}, Win32::{ Foundation, - Graphics::{Direct3D, Direct3D12, DirectComposition, Dxgi}, + Graphics::{ + Direct3D, + Direct3D12::{self, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT}, + DirectComposition, Dxgi, + }, System::Threading, }, }; @@ -601,6 +605,17 @@ struct PrivateCapabilities { suballocation_supported: bool, shader_model: naga::back::hlsl::ShaderModel, max_sampler_descriptor_heap_size: u32, + unrestricted_buffer_texture_copy_pitch_supported: bool, +} + +impl PrivateCapabilities { + fn texture_data_placement_alignment(&self) -> u64 { + if self.unrestricted_buffer_texture_copy_pitch_supported { + 4 + } else { + D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT.into() + } + } } #[derive(Default)] @@ -840,6 +855,8 @@ pub struct CommandEncoder { rtv_pool: Arc<Mutex<descriptor::CpuPool>>, temp_rtv_handles: Vec<descriptor::Handle>, + intermediate_copy_bufs: Vec<Buffer>, + null_rtv_handle: descriptor::Handle, list: Option<Direct3D12::ID3D12GraphicsCommandList>, free_lists: Vec<Direct3D12::ID3D12GraphicsCommandList>, diff --git a/third_party/rust/wgpu-hal/src/gles/adapter.rs b/third_party/rust/wgpu-hal/src/gles/adapter.rs @@ -189,6 +189,7 @@ impl super::Adapter { driver: "".to_owned(), driver_info: version, backend: wgt::Backend::Gl, + transient_saves_memory: false, } } diff --git a/third_party/rust/wgpu-hal/src/gles/conv.rs b/third_party/rust/wgpu-hal/src/gles/conv.rs @@ -238,9 +238,10 @@ pub(super) fn describe_vertex_format(vertex_format: wgt::VertexFormat) -> super: pub fn map_filter_modes( min: wgt::FilterMode, mag: wgt::FilterMode, - mip: wgt::FilterMode, + mip: wgt::MipmapFilterMode, ) -> (u32, u32) { use wgt::FilterMode as Fm; + use wgt::MipmapFilterMode as Mfm; let mag_filter = match mag { Fm::Nearest => glow::NEAREST, @@ -248,10 +249,10 @@ pub fn map_filter_modes( }; let min_filter = match (min, mip) { - (Fm::Nearest, Fm::Nearest) => glow::NEAREST_MIPMAP_NEAREST, - (Fm::Nearest, Fm::Linear) => glow::NEAREST_MIPMAP_LINEAR, - (Fm::Linear, Fm::Nearest) => glow::LINEAR_MIPMAP_NEAREST, - (Fm::Linear, Fm::Linear) => glow::LINEAR_MIPMAP_LINEAR, + (Fm::Nearest, Mfm::Nearest) => glow::NEAREST_MIPMAP_NEAREST, + (Fm::Nearest, Mfm::Linear) => glow::NEAREST_MIPMAP_LINEAR, + (Fm::Linear, Mfm::Nearest) => glow::LINEAR_MIPMAP_NEAREST, + (Fm::Linear, Mfm::Linear) => glow::LINEAR_MIPMAP_LINEAR, }; (min_filter, mag_filter) diff --git a/third_party/rust/wgpu-hal/src/gles/device.rs b/third_party/rust/wgpu-hal/src/gles/device.rs @@ -734,7 +734,8 @@ impl crate::Device for super::Device { let render_usage = wgt::TextureUses::COLOR_TARGET | wgt::TextureUses::DEPTH_STENCIL_WRITE - | wgt::TextureUses::DEPTH_STENCIL_READ; + | wgt::TextureUses::DEPTH_STENCIL_READ + | wgt::TextureUses::TRANSIENT; let format_desc = self.shared.describe_texture_format(desc.format); let inner = if render_usage.contains(desc.usage) diff --git a/third_party/rust/wgpu-hal/src/gles/egl.rs b/third_party/rust/wgpu-hal/src/gles/egl.rs @@ -422,7 +422,7 @@ impl AdapterContext { /// /// > **Note:** Calling this function **will** still lock the [`glow::Context`] which adds an /// > extra safe-guard against accidental concurrent access to the context. - pub unsafe fn get_without_egl_lock(&self) -> MappedMutexGuard<glow::Context> { + pub unsafe fn get_without_egl_lock(&self) -> MappedMutexGuard<'_, glow::Context> { let guard = self .glow .try_lock_for(Duration::from_secs(CONTEXT_LOCK_TIMEOUT_SECS)) diff --git a/third_party/rust/wgpu-hal/src/gles/mod.rs b/third_party/rust/wgpu-hal/src/gles/mod.rs @@ -408,13 +408,16 @@ impl TextureInner { #[derive(Debug)] pub struct Texture { pub inner: TextureInner, - pub drop_guard: Option<crate::DropGuard>, pub mip_level_count: u32, pub array_layer_count: u32, pub format: wgt::TextureFormat, #[allow(unused)] pub format_desc: TextureFormatDesc, pub copy_size: CopyExtent, + + // The `drop_guard` field must be the last field of this struct so it is dropped last. + // Do not add new fields after it. + pub drop_guard: Option<crate::DropGuard>, } impl crate::DynTexture for Texture {} diff --git a/third_party/rust/wgpu-hal/src/lib.rs b/third_party/rust/wgpu-hal/src/lib.rs @@ -1948,7 +1948,7 @@ pub struct SamplerDescriptor<'a> { pub address_modes: [wgt::AddressMode; 3], pub mag_filter: wgt::FilterMode, pub min_filter: wgt::FilterMode, - pub mipmap_filter: wgt::FilterMode, + pub mipmap_filter: wgt::MipmapFilterMode, pub lod_clamp: Range<f32>, pub compare: Option<wgt::CompareFunction>, // Must in the range [1, 16]. @@ -2438,6 +2438,36 @@ pub struct CopyExtent { pub depth: u32, } +impl From<wgt::Extent3d> for CopyExtent { + fn from(value: wgt::Extent3d) -> Self { + let wgt::Extent3d { + width, + height, + depth_or_array_layers, + } = value; + Self { + width, + height, + depth: depth_or_array_layers, + } + } +} + +impl From<CopyExtent> for wgt::Extent3d { + fn from(value: CopyExtent) -> Self { + let CopyExtent { + width, + height, + depth, + } = value; + Self { + width, + height, + depth_or_array_layers: depth, + } + } +} + #[derive(Clone, Debug)] pub struct TextureCopy { pub src_base: TextureCopyBase, diff --git a/third_party/rust/wgpu-hal/src/metal/adapter.rs b/third_party/rust/wgpu-hal/src/metal/adapter.rs @@ -902,6 +902,12 @@ impl super::PrivateCapabilities { && (device.supports_family(MTLGPUFamily::Apple7) || device.supports_family(MTLGPUFamily::Mac2)), supports_shared_event: version.at_least((10, 14), (12, 0), os_is_mac), + // https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf#page=3 + supports_memoryless_storage: if family_check { + device.supports_family(MTLGPUFamily::Apple2) + } else { + version.at_least((11, 0), (10, 0), os_is_mac) + }, } } diff --git a/third_party/rust/wgpu-hal/src/metal/device.rs b/third_party/rust/wgpu-hal/src/metal/device.rs @@ -452,13 +452,21 @@ impl crate::Device for super::Device { } }; + let mtl_storage_mode = if desc.usage.contains(wgt::TextureUses::TRANSIENT) + && self.shared.private_caps.supports_memoryless_storage + { + MTLStorageMode::Memoryless + } else { + MTLStorageMode::Private + }; + descriptor.set_texture_type(mtl_type); descriptor.set_width(desc.size.width as u64); descriptor.set_height(desc.size.height as u64); descriptor.set_mipmap_level_count(desc.mip_level_count as u64); descriptor.set_pixel_format(mtl_format); descriptor.set_usage(conv::map_texture_usage(desc.format, desc.usage)); - descriptor.set_storage_mode(MTLStorageMode::Private); + descriptor.set_storage_mode(mtl_storage_mode); let raw = self.shared.device.lock().new_texture(&descriptor); if raw.as_ptr().is_null() { @@ -566,11 +574,11 @@ impl crate::Device for super::Device { descriptor.set_min_filter(conv::map_filter_mode(desc.min_filter)); descriptor.set_mag_filter(conv::map_filter_mode(desc.mag_filter)); descriptor.set_mip_filter(match desc.mipmap_filter { - wgt::FilterMode::Nearest if desc.lod_clamp == (0.0..0.0) => { + wgt::MipmapFilterMode::Nearest if desc.lod_clamp == (0.0..0.0) => { MTLSamplerMipFilter::NotMipmapped } - wgt::FilterMode::Nearest => MTLSamplerMipFilter::Nearest, - wgt::FilterMode::Linear => MTLSamplerMipFilter::Linear, + wgt::MipmapFilterMode::Nearest => MTLSamplerMipFilter::Nearest, + wgt::MipmapFilterMode::Linear => MTLSamplerMipFilter::Linear, }); let [s, t, r] = desc.address_modes; diff --git a/third_party/rust/wgpu-hal/src/metal/mod.rs b/third_party/rust/wgpu-hal/src/metal/mod.rs @@ -159,6 +159,7 @@ impl crate::Instance for Instance { driver: String::new(), driver_info: String::new(), backend: wgt::Backend::Metal, + transient_saves_memory: shared.private_caps.supports_memoryless_storage, }, features: shared.private_caps.features(), capabilities: shared.private_caps.capabilities(), @@ -300,6 +301,7 @@ struct PrivateCapabilities { int64_atomics: bool, float_atomics: bool, supports_shared_event: bool, + supports_memoryless_storage: bool, } #[derive(Clone, Debug)] diff --git a/third_party/rust/wgpu-hal/src/noop/mod.rs b/third_party/rust/wgpu-hal/src/noop/mod.rs @@ -140,6 +140,7 @@ pub fn adapter_info() -> wgt::AdapterInfo { driver: String::from("wgpu"), driver_info: String::new(), backend: wgt::Backend::Noop, + transient_saves_memory: false, } } diff --git a/third_party/rust/wgpu-hal/src/vulkan/adapter.rs b/third_party/rust/wgpu-hal/src/vulkan/adapter.rs @@ -1642,6 +1642,16 @@ impl super::Instance { let (phd_capabilities, phd_features) = self.shared.inspect(phd); + let mem_properties = { + profiling::scope!("vkGetPhysicalDeviceMemoryProperties"); + unsafe { self.shared.raw.get_physical_device_memory_properties(phd) } + }; + let memory_types = &mem_properties.memory_types_as_slice(); + let supports_lazily_allocated = memory_types.iter().any(|mem| { + mem.property_flags + .contains(vk::MemoryPropertyFlags::LAZILY_ALLOCATED) + }); + let info = wgt::AdapterInfo { name: { phd_capabilities @@ -1681,6 +1691,7 @@ impl super::Instance { .to_owned() }, backend: wgt::Backend::Vulkan, + transient_saves_memory: supports_lazily_allocated, }; let (available_features, mut downlevel_flags) = phd_features.to_wgpu(&self.shared.raw, phd, &phd_capabilities); diff --git a/third_party/rust/wgpu-hal/src/vulkan/conv.rs b/third_party/rust/wgpu-hal/src/vulkan/conv.rs @@ -260,6 +260,9 @@ pub fn map_texture_usage(usage: wgt::TextureUses) -> vk::ImageUsageFlags { ) { flags |= vk::ImageUsageFlags::STORAGE; } + if usage.contains(wgt::TextureUses::TRANSIENT) { + flags |= vk::ImageUsageFlags::TRANSIENT_ATTACHMENT; + } flags } @@ -349,6 +352,9 @@ pub fn map_vk_image_usage(usage: vk::ImageUsageFlags) -> wgt::TextureUses { | wgt::TextureUses::STORAGE_READ_WRITE | wgt::TextureUses::STORAGE_ATOMIC; } + if usage.contains(vk::ImageUsageFlags::TRANSIENT_ATTACHMENT) { + bits |= wgt::TextureUses::TRANSIENT; + } bits } @@ -697,10 +703,10 @@ pub fn map_filter_mode(mode: wgt::FilterMode) -> vk::Filter { } } -pub fn map_mip_filter_mode(mode: wgt::FilterMode) -> vk::SamplerMipmapMode { +pub fn map_mip_filter_mode(mode: wgt::MipmapFilterMode) -> vk::SamplerMipmapMode { match mode { - wgt::FilterMode::Nearest => vk::SamplerMipmapMode::NEAREST, - wgt::FilterMode::Linear => vk::SamplerMipmapMode::LINEAR, + wgt::MipmapFilterMode::Nearest => vk::SamplerMipmapMode::NEAREST, + wgt::MipmapFilterMode::Linear => vk::SamplerMipmapMode::LINEAR, } } diff --git a/third_party/rust/wgpu-hal/src/vulkan/device.rs b/third_party/rust/wgpu-hal/src/vulkan/device.rs @@ -649,7 +649,6 @@ impl super::Device { } } - #[cfg(windows)] fn find_memory_type_index( &self, type_bits_req: u32, @@ -739,7 +738,17 @@ impl super::Device { // VK_ERROR_COMPRESSION_EXHAUSTED_EXT super::map_host_device_oom_and_ioca_err(err) } - let req = unsafe { self.shared.raw.get_image_memory_requirements(raw) }; + let mut req = unsafe { self.shared.raw.get_image_memory_requirements(raw) }; + + if desc.usage.contains(wgt::TextureUses::TRANSIENT) { + let mem_type_index = self.find_memory_type_index( + req.memory_type_bits, + vk::MemoryPropertyFlags::LAZILY_ALLOCATED, + ); + if let Some(mem_type_index) = mem_type_index { + req.memory_type_bits = 1 << mem_type_index; + } + } Ok(ImageWithoutMemory { raw, diff --git a/third_party/rust/wgpu-hal/src/vulkan/mod.rs b/third_party/rust/wgpu-hal/src/vulkan/mod.rs @@ -26,7 +26,7 @@ Otherwise, we manage a pool of `VkFence` objects behind each `hal::Fence`. mod adapter; mod command; -mod conv; +pub mod conv; mod device; mod drm; mod instance; @@ -156,7 +156,6 @@ pub struct DebugUtilsMessengerUserData { pub struct InstanceShared { raw: ash::Instance, extensions: Vec<&'static CStr>, - drop_guard: Option<crate::DropGuard>, flags: wgt::InstanceFlags, memory_budget_thresholds: wgt::MemoryBudgetThresholds, debug_utils: Option<DebugUtils>, @@ -171,6 +170,10 @@ pub struct InstanceShared { /// It is associated with a `VkInstance` and its children, /// except for a `VkPhysicalDevice` and its children. instance_api_version: u32, + + // The `drop_guard` field must be the last field of this struct so it is dropped last. + // Do not add new fields after it. + drop_guard: Option<crate::DropGuard>, } pub struct Instance { @@ -715,7 +718,6 @@ struct DeviceShared { family_index: u32, queue_index: u32, raw_queue: vk::Queue, - drop_guard: Option<crate::DropGuard>, instance: Arc<InstanceShared>, physical_device: vk::PhysicalDevice, enabled_extensions: Vec<&'static CStr>, @@ -737,6 +739,10 @@ struct DeviceShared { texture_identity_factory: ResourceIdentityFactory<vk::Image>, /// As above, for texture views. texture_view_identity_factory: ResourceIdentityFactory<vk::ImageView>, + + // The `drop_guard` field must be the last field of this struct so it is dropped last. + // Do not add new fields after it. + drop_guard: Option<crate::DropGuard>, } impl Drop for DeviceShared { @@ -945,12 +951,15 @@ impl crate::DynAccelerationStructure for AccelerationStructure {} #[derive(Debug)] pub struct Texture { raw: vk::Image, - drop_guard: Option<crate::DropGuard>, external_memory: Option<vk::DeviceMemory>, block: Option<gpu_alloc::MemoryBlock<vk::DeviceMemory>>, format: wgt::TextureFormat, copy_size: crate::CopyExtent, identity: ResourceIdentity<vk::Image>, + + // The `drop_guard` field must be the last field of this struct so it is dropped last. + // Do not add new fields after it. + drop_guard: Option<crate::DropGuard>, } impl crate::DynTexture for Texture {} diff --git a/third_party/rust/wgpu-types/.cargo-checksum.json b/third_party/rust/wgpu-types/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"6ce40662479cee74a188bfb2a7cd9101b4216628c09f5112574334d1c66e556c","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","src/assertions.rs":"e4d2d40bc1e870a59637f4b9574743e19565a62f6dbcc21cb18a76b666b796eb","src/cast_utils.rs":"33f03a57ccbedef2699f2305bec584c623db1fd28bfdf584d1260da4fbecd529","src/counters.rs":"e2a1c69126bdb6a35f74d5062e89e242eb955014d95c2b9e6e1b03f7b4b5bd98","src/env.rs":"26ffc91867625784159bcf391881187aa92cf92b81b1f40959ce1b96ae6d554d","src/error.rs":"0109e6209cf152abbfd0cee85dd934fb24f2304bf6adad6fb684b77f151fb158","src/features.rs":"ab880ecf55be2a93244d1a03119d10ee15eddc076f100ae03d13b51eaa815b57","src/instance.rs":"deeb5ca694163baf46c386316a498cee011cf960d48b749d4cd01125e9fca57f","src/lib.rs":"ba614fe0a0e47ba29f09d3e2e110dc8fe0007a026af1c8fae3cdd3f65f3342cf","src/math.rs":"3046121800bded318b7d219aea401907e7d3bba3b998df6745a71e76f0734de2","src/tokens.rs":"cdf192e0c9b4ea4f3cd4148d07be2e895f937f8154acbf52caf67f7fb4df11dc","src/transfers.rs":"25f47e9cbc5887f849f5eb4d8952d89de6377df40f480ebbea61c58d2e0e7fc6"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"6ce40662479cee74a188bfb2a7cd9101b4216628c09f5112574334d1c66e556c","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","src/assertions.rs":"e4d2d40bc1e870a59637f4b9574743e19565a62f6dbcc21cb18a76b666b796eb","src/cast_utils.rs":"33f03a57ccbedef2699f2305bec584c623db1fd28bfdf584d1260da4fbecd529","src/counters.rs":"e2a1c69126bdb6a35f74d5062e89e242eb955014d95c2b9e6e1b03f7b4b5bd98","src/env.rs":"26ffc91867625784159bcf391881187aa92cf92b81b1f40959ce1b96ae6d554d","src/error.rs":"0109e6209cf152abbfd0cee85dd934fb24f2304bf6adad6fb684b77f151fb158","src/features.rs":"ab880ecf55be2a93244d1a03119d10ee15eddc076f100ae03d13b51eaa815b57","src/instance.rs":"deeb5ca694163baf46c386316a498cee011cf960d48b749d4cd01125e9fca57f","src/lib.rs":"eb98d959be74b44ea43e4c4e2ceeb37799f4d8e96fd0f1ed1fbb48ced3f207ea","src/math.rs":"3046121800bded318b7d219aea401907e7d3bba3b998df6745a71e76f0734de2","src/tokens.rs":"cdf192e0c9b4ea4f3cd4148d07be2e895f937f8154acbf52caf67f7fb4df11dc","src/transfers.rs":"25f47e9cbc5887f849f5eb4d8952d89de6377df40f480ebbea61c58d2e0e7fc6"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/wgpu-types/src/lib.rs b/third_party/rust/wgpu-types/src/lib.rs @@ -667,9 +667,9 @@ pub struct Limits { /// Defaults to 65535. Higher is "better". pub max_compute_workgroups_per_dimension: u32, - /// Minimal number of invocations in a subgroup. Higher is "better". + /// Minimal number of invocations in a subgroup. Lower is "better". pub min_subgroup_size: u32, - /// Maximal number of invocations in a subgroup. Lower is "better". + /// Maximal number of invocations in a subgroup. Higher is "better". pub max_subgroup_size: u32, /// Amount of storage available for push constants in bytes. Defaults to 0. Higher is "better". /// Requesting more than 0 during device creation requires [`Features::PUSH_CONSTANTS`] to be enabled. @@ -1415,6 +1415,8 @@ pub struct AdapterInfo { pub driver_info: String, /// Backend used for device pub backend: Backend, + /// If true, adding [`TextureUsages::TRANSIENT`] to a texture will decrease memory usage. + pub transient_saves_memory: bool, } /// Hints to the device about the memory allocation strategy. @@ -3121,7 +3123,7 @@ impl TextureFormat { // Flags let basic = TextureUsages::COPY_SRC | TextureUsages::COPY_DST | TextureUsages::TEXTURE_BINDING; - let attachment = basic | TextureUsages::RENDER_ATTACHMENT; + let attachment = basic | TextureUsages::RENDER_ATTACHMENT | TextureUsages::TRANSIENT; let storage = basic | TextureUsages::STORAGE_BINDING; let binding = TextureUsages::TEXTURE_BINDING; let all_flags = attachment | storage | binding; @@ -5612,6 +5614,8 @@ bitflags::bitflags! { /// Allows a texture to be a [`BindingType::StorageTexture`] in a bind group. const STORAGE_BINDING = 1 << 3; /// Allows a texture to be an output attachment of a render pass. + /// + /// Consider adding [`TextureUsages::TRANSIENT`] if the contents are not reused. const RENDER_ATTACHMENT = 1 << 4; // @@ -5621,6 +5625,15 @@ bitflags::bitflags! { // /// Allows a texture to be used with image atomics. Requires [`Features::TEXTURE_ATOMIC`]. const STORAGE_ATOMIC = 1 << 16; + /// Specifies the contents of this texture will not be used in another pass to potentially reduce memory usage and bandwidth. + /// + /// No-op on platforms on platforms that do not benefit from transient textures. + /// Generally mobile and Apple chips care about this. + /// + /// Incompatible with ALL other usages except [`TextureUsages::RENDER_ATTACHMENT`] and requires it. + /// + /// Requires [`StoreOp::Discard`]. + const TRANSIENT = 1 << 17; } } @@ -5658,6 +5671,8 @@ bitflags::bitflags! { /// Image atomic enabled storage. /// cbindgen:ignore const STORAGE_ATOMIC = 1 << 11; + /// Transient texture that may not have any backing memory. Not a resource state stored in the trackers, only used for passing down usages to create_texture. + const TRANSIENT = 1 << 12; /// The combination of states that a texture may be in _at the same time_. /// cbindgen:ignore const INCLUSIVE = Self::COPY_SRC.bits() | Self::RESOURCE.bits() | Self::DEPTH_STENCIL_READ.bits(); @@ -5671,10 +5686,10 @@ bitflags::bitflags! { const ORDERED = Self::INCLUSIVE.bits() | Self::COLOR_TARGET.bits() | Self::DEPTH_STENCIL_WRITE.bits() | Self::STORAGE_READ_ONLY.bits(); /// Flag used by the wgpu-core texture tracker to say a texture is in different states for every sub-resource - const COMPLEX = 1 << 12; + const COMPLEX = 1 << 13; /// Flag used by the wgpu-core texture tracker to say that the tracker does not know the state of the sub-resource. /// This is different from UNINITIALIZED as that says the tracker does know, but the texture has not been initialized. - const UNKNOWN = 1 << 13; + const UNKNOWN = 1 << 14; } } @@ -6587,7 +6602,7 @@ pub struct SamplerDescriptor<L> { /// How to filter the texture when it needs to be minified (made smaller) pub min_filter: FilterMode, /// How to filter between mip map levels - pub mipmap_filter: FilterMode, + pub mipmap_filter: MipmapFilterMode, /// Minimum level of detail (i.e. mip level) to use pub lod_min_clamp: f32, /// Maximum level of detail (i.e. mip level) to use @@ -6692,12 +6707,32 @@ pub enum AddressMode { pub enum FilterMode { /// Nearest neighbor sampling. /// - /// This creates a pixelated effect when used as a mag filter + /// This creates a pixelated effect. + #[default] + Nearest = 0, + /// Linear Interpolation + /// + /// This makes textures smooth but blurry. + Linear = 1, +} + +/// Texel mixing mode when sampling between texels. +/// +/// Corresponds to [WebGPU `GPUMipmapFilterMode`]( +/// https://gpuweb.github.io/gpuweb/#enumdef-gpumipmapfiltermode). +#[repr(C)] +#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))] +pub enum MipmapFilterMode { + /// Nearest neighbor sampling. + /// + /// Return the value of the texel nearest to the texture coordinates. #[default] Nearest = 0, /// Linear Interpolation /// - /// This makes textures smooth but blurry when used as a mag filter. + /// Select two texels in each dimension and return a linear interpolation between their values. Linear = 1, }