// crbug.com/tint/959
// Test that we automatically remap resource numbers into a flat namespace for
// MSL. Use some high binding numbers to also test that the remapped numbers are
// densely packed starting at 0.

struct S {
  a : f32;
};

[[group(0),  binding(0)]] var<storage> b0  : S;
[[group(1),  binding(0)]] var<storage> b1  : S;
[[group(2),  binding(0)]] var<storage> b2  : S;
[[group(3),  binding(0)]] var<storage> b3  : S;
[[group(4),  binding(0)]] var<storage> b4  : S;
[[group(5),  binding(0)]] var<storage> b5  : S;
[[group(6),  binding(0)]] var<storage> b6  : S;
[[group(7),  binding(0)]] var<storage> b7  : S;
[[group(9),  binding(1)]] var<uniform> b8  : S;
[[group(8),  binding(1)]] var<uniform> b9  : S;
[[group(10), binding(1)]] var<uniform> b10 : S;
[[group(11), binding(1)]] var<uniform> b11 : S;
[[group(12), binding(1)]] var<uniform> b12 : S;
[[group(13), binding(1)]] var<uniform> b13 : S;
[[group(14), binding(1)]] var<uniform> b14 : S;
[[group(15), binding(1)]] var<uniform> b15 : S;

[[group(0),  binding(1)]] var t0  : texture_2d<f32>;
[[group(1),  binding(1)]] var t1  : texture_2d<f32>;
[[group(2),  binding(1)]] var t2  : texture_2d<f32>;
[[group(3),  binding(1)]] var t3  : texture_2d<f32>;
[[group(4),  binding(1)]] var t4  : texture_2d<f32>;
[[group(5),  binding(1)]] var t5  : texture_2d<f32>;
[[group(6),  binding(1)]] var t6  : texture_2d<f32>;
[[group(7),  binding(1)]] var t7  : texture_2d<f32>;
[[group(8),  binding(200)]] var t8  : texture_depth_2d;
[[group(9),  binding(200)]] var t9  : texture_depth_2d;
[[group(10), binding(200)]] var t10 : texture_depth_2d;
[[group(11), binding(200)]] var t11 : texture_depth_2d;
[[group(12), binding(200)]] var t12 : texture_depth_2d;
[[group(13), binding(200)]] var t13 : texture_depth_2d;
[[group(14), binding(200)]] var t14 : texture_depth_2d;
[[group(15), binding(200)]] var t15 : texture_depth_2d;

[[group(0),  binding(200)]] var s0 : sampler;
[[group(1),  binding(200)]] var s1 : sampler;
[[group(2),  binding(200)]] var s2 : sampler;
[[group(3),  binding(200)]] var s3 : sampler;
[[group(4),  binding(200)]] var s4 : sampler;
[[group(5),  binding(200)]] var s5 : sampler;
[[group(6),  binding(200)]] var s6 : sampler;
[[group(7),  binding(200)]] var s7 : sampler;
[[group(8),  binding(300)]] var s8 : sampler_comparison;
[[group(9),  binding(300)]] var s9 : sampler_comparison;
[[group(10), binding(300)]] var s10 : sampler_comparison;
[[group(11), binding(300)]] var s11 : sampler_comparison;
[[group(12), binding(300)]] var s12 : sampler_comparison;
[[group(13), binding(300)]] var s13 : sampler_comparison;
[[group(14), binding(300)]] var s14 : sampler_comparison;
[[group(15), binding(300)]] var s15 : sampler_comparison;

[[stage(fragment)]]
fn main() {
  _ = b0;
  _ = b1;
  _ = b2;
  _ = b3;
  _ = b4;
  _ = b5;
  _ = b6;
  _ = b7;
  _ = b8;
  _ = b9;
  _ = b10;
  _ = b11;
  _ = b12;
  _ = b13;
  _ = b14;
  _ = b15;

  _ = t0;
  _ = t1;
  _ = t2;
  _ = t3;
  _ = t4;
  _ = t5;
  _ = t6;
  _ = t7;
  _ = t8;
  _ = t9;
  _ = t10;
  _ = t11;
  _ = t12;
  _ = t13;
  _ = t14;
  _ = t15;

  _ = s0;
  _ = s1;
  _ = s2;
  _ = s3;
  _ = s4;
  _ = s5;
  _ = s6;
  _ = s7;
  _ = s8;
  _ = s9;
  _ = s10;
  _ = s11;
  _ = s12;
  _ = s13;
  _ = s14;
  _ = s15;
}
