[cts.https.html?q=webgpu:shader,validation,functions,restrictions:body_required:*]
  [:body=""]

  [:body="braces"]

  [:body="semi"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:call_arg_types_match_1_param:*]
  [:p1_type="f32"]

  [:p1_type="i32"]

  [:p1_type="u32"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:call_arg_types_match_2_params:*]
  [:p1_type="f32";p2_type="f32"]

  [:p1_type="f32";p2_type="i32"]

  [:p1_type="f32";p2_type="u32"]

  [:p1_type="i32";p2_type="f32"]

  [:p1_type="i32";p2_type="i32"]

  [:p1_type="i32";p2_type="u32"]

  [:p1_type="u32";p2_type="f32"]

  [:p1_type="u32";p2_type="i32"]

  [:p1_type="u32";p2_type="u32"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:call_arg_types_match_3_params:*]
  [:p1_type="f32";p2_type="f32";p3_type="f32"]

  [:p1_type="f32";p2_type="f32";p3_type="i32"]

  [:p1_type="f32";p2_type="f32";p3_type="u32"]

  [:p1_type="f32";p2_type="i32";p3_type="f32"]

  [:p1_type="f32";p2_type="i32";p3_type="i32"]

  [:p1_type="f32";p2_type="i32";p3_type="u32"]

  [:p1_type="f32";p2_type="u32";p3_type="f32"]

  [:p1_type="f32";p2_type="u32";p3_type="i32"]

  [:p1_type="f32";p2_type="u32";p3_type="u32"]

  [:p1_type="i32";p2_type="f32";p3_type="f32"]

  [:p1_type="i32";p2_type="f32";p3_type="i32"]

  [:p1_type="i32";p2_type="f32";p3_type="u32"]

  [:p1_type="i32";p2_type="i32";p3_type="f32"]

  [:p1_type="i32";p2_type="i32";p3_type="i32"]

  [:p1_type="i32";p2_type="i32";p3_type="u32"]

  [:p1_type="i32";p2_type="u32";p3_type="f32"]

  [:p1_type="i32";p2_type="u32";p3_type="i32"]

  [:p1_type="i32";p2_type="u32";p3_type="u32"]

  [:p1_type="u32";p2_type="f32";p3_type="f32"]

  [:p1_type="u32";p2_type="f32";p3_type="i32"]

  [:p1_type="u32";p2_type="f32";p3_type="u32"]

  [:p1_type="u32";p2_type="i32";p3_type="f32"]

  [:p1_type="u32";p2_type="i32";p3_type="i32"]

  [:p1_type="u32";p2_type="i32";p3_type="u32"]

  [:p1_type="u32";p2_type="u32";p3_type="f32"]

  [:p1_type="u32";p2_type="u32";p3_type="i32"]

  [:p1_type="u32";p2_type="u32";p3_type="u32"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:entry_point_call_target:*]
  [:stage="%40compute%20%40workgroup_size(1,1,1)";entry_point="with"]

  [:stage="%40compute%20%40workgroup_size(1,1,1)";entry_point="without"]

  [:stage="%40fragment";entry_point="with"]

  [:stage="%40fragment";entry_point="without"]

  [:stage="%40vertex";entry_point="with"]

  [:stage="%40vertex";entry_point="without"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_attributes:*]
  implementation-status: backlog
  [:case="align";placement="func"]

  [:case="align";placement="param"]

  [:case="align";placement="ret"]

  [:case="binding";placement="func"]

  [:case="binding";placement="param"]

  [:case="binding";placement="ret"]

  [:case="builtin";placement="func"]

  [:case="builtin";placement="param"]

  [:case="builtin";placement="ret"]

  [:case="compute";placement="func"]

  [:case="compute";placement="param"]

  [:case="compute";placement="ret"]

  [:case="const";placement="func"]

  [:case="const";placement="param"]

  [:case="const";placement="ret"]

  [:case="diagnostic";placement="func"]

  [:case="diagnostic";placement="param"]

  [:case="diagnostic";placement="ret"]

  [:case="fragment";placement="func"]

  [:case="fragment";placement="param"]

  [:case="fragment";placement="ret"]

  [:case="group";placement="func"]

  [:case="group";placement="param"]

  [:case="group";placement="ret"]

  [:case="id";placement="func"]
    expected: FAIL

  [:case="id";placement="param"]

  [:case="id";placement="ret"]

  [:case="interpolate";placement="func"]

  [:case="interpolate";placement="param"]

  [:case="interpolate";placement="ret"]

  [:case="invariant";placement="func"]

  [:case="invariant";placement="param"]

  [:case="invariant";placement="ret"]

  [:case="location";placement="func"]

  [:case="location";placement="param"]

  [:case="location";placement="ret"]

  [:case="must_use";placement="func"]

  [:case="must_use";placement="param"]

  [:case="must_use";placement="ret"]

  [:case="size";placement="func"]

  [:case="size";placement="param"]

  [:case="size";placement="ret"]

  [:case="vertex";placement="func"]

  [:case="vertex";placement="param"]

  [:case="vertex";placement="ret"]

  [:case="workgroup_size";placement="func"]
    expected: FAIL

  [:case="workgroup_size";placement="param"]

  [:case="workgroup_size";placement="ret"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_name_required:*]
  [:name=false]

  [:name=true]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_parameter_matching:*]
  implementation-status: backlog
  [:decl="array1"]
    expected: FAIL

  [:decl="array2"]
    expected: FAIL

  [:decl="array3"]
    expected: FAIL

  [:decl="array4"]
    expected: FAIL

  [:decl="array5"]
    expected: FAIL

  [:decl="bool"]
    expected: FAIL

  [:decl="f16"]
    expected:
      if os == "mac": FAIL

  [:decl="f32"]
    expected: FAIL

  [:decl="i32"]
    expected: FAIL

  [:decl="mat2x2"]
    expected: FAIL

  [:decl="mat2x3"]
    expected: FAIL

  [:decl="mat2x4"]
    expected: FAIL

  [:decl="mat3x2"]
    expected: FAIL

  [:decl="mat3x3"]
    expected: FAIL

  [:decl="mat3x4"]
    expected: FAIL

  [:decl="mat4x2"]
    expected: FAIL

  [:decl="mat4x3"]
    expected: FAIL

  [:decl="mat4x4"]
    expected: FAIL

  [:decl="ptr1"]
    expected: FAIL

  [:decl="ptr10"]

  [:decl="ptr11"]

  [:decl="ptr12"]

  [:decl="ptr2"]
    expected: FAIL

  [:decl="ptr3"]
    expected: FAIL

  [:decl="ptr4"]
    expected: FAIL

  [:decl="ptr5"]

  [:decl="ptr6"]

  [:decl="ptr7"]

  [:decl="ptr8"]

  [:decl="ptr9"]

  [:decl="ptrWorkgroupAtomic"]

  [:decl="ptrWorkgroupNestedAtomic"]

  [:decl="sampler"]
    expected: FAIL

  [:decl="sampler_comparison"]
    expected: FAIL

  [:decl="struct1"]
    expected: FAIL

  [:decl="struct2"]
    expected: FAIL

  [:decl="texture_depth"]
    expected: FAIL

  [:decl="texture_multisampled"]
    expected: FAIL

  [:decl="texture_sample"]
    expected: FAIL

  [:decl="texture_storage"]
    expected: FAIL

  [:decl="u32"]
    expected: FAIL

  [:decl="vec2"]
    expected: FAIL

  [:decl="vec3"]
    expected: FAIL

  [:decl="vec4"]
    expected: FAIL


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_parameter_types:*]
  [:case="array1"]

  [:case="array2"]

  [:case="array3"]

  [:case="array4"]

  [:case="array5"]

  [:case="atomic_struct"]

  [:case="atomic_u32"]

  [:case="bool"]

  [:case="f16"]

  [:case="f32"]

  [:case="i32"]

  [:case="invalid_ptr1"]

  [:case="invalid_ptr2"]

  [:case="invalid_ptr3"]

  [:case="invalid_ptr4"]

  [:case="invalid_ptr5"]

  [:case="invalid_ptr6"]

  [:case="invalid_ptr7"]

  [:case="invalid_ptr8"]

  [:case="mat2x2"]

  [:case="mat2x3"]

  [:case="mat2x4"]

  [:case="mat3x2"]

  [:case="mat3x3"]

  [:case="mat3x4"]

  [:case="mat4x2"]

  [:case="mat4x3"]

  [:case="mat4x4"]

  [:case="override_array"]

  [:case="ptr1"]

  [:case="ptr10"]

  [:case="ptr11"]

  [:case="ptr12"]

  [:case="ptr2"]

  [:case="ptr3"]

  [:case="ptr4"]

  [:case="ptr5"]

  [:case="ptr6"]

  [:case="ptr7"]

  [:case="ptr8"]

  [:case="ptr9"]

  [:case="ptrWorkgroupAtomic"]

  [:case="ptrWorkgroupNestedAtomic"]

  [:case="runtime_array"]

  [:case="runtime_struct"]

  [:case="sampler"]

  [:case="sampler_comparison"]

  [:case="struct1"]

  [:case="struct2"]

  [:case="texture_depth"]

  [:case="texture_multisampled"]

  [:case="texture_sample"]

  [:case="texture_storage"]

  [:case="u32"]

  [:case="vec2"]

  [:case="vec3"]

  [:case="vec4"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:function_return_types:*]
  implementation-status: backlog
  [:case="array1"]
    expected: FAIL

  [:case="array2"]
    expected: FAIL

  [:case="array3"]
    expected: FAIL

  [:case="array4"]
    expected: FAIL

  [:case="array5"]
    expected: FAIL

  [:case="atomic_struct"]

  [:case="atomic_u32"]

  [:case="bool"]
    expected: FAIL

  [:case="f16"]
    expected:
      if os == "mac": FAIL

  [:case="f32"]
    expected: FAIL

  [:case="i32"]
    expected: FAIL

  [:case="mat2x2"]
    expected: FAIL

  [:case="mat2x3"]
    expected: FAIL

  [:case="mat2x4"]
    expected: FAIL

  [:case="mat3x2"]
    expected: FAIL

  [:case="mat3x3"]
    expected: FAIL

  [:case="mat3x4"]
    expected: FAIL

  [:case="mat4x2"]
    expected: FAIL

  [:case="mat4x3"]
    expected: FAIL

  [:case="mat4x4"]
    expected: FAIL

  [:case="override_array"]

  [:case="ptr"]

  [:case="runtime_array"]

  [:case="runtime_struct"]

  [:case="sampler"]

  [:case="sampler_comparison"]

  [:case="struct1"]
    expected: FAIL

  [:case="struct2"]
    expected: FAIL

  [:case="texture_depth"]

  [:case="texture_multisampled"]

  [:case="texture_sample"]

  [:case="texture_storage"]

  [:case="u32"]
    expected: FAIL

  [:case="vec2"]
    expected: FAIL

  [:case="vec3"]
    expected: FAIL

  [:case="vec4"]
    expected: FAIL


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:must_use_requires_return:*]
  [:ret=false]

  [:ret=true]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:no_direct_recursion:*]
  [:]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:no_indirect_recursion:*]
  [:]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:non_module_scoped_function:*]
  [:loc="inner"]

  [:loc="outer"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:overload:*]
  [:overload=false]

  [:overload=true]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_comma_placement:*]
  [:param_1=false;param_2=false;comma=false]

  [:param_1=false;param_2=false;comma=true]

  [:param_1=false;param_2=true;comma=false]

  [:param_1=false;param_2=true;comma=true]

  [:param_1=true;param_2=false;comma=false]

  [:param_1=true;param_2=false;comma=true]

  [:param_1=true;param_2=true;comma=false]

  [:param_1=true;param_2=true;comma=true]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_name_can_shadow_alias:*]
  [:]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_name_can_shadow_function_name:*]
  [:]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_name_can_shadow_global:*]
  [:]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_names_must_differ:*]
  [:p1="a";p2="a"]

  [:p1="a";p2="b"]

  [:p1="a";p2="c"]

  [:p1="b";p2="a"]

  [:p1="b";p2="b"]

  [:p1="b";p2="c"]

  [:p1="c";p2="a"]

  [:p1="c";p2="b"]

  [:p1="c";p2="c"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_number_matches_call:*]
  [:num_args=0;num_params=0]

  [:num_args=0;num_params=1]

  [:num_args=0;num_params=2]

  [:num_args=0;num_params=255]

  [:num_args=0;num_params=3]

  [:num_args=0;num_params=4]

  [:num_args=1;num_params=0]

  [:num_args=1;num_params=1]

  [:num_args=1;num_params=2]

  [:num_args=1;num_params=255]

  [:num_args=1;num_params=3]

  [:num_args=1;num_params=4]

  [:num_args=255;num_params=0]

  [:num_args=255;num_params=1]

  [:num_args=255;num_params=2]

  [:num_args=255;num_params=255]

  [:num_args=255;num_params=3]

  [:num_args=255;num_params=4]

  [:num_args=2;num_params=0]

  [:num_args=2;num_params=1]

  [:num_args=2;num_params=2]

  [:num_args=2;num_params=255]

  [:num_args=2;num_params=3]

  [:num_args=2;num_params=4]

  [:num_args=3;num_params=0]

  [:num_args=3;num_params=1]

  [:num_args=3;num_params=2]

  [:num_args=3;num_params=255]

  [:num_args=3;num_params=3]

  [:num_args=3;num_params=4]

  [:num_args=4;num_params=0]

  [:num_args=4;num_params=1]

  [:num_args=4;num_params=2]

  [:num_args=4;num_params=255]

  [:num_args=4;num_params=3]

  [:num_args=4;num_params=4]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_scope_is_function_body:*]
  [:use="body"]

  [:use="const"]

  [:use="function"]

  [:use="override"]

  [:use="var"]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_type_can_be_alias:*]
  [:]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:param_type_required:*]
  [:ty=false;colon=false]

  [:ty=false;colon=true]

  [:ty=true;colon=false]

  [:ty=true;colon=true]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:parens_required:*]
  [:parens=false;param=false]

  [:parens=false;param=true]

  [:parens=true;param=false]

  [:parens=true;param=true]


[cts.https.html?q=webgpu:shader,validation,functions,restrictions:vertex_returns_position:*]
  [:case="bare_position"]

  [:case="nested_position"]

  [:case="no_bare_position"]

  [:case="no_nested_position"]
