Skip to content

[naga] panic when array override value already in arena #6722

Open
@sagudev

Description

Description
First reported in #6635 (comment), naga panic when array override value already in arena.

backtrace:

assertion failed: added && index == self.set.len() - 1 (thread WGPU, at /home/user/.cargo/git/checkouts/wgpu-53e70f8674b08dd4/8f82992/naga/src/arena/unique_arena.rs:153)
   0: servoshell::backtrace::print
   1: servoshell::panic_hook::panic_hook
   2: std::panicking::rust_panic_with_hook
   3: std::panicking::begin_panic_handler::{{closure}}
   4: std::sys::backtrace::__rust_end_short_backtrace
   5: rust_begin_unwind
   6: core::panicking::panic_fmt
   7: core::panicking::panic
   8: naga::arena::unique_arena::UniqueArena<T>::replace
   9: naga::back::pipeline_constants::process_overrides
  10: wgpu_hal::vulkan::device::<impl wgpu_hal::vulkan::Device>::compile_stage
  11: <D as wgpu_hal::dynamic::device::DynDevice>::create_compute_pipeline
  12: webgpu::wgpu_thread::WGPU::run

Repro steps

Observed when running webgpu:shader,execution,limits:workgroup_array_byte_size_override:* in servo, but one can also patch wgpu test to expose this behaviour:

diff --git a/tests/tests/shader/array_size_overrides.rs b/tests/tests/shader/array_size_overrides.rs
index 7f1d32425..476e414c7 100644
--- a/tests/tests/shader/array_size_overrides.rs
+++ b/tests/tests/shader/array_size_overrides.rs
@@ -9,7 +9,7 @@ const SHADER: &str = r#"
     var<workgroup> arr: array<u32, n - 2>;
 
     @group(0) @binding(0)
-    var<storage, read_write> output: array<u32>;
+    var<storage, read_write> output: array<u32, 14 - 2>;

     @compute @workgroup_size(1) fn main() {
         // 1d spiral
@@ -34,9 +34,9 @@ const SHADER: &str = r#"
 static ARRAY_SIZE_OVERRIDES: GpuTestConfiguration = GpuTestConfiguration::new()
     .parameters(TestParameters::default().limits(wgpu::Limits::default()))
     .run_async(move |ctx| async move {
-        array_size_overrides(&ctx, None, &[534], false).await;
+        //array_size_overrides(&ctx, None, &[534], false).await;
         array_size_overrides(&ctx, Some(14), &[286480122], false).await;
-        array_size_overrides(&ctx, Some(1), &[0], true).await;
+        //array_size_overrides(&ctx, Some(1), &[0], true).await;
     });

 async fn array_size_overrides(

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions