[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:not_valid_on_user_defined_io:*]
  expected:
    if os == "mac": [OK, SKIP]
  [:use_invariant=false]

  [:use_invariant=true]


[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:parsing:*]
  expected:
    if os == "mac": [OK, SKIP]
  [:attr="comment"]

  [:attr="duplicate"]

  [:attr="empty_parens"]

  [:attr="invariant"]

  [:attr="missing_left_paren"]

  [:attr="missing_right_paren"]

  [:attr="split_line"]

  [:attr="value"]


[cts.https.html?q=webgpu:shader,validation,shader_io,invariant:valid_only_with_vertex_position_builtin:*]
  expected:
    if os == "mac": [OK, SKIP]
  [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=false]

  [:name="frag_depth";stage="fragment";io="out";type="f32";use_struct=true]

  [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=false]

  [:name="front_facing";stage="fragment";io="in";type="bool";use_struct=true]

  [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false]

  [:name="global_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true]

  [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=false]

  [:name="instance_index";stage="vertex";io="in";type="u32";use_struct=true]

  [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false]

  [:name="local_invocation_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true]

  [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=false]

  [:name="local_invocation_index";stage="compute";io="in";type="u32";use_struct=true]

  [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false]

  [:name="num_workgroups";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true]

  [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=false]

  [:name="position";stage="fragment";io="in";type="vec4%3Cf32%3E";use_struct=true]

  [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=false]

  [:name="position";stage="vertex";io="out";type="vec4%3Cf32%3E";use_struct=true]

  [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=false]

  [:name="sample_index";stage="fragment";io="in";type="u32";use_struct=true]

  [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=false]

  [:name="sample_mask";stage="fragment";io="in";type="u32";use_struct=true]

  [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=false]

  [:name="sample_mask";stage="fragment";io="out";type="u32";use_struct=true]

  [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=false]

  [:name="vertex_index";stage="vertex";io="in";type="u32";use_struct=true]

  [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=false]

  [:name="workgroup_id";stage="compute";io="in";type="vec3%3Cu32%3E";use_struct=true]
