Add ResourceBuffer to the resolver.
Update the resolver to support the ResourceBuffer type.
Bug: 439626491
Change-Id: I058956590372e4f0bce74cddae98544ddc28599e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/259235
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/cmd/bench/enums_core_bench.cc b/src/tint/cmd/bench/enums_core_bench.cc
index ca7ce5f..c0532be 100644
--- a/src/tint/cmd/bench/enums_core_bench.cc
+++ b/src/tint/cmd/bench/enums_core_bench.cc
@@ -719,286 +719,293 @@
"p",
"ptMM",
"ptC",
- "samQQPPer",
- "suDDmplxxr",
- "YYlqamdpler",
+ "resourceQQPPinding",
+ "resoDDrxxe_bin8uing",
+ "reddYYurcmllbiqqding",
+ "resource_binding",
+ "_esource_bindiFFg",
+ "rerroGGrce_bidinNN",
+ "Mesource_bilding",
+ "aler",
+ "slmpqex",
+ "samper",
"sampler",
- "amFFle__",
- "rrGGNNler",
- "samMler",
- "samlr_cmparison",
- "sampler_comparqxon",
- "sampler_comprison",
+ "samp44r",
+ "WWGmpler",
+ "sjjmplr",
+ "sampler_compajjison",
+ "sampjercomparis1n",
+ "sapler_comparison",
"sampler_comparison",
- "sapler_comparis44n",
- "sampler_WWomparGson",
- "sampler_compajjson",
- "sjjbgroup_matrix_left",
- "subgrojp_matrix_l1t",
- "subgrop_matrix_left",
+ "sampler_comparis99n",
+ "samVVler_comparison",
+ "ZZampler_cmparxson",
+ "subvvroup_ma33ri_left",
+ "subgroup_matrsx_lef9",
+ "subgroup_matFix_lef",
"subgroup_matrix_left",
- "subg99oup_matrix_left",
- "subgroup_mayrix_lVVft",
- "subgroup_matiZZ_lext",
- "sugr33uvv_matrix_result",
- "ssbgroup_9atrix_result",
- "suFgroup_matrixresult",
+ "suegroup_muutrix_lft",
+ "subgroup_mtIixlefKK",
+ "subgroJ_matrix_left",
+ "subgrXXupSSmatriCC_result",
+ "subgrWWupZZmatrix_66esult",
+ "subroup_mari5_resumdt",
"subgroup_matrix_result",
- "ubgroup_matrix_eesuuut",
- "sKKbgrou_mItrx_result",
- "subgroup_aJrix_result",
- "subgroupCCmatrixXXrighSS",
- "subZZr66uWW_maJrix_right",
- "summgropmadrix_5ight",
+ "BBubgroupmaBBriU_result",
+ "subgr0up_mJJtri11_result",
+ "subfroup_matrix_rettult",
+ "subroup_maXrix_ightt",
+ "subgroup_matrix_riwhL",
+ "subgr1up_matrix_right",
"subgroup_matrix_right",
- "subUoup_matrBBx_riBBht",
- "subgJJoup_mat110x_right",
- "subgroup_matrix_rfgttt",
- "texelbufftt",
- "texel_buLwer",
- "texel_bu1fer",
+ "subgroup_matrix_righww",
+ "subgou_atrix_righee",
+ "subgroup_matrx_right",
+ "texel_NNuffer",
+ "tRUUx__l_blffer",
+ "tHxel_buffer",
"texel_buffer",
- "tewwel_buffer",
- "teelbuffer",
- "texel_bffer",
- "textNNre_1d",
- "tex__uleRUU1d",
- "texHure_1d",
- "texture_1d",
- "teCCturr_1d",
+ "teCCelrbuffer",
+ "exel_buffer",
+ "texppl_bdfIr",
"textre_1d",
- "textupd_1d",
- "textre_2d",
"textLN_d",
"tet_d",
- "texture_2d",
+ "texture_1d",
"teqqtuxRR_GGd",
"texturS_GGd",
- "88tucce_2d",
- "texture_2d_arra",
- "texture_2dpparty",
- "te55tureFF02d_aqqray",
+ "88tucce_1d",
+ "texture_2",
+ "textte_ppd",
+ "qqFF0xture552d",
+ "texture_2d",
+ "txture_2d",
+ "textur2d",
+ "texOre_2d",
+ "textuHHe_2d_rray",
+ "text66re_2d_OrraSS",
+ "texture_2d_ddYraTT",
"texture_2d_array",
- "texure_2d_array",
- "texture_2d_ary",
- "texure_2dOarray",
- "textuHHe_3",
- "66extureSS3O",
- "tTTturddY_3d",
+ "textsrgg_2d_rray",
+ "texGGure_2d_array",
+ "teQQtOreI2ll_array",
+ "textue_3d",
+ "texrrure_3d",
+ "txtur7_yyd",
"texture_3d",
- "textursg3d",
- "texture_3GG",
- "tIxtllOQQ_3d",
- "txture_cube",
- "texture_crrbe",
- "teyytue_cub7",
+ "textu22Be_Yd",
+ "textyyVe_3d",
+ "x4ure_3",
+ "texture_cudde",
+ "texVVuze_cu2",
+ "texturyy_cube",
"texture_cube",
- "tBBxWur22_cube",
- "yyexture_cubV",
- "texturec4",
- "texture_cudde_array",
- "textu2e_cVVbz_rray",
- "texture_cubeyyarray",
+ "textu__A_cube",
+ "texture_chhbe",
+ "ttvvre_cube",
+ "texture_ub_array",
+ "tNNgtsre_cubeooarray",
+ "mmZZxtre_cube_aray",
"texture_cube_array",
- "texture_cAb___array",
- "texture_cube_arhhay",
- "teture_cube_arvvy",
- "txture_dept_2d",
- "texNNure_gesth_ood",
- "emmtre_ZZepth_2d",
+ "textuk_cue_array",
+ "texAur_ffube_aRray",
+ "Wxturrr_cube_zzrry",
+ "texture_depR_2d",
+ "textuSSe_88epth_Md",
+ "texture_debbPR_2d",
"texture_depth_2d",
- "texture_dkt_2d",
- "teRtue_ffepth_2d",
- "terrztuWdepth_2d",
- "texture_dept_2d_Rrray",
- "texture_dS88ptM_2d_array",
- "bbexurR_depth_2d_PPrray",
+ "WWeture_depthxx2d",
+ "texture_dptAAv_2d",
+ "tj44xXure_depth_2d",
+ "texturefdepth_2d_array",
+ "texture_dAAUthOOd_array",
+ "tuxtue_ssept_2d_array",
"texture_depth_2d_array",
- "texturexxWWeth_2d_array",
- "texture_dAAvth_2d_array",
- "textujje_de44th_2d_Xrray",
- "textufe_depth_cube",
- "textureAAUepth_cOOe",
- "tuxtre_ssepth_cue",
+ "tsxtuFFe_deptbb_2d_array",
+ "texture_depth_2d_annraYY",
+ "teture_depth_2d_arrass",
+ "textre_qezzth_cube",
+ "textre_NepQh_cube",
+ "tppxtukke_deph_cbe",
"texture_depth_cube",
- "bbexture_sFFpth_cube",
- "texture_nnepth_cubYY",
- "teture_depth_cubss",
- "textre_dzzpthqcube_array",
- "texuQedepth_cube_aNNray",
- "textukke_eptpp_cubearray",
+ "textssre_JepthLcube",
+ "77exJure_depthff5TTbe",
+ "texure_d00pth_cubx",
+ "texture1depth_cube_arrA",
+ "texture_depth_cube_rray",
+ "texture_depth_QQbe_array",
"texture_depth_cube_array",
- "texturL_depth_cusse_arraJ",
- "texture5ffepth_cubeJa77TTay",
- "textur00_dpxh_cube_array",
- "exture_depth_Aulti1ampled_2d",
- "texturedepth_multisampled_2d",
- "textQQre_depth_multisamled_2d",
+ "exture_depth_cubeiiaway",
+ "texture_depth_cube_arwway",
+ "texJJure_dephYh_cube_array",
+ "teEkure_depth_multi7ampld_2RR",
+ "texture_deptuu_multisampked_2d",
+ "texture_dethtRultisampled_2d",
"texture_depth_multisampled_2d",
- "iiexture_depthwultiampled_2d",
- "texture_depth_mwwltisampled_2d",
- "teYYturh_deptJJ_multisampled_2d",
- "texture_RRxkEnal",
- "texture_exteknauu",
- "textrRtexternal",
+ "txture_dIIpth_multisNmpled_2d",
+ "texture_deptII_multisampled_d",
+ "texture_depthmultisamiiledE2d",
+ "txture_ssxternal",
+ "XeCC5tue_external",
+ "text9re_external",
"texture_external",
- "IIeNtre_external",
- "texture_exIernal",
- "Eiixture_externl",
- "texture_multsssample_2d",
- "txture_mCCltXsa55pled_2d",
- "9exture_multisampled_2d",
+ "tXxture_extrnl",
+ "txture_eteIInal",
+ "texturz_external",
+ "texturezzmultisaAApled222",
+ "texture_multiampled_2d",
+ "textbbre_mulisampld_2F",
"texture_multisampled_2d",
- "exture_mltisampled_Xd",
- "tetIIre_mltisampled_2d",
- "texzure_multisampled_2d",
- "tAAxtur22_zztorae_1d",
- "texture_storag_1d",
- "texturbb_strageFd",
+ "textuVe_multisMMmpled_2d",
+ "texturA_mwcmmisamplzzd_2d",
+ "texture_muOOtisampeQQ2d",
+ "texbure_storage_1d",
+ "nne5kture_torage_1C",
+ "textue_KKtorarreyy1d",
"texture_storage_1d",
- "teVture_stMMrage_1d",
- "textuwe_storacmzz_1d",
- "textuQQOO_storag1d",
- "texbure_storage_2d",
- "nne5kture_torage_2C",
- "textue_KKtorarreyy2d",
- "texture_storage_2d",
- "tTxtue_ttorageAA2d",
- "QQexture_sorage_2d",
+ "tTxtue_ttorageAA1d",
+ "QQexture_sorage_1d",
"texture_t8rage_d",
- "texture_storag_2d_aaray",
- "exteccre_storage_bd_array",
- "txture_storage_dLLaPPray",
+ "teture_stoaage_2d",
+ "eeextbr_stccrage_2d",
+ "texLLure_Porage_2d",
+ "texture_storage_2d",
+ "tetuWW_sUorage_2d",
+ "texture_stzzrage_2",
+ "text__re_soNa_2d",
+ "texaure_storage_2d_array",
+ "texture_storage2dBaray",
+ "texure_storagezz2darray",
"texture_storage_2d_array",
- "texWWUr_storag_2d_array",
- "texzzure_stoage_2d_array",
- "textNre_stoage_2__rray",
- "texture_storagea3d",
- "texre_stoBage_3d",
- "zzexture_torge_3d",
+ "teaatUre_stHHrage_2dbarray",
+ "texturesOo4ag_2d_array",
+ "textume_sGGrage_2d_array",
+ "teture_storage_3d",
+ "texturezzstG8rageN3d",
+ "texture_storag_3d",
"texture_storage_3d",
- "textureUaatorbge_HHd",
- "te4ture_sOorg_3d",
- "texGGme_storage_3d",
- "u3",
- "8Gzz2",
- "u3",
+ "textuxe_storaAAe_3d",
+ "tbbxture_suuorage_3d",
+ "tejjture_storage_3d",
+ "xccJ3",
+ "g",
+ "Av",
"u32",
- "uAAx",
- "ubb32",
- "u3jj",
- "cqJx",
- "",
- "A",
+ "u3cc",
+ "BUU",
+ "uAAB",
+ "ux",
+ "8",
+ "BUC8",
"u8",
- "cc8",
- "BU",
- "BAA",
- "vxc2",
- "Ue8",
- "vUICB8",
+ "u__",
+ "UU",
+ "u",
+ "vuuc7r",
+ "vkk2",
+ "lec2",
"vec2",
- "vec__",
- "ecUU",
- "vec",
- "vrruc27",
- "ve2kk",
- "vel2f",
- "vec2f",
- "vecf",
- "YYc3f",
- "44ec2f",
- "Rc2h",
- "88ePPr2h",
+ "vc2",
+ "vwY3",
+ "vec44",
+ "Rc2f",
+ "88ePPr2f",
"ec2J",
- "vec2h",
+ "vec2f",
"cVt",
- "vech",
+ "vecf",
"ec2",
- "331i",
- "uuci",
- "4e02i",
- "vec2i",
- "v3ri",
+ "331h",
+ "uuch",
+ "4e02h",
+ "vec2h",
+ "v3rh",
"veYY2g",
- "ve2i",
- "rCCcu",
- "lecu",
+ "ve2h",
+ "rCCci",
+ "leci",
"vec2ZZ",
- "vec2u",
- "tqm9MMu",
- "veUu",
+ "vec2i",
+ "tqm9MMi",
+ "veUi",
"vgc77n",
- "dddd",
- "aaecE",
- "vIIc3",
+ "vdddu",
+ "vEcaau",
+ "vecIIu",
+ "vec2u",
+ "RReZ2ll",
+ "vecNNkrr",
+ "vec",
+ "vcw",
+ "vec",
+ "HH",
"vec3",
- "ZllRR3",
- "kNNecrr",
- "e3",
- "vc3f",
- "veca",
- "HHec3G",
+ "cc3",
+ "vulB223",
+ "5ec3",
+ "eR3f",
+ "gec3f",
+ "ve3f",
"vec3f",
- "cc3f",
- "vB22nllf",
- "vec35",
- "eR3h",
- "gec3h",
- "ve3h",
- "vec3h",
- "vecph",
- "vecK99h",
- "22Rch",
+ "vecpf",
+ "vecK99f",
+ "22Rcf",
"vecnn",
- "veeENi",
- "fHHec3i",
- "vec3i",
- "ss226i",
- "em0i",
+ "veeENh",
+ "fHHec3h",
+ "vec3h",
+ "ss226h",
+ "em0h",
"vecNp",
"ve63",
- "oZWWV3u",
- "vHHu",
+ "oZWWV3i",
+ "vHHi",
+ "vec3i",
+ "vAci",
+ "vTi",
+ "2ec3i",
+ "ve443W",
+ "8Z77",
+ "FeR3",
"vec3u",
- "vAcu",
- "vTu",
- "2ec3u",
- "vec4W",
- "8eZ",
- "FRc",
+ "vebb3",
+ "ggce",
+ "UeSh",
+ "vqcN",
+ "vc",
+ "vccMM",
"vec4",
- "bbc4",
- "gce",
- "ech",
- "vZqNN",
- "v9f",
- "ccHMMf",
+ "xT",
+ "vqZ",
+ "e",
+ "vef",
+ "vecgg4f",
+ "rfe4f",
"vec4f",
- "v4x",
- "veXX",
- "4f",
- "veh",
- "vecgg4h",
- "rfe4h",
- "vec4h",
- "ve4h",
+ "ve4f",
"vggc4D",
"v994Q",
- "eeei",
- "veci",
+ "eeeh",
+ "vech",
"vc4II",
- "vec4i",
- "veqi",
- "Ooc77i",
+ "vec4h",
+ "veqh",
+ "Ooc77h",
"vrrDD",
- "vecju",
- "11ciiFu",
- "jBcRRu",
- "vec4u",
- "vdAc_7u",
+ "vecji",
+ "11ciiFi",
+ "jBcRRi",
+ "vec4i",
+ "vdAc_7i",
"4jj",
"xxkeo",
+ "veW4u",
+ "IQQN1u",
+ "veIu",
+ "vec4u",
+ "vjc4",
+ "e722",
+ "vEElc4g",
};
for (auto _ : state) {
for (auto* str : kStrings) {
@@ -1011,132 +1018,132 @@
BENCHMARK(BuiltinTypeParser);
void BuiltinValueParser(::benchmark::State& state) {
const char* kStrings[] = {
- "barycentriW_coord",
- "bary1IQQtric_coord",
- "baryceItric_cood",
+ "barcentric_coord",
+ "baryce5tri_oord",
+ "ba66yc88ntrc_oord",
"barycentric_coord",
- "barcentric_coojd",
- "ar7cntric_coor22",
- "bEErccentrKg_collrd",
- "clip_distance",
- "5p_distances",
- "c66_di88tances",
+ "barcetric_coard",
+ "bErycentrc_coord",
+ "Qaryentri_coord",
+ "clp_distanc_s",
+ "clip_rNtanc",
+ "clip_ditances",
"clip_distances",
- "alip_itanceE",
- "clip_dEstnces",
- "cliQ_dqsthes",
- "frag_dpth",
- "frag_th",
- "frag_dept",
+ "clTTeeB_distances",
+ "nnipgdis11ancs",
+ "clin_distqnces",
+ "mmBcag_deptX",
+ "fttag_dep7h",
+ "fag_dph",
"frag_depth",
- "frag_depeeBTh",
- "fag_1nnpth",
- "frag_nepth",
- "frBmcct_fXcing",
- "fron7tt_fcGng",
- "frontcing",
+ "frag_epKh",
+ "jjran_deFFt",
+ "g8depEEh",
+ "frLnt_fciDDg",
+ "frhhnt55fScing",
+ "ronZ_facinuu",
"front_facing",
- "fronK_fcing",
- "jjrontfaniFFg",
- "8rEEn_fcig",
- "global_invocatvon_DD",
- "goobal_inhhcation_i55S",
- "global_invocatiun_Zd",
+ "7ront5PPfacing",
+ "font_facSnkk",
+ "fronEEFfa_ing",
+ "globyyl_nvocatbbo_id",
+ "globalJJinvocRinid",
+ "global_Tnvcation_1d",
"global_invocation_id",
- "glPPbal_invoc755ion_id",
- "global_invocSion_kkd",
- "gFobEEl_iSvocatio__id",
- "nstayye_indebb",
- "nRtanc_index",
- "iTstan1e_indx",
+ "Xlobal_vocatioT_id",
+ "global_invocat00o_id",
+ "globalPinvocat77on_id",
+ "inspaceZindex",
+ "PPstanbe_indew",
+ "instssbbH8e_injjex",
"instance_index",
- "XsTancX_inex",
- "instance_in00x",
- "insPance77index",
- "locap_invcZtion_id",
- "lbcl_iPwvocation_id",
- "lHHcabb_i8vocsjjtion_id",
+ "instance_indhx",
+ "insancexxine",
+ "inrQaBce_ineex",
+ "local_invocation_iJJ",
+ "ocaluinvocwtio_id",
+ "lttcalZinvocatio_xxd",
"local_invocation_id",
- "local_invocatihn_id",
- "lcal_invocxxtion_",
- "rroclQinvocatieB_id",
- "locaJJ_invocation_index",
- "loal_ivvocaiow_undex",
- "locatt_Znvocatio_indexx",
+ "local_invocation_99d",
+ "localiocaion_id",
+ "local_invocatinffn_id",
+ "5ocal_invocation_index",
+ "IoUal_invocation_Jndex",
+ "locl_invocation_index",
"local_invocation_index",
- "local_iv99ocation_index",
- "lcal_ivocatin_indx",
- "locnffl_invocation_index",
- "num_workgrou5s",
- "nuIJworkUrouus",
- "num_worgroups",
+ "ltcal_invocation_index",
+ "local_in1ocation_index",
+ "localAAinvocation_inDDex",
+ "Om_woP2grups",
+ "num_workgoups",
+ "num_workgro77ps",
"num_workgroups",
- "ntm_workgroFps",
- "num_workgr1ups",
- "nAAm_woDDkgroups",
- "OostoP",
- "positon",
- "posit77on",
+ "n1m_UUorkAAroups",
+ "Xum_workgrfupAA",
+ "VVum_wrkgrouvs",
+ "posippion",
+ "posTTtion",
+ "kosjj0tion",
"position",
- "AAUUs1timm",
- "XosAftion",
- "posVVvvn",
- "pprimitive_index",
- "primitive_TTndex",
- "prkmitivjj_inde00",
+ "posiion",
+ "posiyyon",
+ "poYizzion",
+ "priWitiiie_index",
+ "6rimitv7_indUUx",
+ "prUUitive_inpe",
"primitive_index",
- "primitie_index",
- "rimitive_inyyex",
- "pzzimitive_ideYY",
- "siWmple_Wndex",
- "6a70UU_index",
- "sale_indUUx",
+ "hrimitiveiTTex",
+ "primitie_inde5",
+ "primtveind1x",
+ "sam44mme_iIdex",
+ "saYDpRe_indYY",
+ "sampjje_index",
"sample_index",
- "samlTTinhex",
- "smple_i5dex",
- "saple_i1e",
- "sammmleI44ask",
- "saRpleYYDDsk",
- "sample_jjask",
+ "sample_idex",
+ "smple_iQQdex",
+ "55amHle_idex",
+ "saxFple_mask",
+ "sapD_mrsk",
+ "sNmple__KKsk",
"sample_mask",
- "sample_ask",
- "sampe_QQask",
- "samplH_ms55",
- "suxFgroup_ik",
- "sugDuprid",
- "sNbgrou_KKid",
+ "saxalT_mask",
+ "sample_vvask",
+ "sjjmple_mak",
+ "subgrnnOOp_i",
+ "sggOOgroOpid",
+ "suwwQgoup_id",
"subgroup_id",
- "suxarTup_id",
- "subgrouvv_id",
- "sjjbgroup_d",
- "subgrnnOOp_invocatin_id",
- "subgroup_invggOOtOon_id",
- "suQQgrup_invocatioww_id",
+ "subgrup_iJ",
+ "subgroup_iD",
+ "OOubgroupid",
+ "subgroup_nvocation_id",
+ "subro00p_invocation_i",
+ "subgroup_vqcation_ld",
"subgroup_invocation_id",
- "subgrup_iJvocation_id",
- "subgroup_iDvocation_id",
- "subgroOOp_invocationid",
- "subgrou_size",
- "00ubgroup_ze",
- "sulgroup_ze",
+ "subgroup_invocation_iu",
+ "subgroup_invo33ation_id",
+ "subgrouNNinvocation_id",
+ "subrMup_sze",
+ "ubgr22up_sRzbb",
+ "subgiiup_size",
"subgroup_size",
- "subgrEup_size",
- "subgroupiisie",
- "subgsoup_siz",
- "vertettins2ex",
- "versii_index",
- "vetex_index",
- "vertex_index",
- "veteuindeoo",
- "verHHx_JUdx",
+ "subgrup_size",
+ "soobgop_sCue",
+ "subgrHHu_izJ",
"vrtyg_ihdggx",
- "wrgroWWp_iBB",
- "workgroupECEcc",
- "woGkgrouee_yy",
- "workgroup_id",
- "wo44kgUup_id",
- "workgroup_i",
+ "vrex_WWndeBB",
+ "vertex_inECEcc",
+ "vertex_index",
+ "veGtex_ieedyy",
+ "ve44teUindex",
+ "vertex_inde",
"workgNoup_id",
+ "MMorkgrssup_id",
+ "workgrDup_Cd",
+ "workgroup_id",
+ "ggTYkgroup_id",
+ "workjjroup_id",
+ "wrkDDroup_i",
};
for (auto _ : state) {
for (auto* str : kStrings) {
@@ -1149,41 +1156,41 @@
BENCHMARK(BuiltinValueParser);
void InterpolationSamplingParser(::benchmark::State& state) {
const char* kStrings[] = {
- "MMentess",
- "DentCr",
- "gTeYter",
- "center",
- "centjjr",
- "cDDte",
"cEEMM9er",
- "entrNid",
- "55entroid",
- "centQoid",
- "centroid",
- "cntroinn",
- "FFenrWWd",
+ "cNter",
+ "55enter",
+ "center",
+ "Qenter",
+ "nnnter",
+ "cenWFr",
"centro66w",
- "evFher",
- "itWWr",
- "ethr",
- "either",
- "5hK",
- "eit4er",
+ "cvntroFd",
+ "cWWntrd",
+ "centroid",
+ "entrod",
+ "5Ktri",
+ "c4ntroid",
"gtnnPr",
- "Sist",
- "ir22V",
- "fprst",
- "first",
- "f9VV9s2",
- "nt",
+ "eSShe",
+ "2itVer",
+ "either",
+ "epther",
+ "eiXV9992",
+ "nte",
"Bs",
- "8BBml",
- "AyACCple",
- "sipBv",
- "sample",
- "A4QQmle",
- "ZZmplT4",
+ "fiBB",
+ "yCCAAAt",
+ "first",
+ "ivit",
+ "A4rsQQ",
+ "T4Zist",
"Xamlle",
+ "ddamle",
+ "sadd",
+ "sample",
+ "si1le",
+ "vmpGG",
+ "jjmpl",
};
for (auto _ : state) {
for (auto* str : kStrings) {
@@ -1196,27 +1203,27 @@
BENCHMARK(InterpolationSamplingParser);
void InterpolationTypeParser(::benchmark::State& state) {
const char* kStrings[] = {
- "fadd",
- "dd",
- "fi1",
- "flat",
- "vGG",
- "jja",
"fwat",
- "Xinnar",
- "ji9ear",
- "lier",
- "linear",
- "lin2WWr",
- "linar",
+ "flXn",
+ "fljt",
+ "flat",
+ "fz",
+ "flWW2",
+ "fat",
"lneVr",
- "lers4ectzzve",
- "ersecti__Y",
- "perspMctkHve",
- "perspective",
- "peIzzpecDive",
- "ersdeqtive",
+ "lnz4ear",
+ "li__Y",
+ "linear",
+ "linHkaM",
+ "lInzzaD",
+ "qnedr",
"persehtive",
+ "perlMMNctiFe",
+ "perspetiv",
+ "perspective",
+ "xersA9tiv",
+ "VVnrspetive",
+ "perspecKv",
};
for (auto _ : state) {
for (auto* str : kStrings) {
@@ -1229,286 +1236,286 @@
BENCHMARK(InterpolationTypeParser);
void TexelFormatParser(::benchmark::State& state) {
const char* kStrings[] = {
- "bNra8uMMFlm",
- "gra8norm",
- "g9x8unrA",
- "bgra8unorm",
- "bgraVVnnrm",
- "bKra8urm",
"bgra8nCBBm",
- "16floot",
- "EE1f88occww",
- "r6fbboat",
- "r16float",
- "r166loat",
- "K1ggoa",
+ "bgrauoorm",
+ "bgra8ccnE88rw",
+ "bgra8unorm",
+ "bgr8bbnorm",
+ "b6ra8unorm",
+ "gKaggnrm",
"r16fE1at",
- "r16sit",
- "rpH6int",
- "raa6sinqq",
- "r16sint",
- "r16sn",
- "rxxxxXsi_",
+ "r16floa",
+ "rHpfloat",
+ "r16float",
+ "qqaa6flGat",
+ "r6loat",
+ "xxxx6_loat",
"r16SSzznt",
- "r16sorm",
- "1o4orm",
- "r16snr",
- "r16snorm",
- "rKsnrm",
- "rzz6sncm",
+ "r16int",
+ "16ont",
+ "r16sint",
+ "r16nt",
+ "rK6st",
+ "rczsint",
"r88an5ggm",
- "r1jjsint",
- "riA6uin1",
- "rlVVu66nt",
- "r16uint",
- "6uic",
- "r16GGnht",
+ "r16snsjrm",
+ "116snoriA",
+ "r16snorm",
+ "rVV6sl66rm",
+ "6norm",
+ "tt1Ghmnom",
"iiyy6int",
- "rv_QQunttm",
- "r6uoLLm",
- "r16Wno7m",
+ "QQt1_vuin",
+ "rLuint",
+ "r16uint",
+ "r1uWcct",
+ "r16uFt",
+ "rzz6yyin",
+ "runorm",
+ "I16Rco_m",
+ "r16uddrm",
"r16unorm",
- "6uvvoFr",
- "ryyunzzrm",
- "runorm",
- "I32Rco_t",
- "r32fddat",
- "M3l22oa",
- "r32float",
- "O32float",
- "KK6TTflmat",
+ "M1l22or",
+ "O16unorm",
+ "KK6TTunmrm",
"rRR2lo",
- "r3s04",
- "rnsiqq",
- "r3BBsint",
- "r32sint",
- "rWB22aint",
- "rjj2sint",
+ "4flo00",
+ "r32nqoa",
+ "r32float",
+ "r32floaBB",
+ "r32f2WBaat",
+ "r32fjjoat",
"66tinHH",
- "r3JJut",
- "rttoouiSt",
+ "r3JJst",
+ "rttoosiSt",
+ "r32sint",
"2r_SSnt",
- "r32uint",
- "rWW2uint",
- "r32uink",
+ "rWW2sint",
+ "r32sink",
"r3bbitt",
- "_1sin",
- "r8sft",
- "ii8ink",
- "r8sint",
- "rwsiUt",
- "I8nnt",
+ "r32u1n",
+ "rf2uiN",
+ "r32uint",
+ "rii2iVt",
+ "r32winU",
+ "r3Funt",
"448s8LLnt",
- "r8snoZZm",
- "MM8snorm",
- "r8norm",
- "r8snorm",
- "rSSMMn6Am",
- "GGgxnorTT",
+ "r8sinZZ",
+ "rMMsint",
+ "r8sint",
+ "8sint",
+ "SSAM6int",
+ "GGxTTint",
"r8snorI",
- "l8uint",
- "r8OOn",
- "r8u5n",
- "r8uint",
- "r8zRint",
- "r8uiPLL",
+ "r8slorm",
+ "rOOsnm",
+ "r8snorm",
+ "8aKo5m",
+ "Rf__zzrm",
+ "r8LLnorP",
"ruihht",
- "runorm",
- "8unjm",
- "r8BB0",
- "r8unorm",
- "xxL8nrm",
- "rIIunorMM",
+ "ruint",
+ "ruit",
+ "r8uint",
+ "08BB",
+ "xxL8un",
+ "r8uiMMIt",
"r8XnFFm",
- "r1ssb10uflpazz",
- "rZZ11b1Frufloat",
- "rrr001b1jfloat",
- "rg11b10ufloat",
- "rgp1b1rrfloaww",
- "QQZ1b10ufloa",
+ "r8unsszz",
+ "r8rrnZZFm",
+ "r8unorm",
+ "rrrjor00",
+ "p8wrrorm",
+ "QZuorm",
"rg__hb1nfloat",
- "rw16loat",
- "rg16floa3",
- "rg1ifoXXt",
- "rg16float",
- "rg16l3",
- "c8O6fvvoat",
+ "rg11w10ufloa",
+ "rg11b103float",
+ "rg11b10ufloat",
+ "rg11b0XXfloai",
+ "rg31b10loa",
+ "rg11c10u8vvoOO",
"rg16vlPaj",
- "Nguspni",
- "r21sint",
- "qJg1siDt",
- "rg16sint",
- "rg6miQt",
- "rJ16int",
+ "ugi6plot",
+ "g16f2oat",
+ "rg16float",
+ "rgD6fJqat",
+ "rg1Qfmoa",
+ "rg16fJat",
"rg1sWWnt",
- "wQg16ggnwrm",
- "rg1zsnorm",
- "rWW6snzzrm",
- "rg16snorm",
- "rg6sno",
- "rKUU6snr99q",
+ "rQQ1wswgnt",
+ "rg16sinz",
+ "rg16sint",
+ "rgWWsinzz",
+ "rg1it",
+ "rK996qqUUn",
"EEg16sRRom",
- "r1uint",
- "rg16uttt",
- "rg1MMin",
- "rg16uint",
- "raaKKTBBint",
- "l5516uIIn",
+ "rg16nor",
+ "rg1tsnorm",
+ "rg16snorm",
+ "rgqnoMMm",
+ "rgT6aanBBrKK",
+ "rl16sII5rm",
"rg16wBBoo",
- "PPg1__unorm",
- "rg16RRnorm",
- "rghSom",
- "rg16unorm",
- "Q1urm",
- "r6un8HHrm",
+ "rg1__PPint",
+ "rRR16uint",
+ "rg16uint",
+ "rgSut",
+ "riQt",
+ "g6uHH8nt",
"rD16unYYrm",
- "rg32floOt",
- "r8II2ZJoat",
- "rgoYfloat",
- "rg32float",
- "rg2floa0X",
- "rcKn2floSt",
+ "rg16unoOm",
+ "r8II6ZJorm",
+ "rg16unorm",
+ "rgoYunorm",
+ "rg6unor0X",
+ "rcKn6unoSm",
"GGg3233la88",
- "XXg3233qint",
- "gzzs4nt",
- "rgtW2siWhh",
- "rg32sint",
- "xg2srnt",
- "rz3eeQnt",
+ "rXX333floqqt",
+ "rz32lo4t",
+ "rg32float",
+ "rWttWKlhhat",
+ "rg3rxoat",
+ "rg32CQeat",
"rg32sYr",
- "xxgm2uinS",
- "rg3ruit",
- "rgyy2uit",
- "rg32uint",
+ "xxgm2sinS",
+ "rg3rsit",
+ "rg32sint",
+ "rgyy2sit",
"r82i8t",
- "rge2uint",
+ "rge2sint",
"hkkg3uint",
- "rgBBsOOt",
- "rg89it",
- "gg8Dint",
- "rg8sint",
- "ag8inn1",
- "qgSiIt",
+ "rg2uOOBnt",
+ "g32ui9t",
+ "rg32uint",
+ "rgg2uDnt",
+ "rgna2in1",
+ "6gIuinS",
"rgsinYY",
- "rYYsnLVVm",
- "m62s8snorI",
- "r8snorjj",
- "rg8snorm",
- "ppgsn7",
- "Ng8sno6m",
+ "Lg8YVVin",
+ "rg8ms2I66",
+ "rg8sint",
+ "jjg8snt",
+ "pp7nt",
+ "rgN6int",
"rg8snorsgg",
- "g8uint",
- "JgOOuqnt",
- "rg00uinMM",
- "rg8uint",
- "rMM8ummnt",
- "rH8uqqt",
+ "rgsnorm",
+ "rg8sJoOOm",
+ "rg8snorm",
+ "MMg8snor00",
+ "rg8snmmMMm",
+ "r8snqHrm",
"gGuin88",
- "gRRuwworm",
- "rgqunorm",
- "gUuom",
- "rg8unorm",
- "g8uBo5MQ",
- "33g8unorm",
+ "wwgRRuit",
+ "rg8uinq",
+ "rg8uint",
+ "8uiU",
+ "BQ85nMM",
+ "rg8u33nt",
"Og8uno33m",
- "gb0awuint",
- "rb_1Aa2uMnkk",
- "rgb102uint",
- "rgb10a2uint",
- "db1auint",
- "rXXb10a25iww55",
+ "rg8uom",
+ "kkgAunb_M",
+ "rg8unorm",
+ "rg8unom",
+ "rduom",
+ "rg55wXXnorm",
"rb10a2uint",
- "rgb12unorm",
- "dgb1JJ2norm",
- "rgb1a2un1r_",
- "rgb10a2unorm",
- "rgb0a2Lnor",
- "99b10a2unrGG",
+ "rgb10a2ut",
+ "rgb1Jadint",
+ "rgb10a2uint",
+ "rb_1a2uint",
+ "rgLL0aint",
+ "rg10G2uin99",
"xxgb102UUnom",
- "9gba16flot",
- "rvba16float",
- "LLgba1622loat",
- "rgba16float",
- "rgabf1loat",
- "rgbaAA6floa",
+ "rgb90a2unom",
+ "rgb10a2uvorm",
+ "rgb10a2unorm",
+ "rgb10LL22unorm",
+ "rgb11a2ufom",
+ "rgb0aAAungrm",
"CUa16flo",
- "zzgba16swnt",
- "nwwba16siMMVV",
- "Xgba16NNit",
- "rgba16sint",
- "rgba1W77eent",
- "vvgba16RP33nt",
+ "rgbw1zzflont",
+ "rgna16flowVVMM",
+ "rgba16float",
+ "rgNNaX6flat",
+ "rgbee77flWWat",
+ "rgb3316PPloavv",
"22gba16sjjnt",
- "rgbaAA6snom",
- "kkba1NsRRorm",
- "rQQba16snorm",
- "rgba16snorm",
- "rgb16suuorm",
- "uuba16snrm",
+ "cgAA16sint",
+ "Ngbakk6RRin",
+ "rgba16sint",
+ "rgba16sinQQ",
+ "rgbuu6sint",
+ "rba6suunt",
"rga1snorZ",
- "rgHa16unt",
- "rgdSSS16uint",
- "rgba16uTTnt",
- "rgba16uint",
- "rmb16ctnt",
- "rgba16uhhnt",
+ "rgba1sHorm",
+ "rgba1dsnoSSSm",
+ "rgba16snorm",
+ "rgba16snTTrm",
+ "rba16cmort",
+ "rgba16snohhm",
"rgba16uiG",
- "HHgbaww6unAArbb",
- "rgba1BBunorm",
- "rgbM2hunogm",
- "rgba16unorm",
- "rgba1unorWW",
- "rgbqq16unorm",
+ "rHbbwAAa16uint",
+ "rgba16uBBnt",
+ "rgba16uint",
+ "hga226Mint",
+ "rgba16unWW",
+ "rqqba16uint",
"rgbar6unUUm",
- "rgba32Eoat",
- "rgRa32floVVrr",
- "rg33OGG3Hflot",
- "rgba32float",
- "55g32Dloat",
- "rSSbB32floQt",
+ "rgba16Eorm",
+ "rgRa16unoVVrr",
+ "rgba16unorm",
+ "rg33OGG1Hunom",
+ "55g16Dnorm",
+ "rSSbB16unoQm",
"zzgba32lat",
- "rb662siAAt",
- "wgba__2nt",
- "rgba32sit",
- "rgba32sint",
- "rga32sirt",
- "rgbRR3Gsint",
+ "rga32loAA66",
+ "rgbw2_loat",
+ "rgba32float",
+ "rgba2float",
+ "rgbr32loat",
+ "rgba32flRRaG",
"KxUbLL31sint",
"rgba32NNWWFt",
- "gbfGUuint",
+ "gbfGUsint",
+ "rgba32sint",
"rgba3FFE6nt",
- "rgba32uint",
"rgba39yyJTTnt",
- "zgba32uit",
+ "zgba32sit",
"rb32uinI",
- "rapin",
- "ttga8nnint",
- "igbK8sint",
- "rgba8sint",
- "rgba8seent",
- "rg_8si11gg",
+ "gb32pt",
+ "ttgnn32uint",
+ "rgba32uint",
+ "rgba3iuiKt",
+ "reeba32uint",
+ "rgbg_2ui11t",
"rgba8snt",
- "rgba8orm",
- "rpbX8no",
- "rgYY6sssnor",
- "rgba8snorm",
- "r77ba8YnIrm",
- "rgbaSSeenonG",
+ "rgbaino",
+ "rpX8si",
+ "rgba8sint",
+ "g6ss8sYYnt",
+ "rIIba8s7Yt",
+ "ngbGSSeeint",
"rgbQlnorm",
- "gba8int",
- "rgba__uint",
- "rDDba8uin",
- "rgba8uint",
- "rga8int",
- "551baluint",
+ "ba8snorm",
+ "rgba8sn__rm",
+ "rgba8snorm",
+ "rgba8soDDm",
+ "rgb8snrm",
+ "rgb5l55nor1",
"rgbc4int",
- "gba8unorm",
- "rgOa811no6m",
- "rgaunosm",
- "rgba8unorm",
- "rgba8unXrm",
- "rg44w8unorm",
+ "gba8uint",
+ "gba6Ou11nt",
+ "rgba8uint",
+ "rsa8unt",
+ "rgbaXuint",
+ "rgbw844int",
"rgba8YYnorm",
+ "gba8unorm",
+ "rTa8unyrm",
+ "rgba8unorm",
+ "bbba8unovv",
+ "rgba8unokm",
+ "Vb58unor9",
};
for (auto _ : state) {
for (auto* str : kStrings) {
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 7e896d3..0926ee1 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -368,6 +368,7 @@
"refract"
"refz"
"requires"
+"resource_binding"
"result"
"return"
"reverseBits"
diff --git a/src/tint/lang/core/core.def b/src/tint/lang/core/core.def
index 07e94ec..237999e 100644
--- a/src/tint/lang/core/core.def
+++ b/src/tint/lang/core/core.def
@@ -179,6 +179,8 @@
subgroup_matrix_result
// sized_binding_array
binding_array
+ // type-less binding array
+ resource_binding
// texel_buffers
texel_buffer
@@ -306,6 +308,7 @@
@display("array<{T}>") type runtime_array<T>
type array<T, N: num>
type binding_array<T, N: num>
+type resource_binding
type sampler
type sampler_comparison
type texture_1d<T>
diff --git a/src/tint/lang/core/enums.cc b/src/tint/lang/core/enums.cc
index d9024d8..c352349 100644
--- a/src/tint/lang/core/enums.cc
+++ b/src/tint/lang/core/enums.cc
@@ -628,6 +628,9 @@
if (str == "ptr") {
return BuiltinType::kPtr;
}
+ if (str == "resource_binding") {
+ return BuiltinType::kResourceBinding;
+ }
if (str == "sampler") {
return BuiltinType::kSampler;
}
@@ -880,6 +883,8 @@
return "mat4x4h";
case BuiltinType::kPtr:
return "ptr";
+ case BuiltinType::kResourceBinding:
+ return "resource_binding";
case BuiltinType::kSampler:
return "sampler";
case BuiltinType::kSamplerComparison:
diff --git a/src/tint/lang/core/enums.h b/src/tint/lang/core/enums.h
index 7e682b3..af9918d 100644
--- a/src/tint/lang/core/enums.h
+++ b/src/tint/lang/core/enums.h
@@ -402,6 +402,7 @@
kMat4X4F,
kMat4X4H,
kPtr,
+ kResourceBinding,
kSampler,
kSamplerComparison,
kSubgroupMatrixLeft,
@@ -526,6 +527,7 @@
"mat4x4f",
"mat4x4h",
"ptr",
+ "resource_binding",
"sampler",
"sampler_comparison",
"subgroup_matrix_left",
diff --git a/src/tint/lang/core/enums_test.cc b/src/tint/lang/core/enums_test.cc
index fb5d869..03eb456 100644
--- a/src/tint/lang/core/enums_test.cc
+++ b/src/tint/lang/core/enums_test.cc
@@ -558,6 +558,7 @@
{"mat4x4f", BuiltinType::kMat4X4F},
{"mat4x4h", BuiltinType::kMat4X4H},
{"ptr", BuiltinType::kPtr},
+ {"resource_binding", BuiltinType::kResourceBinding},
{"sampler", BuiltinType::kSampler},
{"sampler_comparison", BuiltinType::kSamplerComparison},
{"subgroup_matrix_left", BuiltinType::kSubgroupMatrixLeft},
@@ -790,126 +791,129 @@
{"ptd", BuiltinType::kUndefined},
{"pCPtd", BuiltinType::kUndefined},
{"p", BuiltinType::kUndefined},
- {"s5mpler", BuiltinType::kUndefined},
- {"s9jmffler", BuiltinType::kUndefined},
- {"samRvlXXr", BuiltinType::kUndefined},
- {"samper_ompariscn", BuiltinType::kUndefined},
- {"sampler_copaXXi58n", BuiltinType::kUndefined},
- {"samplr_comprison", BuiltinType::kUndefined},
- {"subgrppp_matrix_lecct", BuiltinType::kUndefined},
- {"subgroup_matrvx_left", BuiltinType::kUndefined},
- {"sEEbgrupJmatSSix_left", BuiltinType::kUndefined},
- {"subgrup_marix_result", BuiltinType::kUndefined},
- {"sbgrup_m_trix_resut", BuiltinType::kUndefined},
- {"sbgroup_m_trix_rewwult", BuiltinType::kUndefined},
- {"subgroup_matrix_ri99ddt", BuiltinType::kUndefined},
- {"subgroPP_m99trix_righ", BuiltinType::kUndefined},
- {"sugroup_matrix_rKKght", BuiltinType::kUndefined},
- {"teel_buoofeDD", BuiltinType::kUndefined},
- {"exel_uBeii", BuiltinType::kUndefined},
- {"texl_buqer", BuiltinType::kUndefined},
- {"txt00rLL_d", BuiltinType::kUndefined},
- {"tnxture_16vv", BuiltinType::kUndefined},
- {"trrxtur_nd", BuiltinType::kUndefined},
+ {"resour5e_binding", BuiltinType::kUndefined},
+ {"rejource_bin99iffg", BuiltinType::kUndefined},
+ {"rRsYYuXXce_bivding", BuiltinType::kUndefined},
+ {"cmler", BuiltinType::kUndefined},
+ {"XX8m5le", BuiltinType::kUndefined},
+ {"mpler", BuiltinType::kUndefined},
+ {"samcclr_cppmparison", BuiltinType::kUndefined},
+ {"sampler_comparivon", BuiltinType::kUndefined},
+ {"sampSSerJcomparEEon", BuiltinType::kUndefined},
+ {"subgroup_atrix_let", BuiltinType::kUndefined},
+ {"subgou_mat_x_left", BuiltinType::kUndefined},
+ {"subgroup_mat_iw_left", BuiltinType::kUndefined},
+ {"subgroudd_matrix_resu99t", BuiltinType::kUndefined},
+ {"subgroup_mtrix_99eulPP", BuiltinType::kUndefined},
+ {"suKKgroup_mtrix_result", BuiltinType::kUndefined},
+ {"suDDgroup_maorix_righM", BuiltinType::kUndefined},
+ {"subropBmatriixright", BuiltinType::kUndefined},
+ {"sqgroup_atrix_right", BuiltinType::kUndefined},
+ {"LLexe00bffer", BuiltinType::kUndefined},
+ {"tnxel_bvvffe66", BuiltinType::kUndefined},
+ {"nrxel_buffer", BuiltinType::kUndefined},
{"xxture_eed", BuiltinType::kUndefined},
- {"CCNOxture_2d", BuiltinType::kUndefined},
- {"txture_2d", BuiltinType::kUndefined},
- {"tex4ure_2d_array", BuiltinType::kUndefined},
- {"teNNture_2d_arNNy", BuiltinType::kUndefined},
- {"texture2d_array", BuiltinType::kUndefined},
- {"tuxtre3d", BuiltinType::kUndefined},
- {"textErYYS3A", BuiltinType::kUndefined},
- {"tex0ure_3d", BuiltinType::kUndefined},
- {"texaaure_cube", BuiltinType::kUndefined},
- {"extre_cubmmq", BuiltinType::kUndefined},
- {"texture_cbe", BuiltinType::kUndefined},
- {"tExtue_cube_araUU", BuiltinType::kUndefined},
- {"eturKK_cube_aDDray", BuiltinType::kUndefined},
- {"textut___cu0e_array", BuiltinType::kUndefined},
- {"tpturl_dpAh_2d", BuiltinType::kUndefined},
- {"txture_dMpth_2d", BuiltinType::kUndefined},
- {"BBexture_depth_2d", BuiltinType::kUndefined},
- {"text99e_depth2bb_arnnay", BuiltinType::kUndefined},
- {"EEe1tureAAdepth_2d_arra", BuiltinType::kUndefined},
- {"texturT_dep5h_2d_arra66", BuiltinType::kUndefined},
- {"textuHe_depth_cube", BuiltinType::kUndefined},
- {"texture_dxpthHHcbe", BuiltinType::kUndefined},
- {"zexture_deptyy0cubn", BuiltinType::kUndefined},
- {"texture_deth_cube_array", BuiltinType::kUndefined},
- {"texture_depth_cubeHkray", BuiltinType::kUndefined},
- {"texture_depth_cubearcay", BuiltinType::kUndefined},
- {"texture_depth_urrtiooapled_2d", BuiltinType::kUndefined},
- {"texue_depth_JJultisampled_2d", BuiltinType::kUndefined},
- {"texture_depth_multCCsampld_20", BuiltinType::kUndefined},
- {"99eAAure_exxernal", BuiltinType::kUndefined},
- {"textcre_external", BuiltinType::kUndefined},
- {"texture_Sxternal", BuiltinType::kUndefined},
- {"BBextre_multisaopleds2d", BuiltinType::kUndefined},
- {"texture_multisampld_2d", BuiltinType::kUndefined},
- {"texmmur_multieampled_2d", BuiltinType::kUndefined},
- {"tQQturPP_storage_1gg", BuiltinType::kUndefined},
- {"textr_stoBe_1d", BuiltinType::kUndefined},
- {"tlKKtur_storagN_1d", BuiltinType::kUndefined},
- {"trrture_storage2d", BuiltinType::kUndefined},
- {"texrure_tpprage_2d", BuiltinType::kUndefined},
+ {"CCNOxture_1d", BuiltinType::kUndefined},
+ {"txture_1d", BuiltinType::kUndefined},
+ {"tex4uae_2d", BuiltinType::kUndefined},
+ {"extuNNe_2NN", BuiltinType::kUndefined},
+ {"texture2d", BuiltinType::kUndefined},
+ {"txtureud_array", BuiltinType::kUndefined},
+ {"teYYtuAe_2d_arESy", BuiltinType::kUndefined},
+ {"texture_2d_0rray", BuiltinType::kUndefined},
+ {"texaaure_3d", BuiltinType::kUndefined},
+ {"tqqmmtur_d", BuiltinType::kUndefined},
+ {"textue_3d", BuiltinType::kUndefined},
+ {"tetuUUe_cEb", BuiltinType::kUndefined},
+ {"textuK_DDube", BuiltinType::kUndefined},
+ {"__ext0rt_cube", BuiltinType::kUndefined},
+ {"tepAure_be_array", BuiltinType::kUndefined},
+ {"texture_cube_arMa", BuiltinType::kUndefined},
+ {"texture_BBube_array", BuiltinType::kUndefined},
+ {"nnxtbbre_dpt99_2d", BuiltinType::kUndefined},
+ {"texturEEdeptAA_2d", BuiltinType::kUndefined},
+ {"texture5depth66Td", BuiltinType::kUndefined},
+ {"texture_depth_2H_array", BuiltinType::kUndefined},
+ {"textureHHdepthxxd_aray", BuiltinType::kUndefined},
+ {"textyy0e_depthznd_array", BuiltinType::kUndefined},
+ {"texture_depth_cue", BuiltinType::kUndefined},
+ {"texurH_kepth_cube", BuiltinType::kUndefined},
+ {"exture_cepth_cube", BuiltinType::kUndefined},
+ {"ooexrrure_dpt_cube_array", BuiltinType::kUndefined},
+ {"textre_depthJJube_array", BuiltinType::kUndefined},
+ {"tCCxture_dep0h_ube_array", BuiltinType::kUndefined},
+ {"texure_deAAtx_mult99sampled_2d", BuiltinType::kUndefined},
+ {"texture_cepth_multisampled_2d", BuiltinType::kUndefined},
+ {"texture_deSth_multisampled_2d", BuiltinType::kUndefined},
+ {"textureoeterBBal", BuiltinType::kUndefined},
+ {"texture_extenal", BuiltinType::kUndefined},
+ {"textummeexternal", BuiltinType::kUndefined},
+ {"texggure_multisomPPQle_2d", BuiltinType::kUndefined},
+ {"teture_mltisamBed_2", BuiltinType::kUndefined},
+ {"texture_mlllNKismpled2d", BuiltinType::kUndefined},
+ {"trrture_storage1d", BuiltinType::kUndefined},
+ {"texrure_tpprage_1d", BuiltinType::kUndefined},
{"teyture_storage_PPd", BuiltinType::kUndefined},
- {"texturcc_torageZ2d_array", BuiltinType::kUndefined},
- {"texturestorage_2d_aray", BuiltinType::kUndefined},
- {"texture_storage_2d_00rray", BuiltinType::kUndefined},
- {"texPPuBB_stJrage_ssd", BuiltinType::kUndefined},
- {"texJJre_sffowwagf_3d", BuiltinType::kUndefined},
- {"textIre_stoXXage_3", BuiltinType::kUndefined},
- {"a", BuiltinType::kUndefined},
- {"u3", BuiltinType::kUndefined},
- {"KK2", BuiltinType::kUndefined},
- {"m4", BuiltinType::kUndefined},
- {"o8", BuiltinType::kUndefined},
- {"jNHh", BuiltinType::kUndefined},
- {"vEw3Uc2", BuiltinType::kUndefined},
- {"vuc", BuiltinType::kUndefined},
- {"Krrdd", BuiltinType::kUndefined},
- {"2Pttcf", BuiltinType::kUndefined},
- {"vwwcsf", BuiltinType::kUndefined},
- {"11enncf", BuiltinType::kUndefined},
- {"ve2h", BuiltinType::kUndefined},
- {"vech", BuiltinType::kUndefined},
- {"ecaSSIh", BuiltinType::kUndefined},
- {"vED2i", BuiltinType::kUndefined},
+ {"teture_stoZZcge_2d", BuiltinType::kUndefined},
+ {"txtue_storage_2d", BuiltinType::kUndefined},
+ {"texture00storage_2d", BuiltinType::kUndefined},
+ {"teJturBss_storagePPd_array", BuiltinType::kUndefined},
+ {"textureffsforage_2dwwaJJay", BuiltinType::kUndefined},
+ {"XXexture_stoage_2I_array", BuiltinType::kUndefined},
+ {"textur_oage_d", BuiltinType::kUndefined},
+ {"textue_storage_3d", BuiltinType::kUndefined},
+ {"tuxtreKKstorage_3d", BuiltinType::kUndefined},
+ {"m43", BuiltinType::kUndefined},
+ {"po2", BuiltinType::kUndefined},
+ {"HhNj2", BuiltinType::kUndefined},
+ {"uEw33", BuiltinType::kUndefined},
+ {"u", BuiltinType::kUndefined},
+ {"rdd", BuiltinType::kUndefined},
+ {"Pttc2", BuiltinType::kUndefined},
+ {"vwws2", BuiltinType::kUndefined},
+ {"nncc11", BuiltinType::kUndefined},
+ {"ve2f", BuiltinType::kUndefined},
+ {"vecf", BuiltinType::kUndefined},
+ {"ecaSSIf", BuiltinType::kUndefined},
+ {"vED2h", BuiltinType::kUndefined},
{"veIccR", BuiltinType::kUndefined},
{"ec9", BuiltinType::kUndefined},
- {"aec2u", BuiltinType::kUndefined},
- {"LSc2u", BuiltinType::kUndefined},
+ {"aec2i", BuiltinType::kUndefined},
+ {"LSc2i", BuiltinType::kUndefined},
{"ecmm", BuiltinType::kUndefined},
- {"4eV", BuiltinType::kUndefined},
- {"ec_", BuiltinType::kUndefined},
- {"cQ", BuiltinType::kUndefined},
- {"veERdd", BuiltinType::kUndefined},
- {"vec9", BuiltinType::kUndefined},
- {"e03", BuiltinType::kUndefined},
- {"vzh", BuiltinType::kUndefined},
- {"veccch", BuiltinType::kUndefined},
- {"v_Qch", BuiltinType::kUndefined},
+ {"4ecV", BuiltinType::kUndefined},
+ {"vc__", BuiltinType::kUndefined},
+ {"vQ2", BuiltinType::kUndefined},
+ {"vddRE", BuiltinType::kUndefined},
+ {"e93", BuiltinType::kUndefined},
+ {"03", BuiltinType::kUndefined},
+ {"vzf", BuiltinType::kUndefined},
+ {"vecccf", BuiltinType::kUndefined},
+ {"v_Qcf", BuiltinType::kUndefined},
{"vect", BuiltinType::kUndefined},
{"zz3ecECpp", BuiltinType::kUndefined},
- {"veddhhi", BuiltinType::kUndefined},
- {"e7766u", BuiltinType::kUndefined},
+ {"veddhhh", BuiltinType::kUndefined},
+ {"e7766i", BuiltinType::kUndefined},
{"vec3P", BuiltinType::kUndefined},
- {"vecwu", BuiltinType::kUndefined},
- {"vu", BuiltinType::kUndefined},
- {"6ecXX", BuiltinType::kUndefined},
- {"RR", BuiltinType::kUndefined},
- {"e1V", BuiltinType::kUndefined},
- {"vecHHGG", BuiltinType::kUndefined},
- {"MeFF4f", BuiltinType::kUndefined},
- {"ve4h", BuiltinType::kUndefined},
+ {"vecwi", BuiltinType::kUndefined},
+ {"ecu", BuiltinType::kUndefined},
+ {"vXXc3u", BuiltinType::kUndefined},
+ {"Rc3", BuiltinType::kUndefined},
+ {"eV", BuiltinType::kUndefined},
+ {"GGeHH4", BuiltinType::kUndefined},
+ {"MFFc4", BuiltinType::kUndefined},
+ {"ve4f", BuiltinType::kUndefined},
{"cTgg", BuiltinType::kUndefined},
{"KK1c_Q", BuiltinType::kUndefined},
{"vEc4", BuiltinType::kUndefined},
{"c4M", BuiltinType::kUndefined},
{"veS77G4", BuiltinType::kUndefined},
- {"vKFttu", BuiltinType::kUndefined},
- {"vZZUss4u", BuiltinType::kUndefined},
- {"vc4u", BuiltinType::kUndefined},
+ {"vKFtti", BuiltinType::kUndefined},
+ {"vZZUss4i", BuiltinType::kUndefined},
+ {"vc4i", BuiltinType::kUndefined},
+ {"lec4u", BuiltinType::kUndefined},
+ {"veh4u", BuiltinType::kUndefined},
+ {"vkcTT", BuiltinType::kUndefined},
};
using BuiltinTypeParseTest = testing::TestWithParam<BuiltinTypeCase>;
@@ -968,60 +972,60 @@
};
static constexpr BuiltinValueCase kInvalidBuiltinValueCases[] = {
- {"barycentric_coorl", BuiltinValue::kUndefined},
- {"barycehtric_coord", BuiltinValue::kUndefined},
- {"barycKnrik_TToord", BuiltinValue::kUndefined},
- {"clip_eistanwws", BuiltinValue::kUndefined},
- {"clip_vKsjjances", BuiltinValue::kUndefined},
- {"clip_ditaceYY", BuiltinValue::kUndefined},
- {"EEcag_deIt", BuiltinValue::kUndefined},
- {"fQQag_depth", BuiltinValue::kUndefined},
- {"fra_Pelt", BuiltinValue::kUndefined},
- {"frffHt_facing", BuiltinValue::kUndefined},
- {"frontnfacing", BuiltinValue::kUndefined},
- {"Frongfa66ing", BuiltinValue::kUndefined},
- {"hlobal_invoca8ioss_id", BuiltinValue::kUndefined},
- {"gloFFl_illvocation_id", BuiltinValue::kUndefined},
- {"gloal_injo00ation_2d", BuiltinValue::kUndefined},
- {"instance_igdex", BuiltinValue::kUndefined},
- {"instance_iede", BuiltinValue::kUndefined},
- {"insance_ffndex", BuiltinValue::kUndefined},
- {"oal_invocationid", BuiltinValue::kUndefined},
- {"ocal_invocation_id", BuiltinValue::kUndefined},
- {"local_invocaqion_id", BuiltinValue::kUndefined},
- {"local_invction_iAAex", BuiltinValue::kUndefined},
- {"localinvocation_indvx", BuiltinValue::kUndefined},
- {"local_invocatijj_index", BuiltinValue::kUndefined},
- {"ZZum_workgroups", BuiltinValue::kUndefined},
- {"nOPm_wor2gIIUups", BuiltinValue::kUndefined},
- {"num_workZZroups", BuiltinValue::kUndefined},
- {"pnnsition", BuiltinValue::kUndefined},
- {"HositkkZ22n", BuiltinValue::kUndefined},
- {"positio", BuiltinValue::kUndefined},
- {"pimitRve_idex", BuiltinValue::kUndefined},
- {"primiqqive_inde99", BuiltinValue::kUndefined},
- {"prim77tive_index", BuiltinValue::kUndefined},
- {"samp3_inde", BuiltinValue::kUndefined},
- {"ccamle_iuudex", BuiltinValue::kUndefined},
- {"ampRRe_inde1", BuiltinValue::kUndefined},
- {"samplllmaJJk", BuiltinValue::kUndefined},
- {"smplMMmak", BuiltinValue::kUndefined},
- {"samlT66maxk", BuiltinValue::kUndefined},
- {"sQQbgroJp_id", BuiltinValue::kUndefined},
- {"suubgop_id", BuiltinValue::kUndefined},
- {"subgrup_d", BuiltinValue::kUndefined},
- {"ugroup_qnvoyat33on_id", BuiltinValue::kUndefined},
- {"subgrouxx_invocation_id", BuiltinValue::kUndefined},
- {"subgrNup_ivrcation_d", BuiltinValue::kUndefined},
- {"sugroup_si99e", BuiltinValue::kUndefined},
- {"subgrop_size", BuiltinValue::kUndefined},
- {"suHgroul_ize", BuiltinValue::kUndefined},
- {"_erx_index", BuiltinValue::kUndefined},
- {"vrtex_index", BuiltinValue::kUndefined},
- {"vrtexjindex", BuiltinValue::kUndefined},
- {"EEottkmmroup_id", BuiltinValue::kUndefined},
- {"workgop_id", BuiltinValue::kUndefined},
- {"workgrourr_d", BuiltinValue::kUndefined},
+ {"baycentric_coowwd", BuiltinValue::kUndefined},
+ {"barycentrjK_vvoord", BuiltinValue::kUndefined},
+ {"baryYYntric_cord", BuiltinValue::kUndefined},
+ {"cipEEdistanceI", BuiltinValue::kUndefined},
+ {"clip_diQQtances", BuiltinValue::kUndefined},
+ {"clip_itaPcel", BuiltinValue::kUndefined},
+ {"frg_defftHH", BuiltinValue::kUndefined},
+ {"frag_deptn", BuiltinValue::kUndefined},
+ {"frF6g_gpth", BuiltinValue::kUndefined},
+ {"hront_fass8ng", BuiltinValue::kUndefined},
+ {"frot_FFalling", BuiltinValue::kUndefined},
+ {"f0ont_2acing", BuiltinValue::kUndefined},
+ {"global_invgcation_id", BuiltinValue::kUndefined},
+ {"global_invoceion_id", BuiltinValue::kUndefined},
+ {"global_invoffaton_id", BuiltinValue::kUndefined},
+ {"instace_ide", BuiltinValue::kUndefined},
+ {"insance_index", BuiltinValue::kUndefined},
+ {"intanceqqindex", BuiltinValue::kUndefined},
+ {"oca_invoAAaion_id", BuiltinValue::kUndefined},
+ {"local_invoation_iv", BuiltinValue::kUndefined},
+ {"local_invocation_ij", BuiltinValue::kUndefined},
+ {"locaZZ_invocation_index", BuiltinValue::kUndefined},
+ {"local_2nvocationOinIIPUx", BuiltinValue::kUndefined},
+ {"local_invocatiZZn_index", BuiltinValue::kUndefined},
+ {"num_workgroupnn", BuiltinValue::kUndefined},
+ {"nu22_ZZHrkgkkoups", BuiltinValue::kUndefined},
+ {"num_workgrops", BuiltinValue::kUndefined},
+ {"osiiRn", BuiltinValue::kUndefined},
+ {"posqqt99on", BuiltinValue::kUndefined},
+ {"posit77on", BuiltinValue::kUndefined},
+ {"prmitive3inex", BuiltinValue::kUndefined},
+ {"primitiveindeccu", BuiltinValue::kUndefined},
+ {"priRRitive_i1ex", BuiltinValue::kUndefined},
+ {"sllple_inJJex", BuiltinValue::kUndefined},
+ {"sImplMM_ix", BuiltinValue::kUndefined},
+ {"s66mpleinTex", BuiltinValue::kUndefined},
+ {"sQQmpleJmask", BuiltinValue::kUndefined},
+ {"suumpemask", BuiltinValue::kUndefined},
+ {"sampl_mak", BuiltinValue::kUndefined},
+ {"ygqoup_i33", BuiltinValue::kUndefined},
+ {"subgrouxx_id", BuiltinValue::kUndefined},
+ {"subgrrN_d", BuiltinValue::kUndefined},
+ {"su99group_nvocation_id", BuiltinValue::kUndefined},
+ {"subgoup_invocation_id", BuiltinValue::kUndefined},
+ {"subgloup_inHocaton_id", BuiltinValue::kUndefined},
+ {"sug_oup_sie", BuiltinValue::kUndefined},
+ {"subgroup_sze", BuiltinValue::kUndefined},
+ {"jbgroup_size", BuiltinValue::kUndefined},
+ {"EEetttmmx_index", BuiltinValue::kUndefined},
+ {"verte_ndex", BuiltinValue::kUndefined},
+ {"vertex_irrdx", BuiltinValue::kUndefined},
+ {"workgrxupid", BuiltinValue::kUndefined},
+ {"zzorkgou_id", BuiltinValue::kUndefined},
+ {"workgroup_ed", BuiltinValue::kUndefined},
};
using BuiltinValueParseTest = testing::TestWithParam<BuiltinValueCase>;
@@ -1080,60 +1084,60 @@
};
static constexpr AttributeCase kInvalidAttributeCases[] = {
- {"xign", Attribute::kUndefined},
- {"alzz", Attribute::kUndefined},
- {"alige", Attribute::kUndefined},
- {"iudpZng", Attribute::kUndefined},
- {"buuTTdi00", Attribute::kUndefined},
- {"bvviJJ", Attribute::kUndefined},
- {"blendQsrc", Attribute::kUndefined},
- {"lend3srR", Attribute::kUndefined},
- {"bnd_C", Attribute::kUndefined},
- {"bultPPpr", Attribute::kUndefined},
- {"buDDiltxxn", Attribute::kUndefined},
- {"YYlqumdltin", Attribute::kUndefined},
- {"cFFl__", Attribute::kUndefined},
- {"rrNNlor", Attribute::kUndefined},
- {"loMor", Attribute::kUndefined},
- {"oute", Attribute::kUndefined},
- {"clmpqtx", Attribute::kUndefined},
- {"compte", Attribute::kUndefined},
- {"diag4aostc", Attribute::kUndefined},
- {"diagWWostic", Attribute::kUndefined},
- {"diagjjosti", Attribute::kUndefined},
- {"fjjagment", Attribute::kUndefined},
- {"frjgm1t", Attribute::kUndefined},
- {"fragmet", Attribute::kUndefined},
- {"grou99", Attribute::kUndefined},
- {"gyVVup", Attribute::kUndefined},
- {"rouxZ", Attribute::kUndefined},
- {"3vv", Attribute::kUndefined},
- {"is", Attribute::kUndefined},
- {"F", Attribute::kUndefined},
- {"nput_attachmenteinduux", Attribute::kUndefined},
- {"iKKput_ataIhmnt_index", Attribute::kUndefined},
- {"input_attcJment_index", Attribute::kUndefined},
- {"intCXSSrpolate", Attribute::kUndefined},
- {"iWWterZZJolate", Attribute::kUndefined},
- {"itedp5lamm", Attribute::kUndefined},
- {"nvBBriBBUt", Attribute::kUndefined},
- {"iJJ11ariant", Attribute::kUndefined},
- {"ittfariant", Attribute::kUndefined},
- {"ltttion", Attribute::kUndefined},
- {"lwcaLion", Attribute::kUndefined},
- {"loca1ion", Attribute::kUndefined},
- {"muwwt_use", Attribute::kUndefined},
- {"mt_uee", Attribute::kUndefined},
- {"mus_use", Attribute::kUndefined},
- {"siNNe", Attribute::kUndefined},
- {"sRR__Ul", Attribute::kUndefined},
- {"sHze", Attribute::kUndefined},
- {"veCrtex", Attribute::kUndefined},
- {"ertex", Attribute::kUndefined},
- {"vedpIx", Attribute::kUndefined},
- {"wokgroup_size", Attribute::kUndefined},
- {"Lrkgroup_Nze", Attribute::kUndefined},
- {"wokg_size", Attribute::kUndefined},
+ {"uigZp", Attribute::kUndefined},
+ {"00ui7TT", Attribute::kUndefined},
+ {"vvJJ", Attribute::kUndefined},
+ {"biQding", Attribute::kUndefined},
+ {"bCdRng", Attribute::kUndefined},
+ {"iCi", Attribute::kUndefined},
+ {"blnPPp_srr", Attribute::kUndefined},
+ {"xx8DDuen_src", Attribute::kUndefined},
+ {"lldqqendYYsrc", Attribute::kUndefined},
+ {"uiFFti__", Attribute::kUndefined},
+ {"rrGGNNtin", Attribute::kUndefined},
+ {"buiMlin", Attribute::kUndefined},
+ {"lo", Attribute::kUndefined},
+ {"xllor", Attribute::kUndefined},
+ {"olor", Attribute::kUndefined},
+ {"camp44e", Attribute::kUndefined},
+ {"WWGmpute", Attribute::kUndefined},
+ {"cjjmpue", Attribute::kUndefined},
+ {"djjagnostic", Attribute::kUndefined},
+ {"diagnoj1c", Attribute::kUndefined},
+ {"diagnotic", Attribute::kUndefined},
+ {"99ragment", Attribute::kUndefined},
+ {"fVVagmeny", Attribute::kUndefined},
+ {"frxmeZZt", Attribute::kUndefined},
+ {"g33vvp", Attribute::kUndefined},
+ {"gros9", Attribute::kUndefined},
+ {"grFu", Attribute::kUndefined},
+ {"ue", Attribute::kUndefined},
+ {"Z", Attribute::kUndefined},
+ {"i", Attribute::kUndefined},
+ {"inpMt_attFchmnt_index", Attribute::kUndefined},
+ {"inputWWatZZachment66index", Attribute::kUndefined},
+ {"inpt_attacme5t_indmdx", Attribute::kUndefined},
+ {"BBnterpBlaUe", Attribute::kUndefined},
+ {"inter0olatJ11", Attribute::kUndefined},
+ {"intfrpottate", Attribute::kUndefined},
+ {"inXaittn", Attribute::kUndefined},
+ {"inLwriant", Attribute::kUndefined},
+ {"in1ariant", Attribute::kUndefined},
+ {"lowwation", Attribute::kUndefined},
+ {"latien", Attribute::kUndefined},
+ {"loction", Attribute::kUndefined},
+ {"muNNt_use", Attribute::kUndefined},
+ {"mustUlRRs__", Attribute::kUndefined},
+ {"mHst_use", Attribute::kUndefined},
+ {"srCCe", Attribute::kUndefined},
+ {"ize", Attribute::kUndefined},
+ {"dzIp", Attribute::kUndefined},
+ {"vetex", Attribute::kUndefined},
+ {"LNtx", Attribute::kUndefined},
+ {"r", Attribute::kUndefined},
+ {"wxxrkgqqoup_GizRR", Attribute::kUndefined},
+ {"workSroup_siGGe", Attribute::kUndefined},
+ {"oqkccr8up_size", Attribute::kUndefined},
};
using AttributeParseTest = testing::TestWithParam<AttributeCase>;
diff --git a/src/tint/lang/core/intrinsic/data.cc b/src/tint/lang/core/intrinsic/data.cc
index 146747f..2099c14 100644
--- a/src/tint/lang/core/intrinsic/data.cc
+++ b/src/tint/lang/core/intrinsic/data.cc
@@ -592,6 +592,20 @@
};
+/// TypeMatcher for 'type resource_binding'
+constexpr TypeMatcher kResourceBindingMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchResourceBinding(state, ty)) {
+ return nullptr;
+ }
+ return BuildResourceBinding(state, ty);
+ },
+/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
+ out << style::Type("resource_binding");
+ }
+};
+
+
/// TypeMatcher for 'type sampler'
constexpr TypeMatcher kSamplerMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
@@ -1742,48 +1756,49 @@
/* [29] */ kRuntimeArrayMatcher,
/* [30] */ kArrayMatcher,
/* [31] */ kBindingArrayMatcher,
- /* [32] */ kSamplerMatcher,
- /* [33] */ kSamplerComparisonMatcher,
- /* [34] */ kTexture1DMatcher,
- /* [35] */ kTexture2DMatcher,
- /* [36] */ kTexture2DArrayMatcher,
- /* [37] */ kTexture3DMatcher,
- /* [38] */ kTextureCubeMatcher,
- /* [39] */ kTextureCubeArrayMatcher,
- /* [40] */ kTextureMultisampled2DMatcher,
- /* [41] */ kTextureDepth2DMatcher,
- /* [42] */ kTextureDepth2DArrayMatcher,
- /* [43] */ kTextureDepthCubeMatcher,
- /* [44] */ kTextureDepthCubeArrayMatcher,
- /* [45] */ kTextureDepthMultisampled2DMatcher,
- /* [46] */ kTextureStorage1DMatcher,
- /* [47] */ kTextureStorage2DMatcher,
- /* [48] */ kTextureStorage2DArrayMatcher,
- /* [49] */ kTextureStorage3DMatcher,
- /* [50] */ kTextureExternalMatcher,
- /* [51] */ kTexelBufferMatcher,
- /* [52] */ kInputAttachmentMatcher,
- /* [53] */ kModfResultMatcher,
- /* [54] */ kModfResultVecMatcher,
- /* [55] */ kFrexpResultMatcher,
- /* [56] */ kFrexpResultVecMatcher,
- /* [57] */ kAtomicCompareExchangeResultMatcher,
- /* [58] */ kSubgroupMatrixMatcher,
- /* [59] */ kScalarMatcher,
- /* [60] */ kScalarNoF32Matcher,
- /* [61] */ kScalarNoF16Matcher,
- /* [62] */ kScalarNoI32Matcher,
- /* [63] */ kScalarNoU32Matcher,
- /* [64] */ kScalarNoBoolMatcher,
- /* [65] */ kFiu32F16Matcher,
- /* [66] */ kFiu32Matcher,
- /* [67] */ kFi32F16Matcher,
- /* [68] */ kFi32Matcher,
- /* [69] */ kF32F16Matcher,
- /* [70] */ kIu32Matcher,
- /* [71] */ kIu32Iu8Matcher,
- /* [72] */ kIu8Matcher,
- /* [73] */ kSubgroupMatrixElementsMatcher,
+ /* [32] */ kResourceBindingMatcher,
+ /* [33] */ kSamplerMatcher,
+ /* [34] */ kSamplerComparisonMatcher,
+ /* [35] */ kTexture1DMatcher,
+ /* [36] */ kTexture2DMatcher,
+ /* [37] */ kTexture2DArrayMatcher,
+ /* [38] */ kTexture3DMatcher,
+ /* [39] */ kTextureCubeMatcher,
+ /* [40] */ kTextureCubeArrayMatcher,
+ /* [41] */ kTextureMultisampled2DMatcher,
+ /* [42] */ kTextureDepth2DMatcher,
+ /* [43] */ kTextureDepth2DArrayMatcher,
+ /* [44] */ kTextureDepthCubeMatcher,
+ /* [45] */ kTextureDepthCubeArrayMatcher,
+ /* [46] */ kTextureDepthMultisampled2DMatcher,
+ /* [47] */ kTextureStorage1DMatcher,
+ /* [48] */ kTextureStorage2DMatcher,
+ /* [49] */ kTextureStorage2DArrayMatcher,
+ /* [50] */ kTextureStorage3DMatcher,
+ /* [51] */ kTextureExternalMatcher,
+ /* [52] */ kTexelBufferMatcher,
+ /* [53] */ kInputAttachmentMatcher,
+ /* [54] */ kModfResultMatcher,
+ /* [55] */ kModfResultVecMatcher,
+ /* [56] */ kFrexpResultMatcher,
+ /* [57] */ kFrexpResultVecMatcher,
+ /* [58] */ kAtomicCompareExchangeResultMatcher,
+ /* [59] */ kSubgroupMatrixMatcher,
+ /* [60] */ kScalarMatcher,
+ /* [61] */ kScalarNoF32Matcher,
+ /* [62] */ kScalarNoF16Matcher,
+ /* [63] */ kScalarNoI32Matcher,
+ /* [64] */ kScalarNoU32Matcher,
+ /* [65] */ kScalarNoBoolMatcher,
+ /* [66] */ kFiu32F16Matcher,
+ /* [67] */ kFiu32Matcher,
+ /* [68] */ kFi32F16Matcher,
+ /* [69] */ kFi32Matcher,
+ /* [70] */ kF32F16Matcher,
+ /* [71] */ kIu32Matcher,
+ /* [72] */ kIu32Iu8Matcher,
+ /* [73] */ kIu8Matcher,
+ /* [74] */ kSubgroupMatrixElementsMatcher,
};
/// The template numbers, and number matchers
@@ -1864,7 +1879,7 @@
/* [50] */ MatcherIndex(0),
/* [51] */ MatcherIndex(13),
/* [52] */ MatcherIndex(11),
- /* [53] */ MatcherIndex(58),
+ /* [53] */ MatcherIndex(59),
/* [54] */ MatcherIndex(1),
/* [55] */ MatcherIndex(2),
/* [56] */ MatcherIndex(3),
@@ -1892,7 +1907,7 @@
/* [78] */ MatcherIndex(1),
/* [79] */ MatcherIndex(15),
/* [80] */ MatcherIndex(0),
- /* [81] */ MatcherIndex(58),
+ /* [81] */ MatcherIndex(59),
/* [82] */ MatcherIndex(0),
/* [83] */ MatcherIndex(1),
/* [84] */ MatcherIndex(2),
@@ -1908,47 +1923,47 @@
/* [94] */ MatcherIndex(29),
/* [95] */ MatcherIndex(10),
/* [96] */ MatcherIndex(15),
- /* [97] */ MatcherIndex(58),
+ /* [97] */ MatcherIndex(59),
/* [98] */ MatcherIndex(8),
/* [99] */ MatcherIndex(0),
/* [100] */ MatcherIndex(2),
/* [101] */ MatcherIndex(3),
- /* [102] */ MatcherIndex(58),
+ /* [102] */ MatcherIndex(59),
/* [103] */ MatcherIndex(6),
/* [104] */ MatcherIndex(1),
/* [105] */ MatcherIndex(4),
/* [106] */ MatcherIndex(3),
- /* [107] */ MatcherIndex(58),
+ /* [107] */ MatcherIndex(59),
/* [108] */ MatcherIndex(7),
/* [109] */ MatcherIndex(1),
/* [110] */ MatcherIndex(2),
/* [111] */ MatcherIndex(4),
- /* [112] */ MatcherIndex(58),
+ /* [112] */ MatcherIndex(59),
/* [113] */ MatcherIndex(8),
/* [114] */ MatcherIndex(1),
/* [115] */ MatcherIndex(2),
/* [116] */ MatcherIndex(3),
- /* [117] */ MatcherIndex(58),
+ /* [117] */ MatcherIndex(59),
/* [118] */ MatcherIndex(6),
/* [119] */ MatcherIndex(0),
/* [120] */ MatcherIndex(4),
/* [121] */ MatcherIndex(3),
- /* [122] */ MatcherIndex(58),
+ /* [122] */ MatcherIndex(59),
/* [123] */ MatcherIndex(7),
/* [124] */ MatcherIndex(0),
/* [125] */ MatcherIndex(2),
/* [126] */ MatcherIndex(4),
- /* [127] */ MatcherIndex(58),
+ /* [127] */ MatcherIndex(59),
/* [128] */ MatcherIndex(6),
/* [129] */ MatcherIndex(0),
/* [130] */ MatcherIndex(1),
/* [131] */ MatcherIndex(2),
- /* [132] */ MatcherIndex(58),
+ /* [132] */ MatcherIndex(59),
/* [133] */ MatcherIndex(7),
/* [134] */ MatcherIndex(0),
/* [135] */ MatcherIndex(1),
/* [136] */ MatcherIndex(2),
- /* [137] */ MatcherIndex(58),
+ /* [137] */ MatcherIndex(59),
/* [138] */ MatcherIndex(8),
/* [139] */ MatcherIndex(0),
/* [140] */ MatcherIndex(1),
@@ -1993,121 +2008,121 @@
/* [179] */ MatcherIndex(25),
/* [180] */ MatcherIndex(0),
/* [181] */ MatcherIndex(11),
- /* [182] */ MatcherIndex(56),
+ /* [182] */ MatcherIndex(57),
/* [183] */ MatcherIndex(0),
/* [184] */ MatcherIndex(1),
/* [185] */ MatcherIndex(25),
/* [186] */ MatcherIndex(0),
/* [187] */ MatcherIndex(2),
- /* [188] */ MatcherIndex(54),
+ /* [188] */ MatcherIndex(55),
/* [189] */ MatcherIndex(0),
/* [190] */ MatcherIndex(1),
- /* [191] */ MatcherIndex(46),
+ /* [191] */ MatcherIndex(47),
/* [192] */ MatcherIndex(0),
/* [193] */ MatcherIndex(1),
- /* [194] */ MatcherIndex(47),
+ /* [194] */ MatcherIndex(48),
/* [195] */ MatcherIndex(0),
/* [196] */ MatcherIndex(1),
- /* [197] */ MatcherIndex(48),
+ /* [197] */ MatcherIndex(49),
/* [198] */ MatcherIndex(0),
/* [199] */ MatcherIndex(1),
- /* [200] */ MatcherIndex(49),
+ /* [200] */ MatcherIndex(50),
/* [201] */ MatcherIndex(0),
/* [202] */ MatcherIndex(1),
- /* [203] */ MatcherIndex(51),
+ /* [203] */ MatcherIndex(52),
/* [204] */ MatcherIndex(0),
/* [205] */ MatcherIndex(1),
- /* [206] */ MatcherIndex(46),
+ /* [206] */ MatcherIndex(47),
/* [207] */ MatcherIndex(9),
/* [208] */ MatcherIndex(15),
- /* [209] */ MatcherIndex(47),
+ /* [209] */ MatcherIndex(48),
/* [210] */ MatcherIndex(9),
/* [211] */ MatcherIndex(15),
- /* [212] */ MatcherIndex(48),
+ /* [212] */ MatcherIndex(49),
/* [213] */ MatcherIndex(9),
/* [214] */ MatcherIndex(15),
- /* [215] */ MatcherIndex(49),
+ /* [215] */ MatcherIndex(50),
/* [216] */ MatcherIndex(9),
/* [217] */ MatcherIndex(15),
- /* [218] */ MatcherIndex(51),
+ /* [218] */ MatcherIndex(52),
/* [219] */ MatcherIndex(9),
/* [220] */ MatcherIndex(13),
/* [221] */ MatcherIndex(10),
- /* [222] */ MatcherIndex(46),
+ /* [222] */ MatcherIndex(47),
/* [223] */ MatcherIndex(10),
/* [224] */ MatcherIndex(15),
- /* [225] */ MatcherIndex(47),
+ /* [225] */ MatcherIndex(48),
/* [226] */ MatcherIndex(10),
/* [227] */ MatcherIndex(15),
- /* [228] */ MatcherIndex(48),
+ /* [228] */ MatcherIndex(49),
/* [229] */ MatcherIndex(10),
/* [230] */ MatcherIndex(15),
- /* [231] */ MatcherIndex(49),
+ /* [231] */ MatcherIndex(50),
/* [232] */ MatcherIndex(10),
/* [233] */ MatcherIndex(15),
- /* [234] */ MatcherIndex(51),
+ /* [234] */ MatcherIndex(52),
/* [235] */ MatcherIndex(10),
/* [236] */ MatcherIndex(13),
/* [237] */ MatcherIndex(9),
- /* [238] */ MatcherIndex(46),
+ /* [238] */ MatcherIndex(47),
/* [239] */ MatcherIndex(11),
/* [240] */ MatcherIndex(15),
- /* [241] */ MatcherIndex(47),
+ /* [241] */ MatcherIndex(48),
/* [242] */ MatcherIndex(11),
/* [243] */ MatcherIndex(15),
- /* [244] */ MatcherIndex(48),
+ /* [244] */ MatcherIndex(49),
/* [245] */ MatcherIndex(11),
/* [246] */ MatcherIndex(15),
- /* [247] */ MatcherIndex(49),
+ /* [247] */ MatcherIndex(50),
/* [248] */ MatcherIndex(11),
/* [249] */ MatcherIndex(15),
- /* [250] */ MatcherIndex(51),
+ /* [250] */ MatcherIndex(52),
/* [251] */ MatcherIndex(11),
/* [252] */ MatcherIndex(13),
/* [253] */ MatcherIndex(0),
- /* [254] */ MatcherIndex(46),
+ /* [254] */ MatcherIndex(47),
/* [255] */ MatcherIndex(9),
/* [256] */ MatcherIndex(14),
- /* [257] */ MatcherIndex(46),
+ /* [257] */ MatcherIndex(47),
/* [258] */ MatcherIndex(10),
/* [259] */ MatcherIndex(14),
- /* [260] */ MatcherIndex(46),
+ /* [260] */ MatcherIndex(47),
/* [261] */ MatcherIndex(11),
/* [262] */ MatcherIndex(14),
- /* [263] */ MatcherIndex(47),
+ /* [263] */ MatcherIndex(48),
/* [264] */ MatcherIndex(9),
/* [265] */ MatcherIndex(14),
- /* [266] */ MatcherIndex(47),
+ /* [266] */ MatcherIndex(48),
/* [267] */ MatcherIndex(10),
/* [268] */ MatcherIndex(14),
- /* [269] */ MatcherIndex(47),
+ /* [269] */ MatcherIndex(48),
/* [270] */ MatcherIndex(11),
/* [271] */ MatcherIndex(14),
- /* [272] */ MatcherIndex(48),
+ /* [272] */ MatcherIndex(49),
/* [273] */ MatcherIndex(9),
/* [274] */ MatcherIndex(14),
- /* [275] */ MatcherIndex(48),
+ /* [275] */ MatcherIndex(49),
/* [276] */ MatcherIndex(10),
/* [277] */ MatcherIndex(14),
- /* [278] */ MatcherIndex(48),
+ /* [278] */ MatcherIndex(49),
/* [279] */ MatcherIndex(11),
/* [280] */ MatcherIndex(14),
- /* [281] */ MatcherIndex(49),
+ /* [281] */ MatcherIndex(50),
/* [282] */ MatcherIndex(9),
/* [283] */ MatcherIndex(14),
- /* [284] */ MatcherIndex(49),
+ /* [284] */ MatcherIndex(50),
/* [285] */ MatcherIndex(10),
/* [286] */ MatcherIndex(14),
- /* [287] */ MatcherIndex(49),
+ /* [287] */ MatcherIndex(50),
/* [288] */ MatcherIndex(11),
/* [289] */ MatcherIndex(14),
- /* [290] */ MatcherIndex(51),
+ /* [290] */ MatcherIndex(52),
/* [291] */ MatcherIndex(9),
/* [292] */ MatcherIndex(14),
- /* [293] */ MatcherIndex(51),
+ /* [293] */ MatcherIndex(52),
/* [294] */ MatcherIndex(10),
/* [295] */ MatcherIndex(14),
- /* [296] */ MatcherIndex(51),
+ /* [296] */ MatcherIndex(52),
/* [297] */ MatcherIndex(11),
/* [298] */ MatcherIndex(14),
/* [299] */ MatcherIndex(25),
@@ -2119,41 +2134,41 @@
/* [305] */ MatcherIndex(25),
/* [306] */ MatcherIndex(1),
/* [307] */ MatcherIndex(10),
- /* [308] */ MatcherIndex(55),
+ /* [308] */ MatcherIndex(56),
/* [309] */ MatcherIndex(0),
- /* [310] */ MatcherIndex(53),
+ /* [310] */ MatcherIndex(54),
/* [311] */ MatcherIndex(0),
- /* [312] */ MatcherIndex(34),
+ /* [312] */ MatcherIndex(35),
/* [313] */ MatcherIndex(0),
- /* [314] */ MatcherIndex(35),
+ /* [314] */ MatcherIndex(36),
/* [315] */ MatcherIndex(0),
- /* [316] */ MatcherIndex(36),
+ /* [316] */ MatcherIndex(37),
/* [317] */ MatcherIndex(0),
- /* [318] */ MatcherIndex(37),
+ /* [318] */ MatcherIndex(38),
/* [319] */ MatcherIndex(0),
- /* [320] */ MatcherIndex(38),
+ /* [320] */ MatcherIndex(39),
/* [321] */ MatcherIndex(0),
- /* [322] */ MatcherIndex(39),
+ /* [322] */ MatcherIndex(40),
/* [323] */ MatcherIndex(0),
- /* [324] */ MatcherIndex(40),
+ /* [324] */ MatcherIndex(41),
/* [325] */ MatcherIndex(0),
- /* [326] */ MatcherIndex(34),
+ /* [326] */ MatcherIndex(35),
/* [327] */ MatcherIndex(11),
- /* [328] */ MatcherIndex(35),
+ /* [328] */ MatcherIndex(36),
/* [329] */ MatcherIndex(11),
- /* [330] */ MatcherIndex(36),
+ /* [330] */ MatcherIndex(37),
/* [331] */ MatcherIndex(11),
- /* [332] */ MatcherIndex(37),
+ /* [332] */ MatcherIndex(38),
/* [333] */ MatcherIndex(11),
- /* [334] */ MatcherIndex(38),
+ /* [334] */ MatcherIndex(39),
/* [335] */ MatcherIndex(11),
- /* [336] */ MatcherIndex(39),
+ /* [336] */ MatcherIndex(40),
/* [337] */ MatcherIndex(11),
/* [338] */ MatcherIndex(13),
/* [339] */ MatcherIndex(1),
- /* [340] */ MatcherIndex(52),
+ /* [340] */ MatcherIndex(53),
/* [341] */ MatcherIndex(0),
- /* [342] */ MatcherIndex(57),
+ /* [342] */ MatcherIndex(58),
/* [343] */ MatcherIndex(0),
/* [344] */ MatcherIndex(16),
/* [345] */ MatcherIndex(0),
@@ -2209,28 +2224,28 @@
/* [395] */ MatcherIndex(11),
/* [396] */ MatcherIndex(24),
/* [397] */ MatcherIndex(12),
- /* [398] */ MatcherIndex(65),
- /* [399] */ MatcherIndex(69),
- /* [400] */ MatcherIndex(70),
- /* [401] */ MatcherIndex(59),
- /* [402] */ MatcherIndex(67),
- /* [403] */ MatcherIndex(66),
- /* [404] */ MatcherIndex(41),
- /* [405] */ MatcherIndex(42),
- /* [406] */ MatcherIndex(43),
- /* [407] */ MatcherIndex(44),
- /* [408] */ MatcherIndex(45),
- /* [409] */ MatcherIndex(50),
- /* [410] */ MatcherIndex(32),
- /* [411] */ MatcherIndex(33),
- /* [412] */ MatcherIndex(71),
- /* [413] */ MatcherIndex(72),
- /* [414] */ MatcherIndex(62),
- /* [415] */ MatcherIndex(63),
- /* [416] */ MatcherIndex(60),
- /* [417] */ MatcherIndex(61),
- /* [418] */ MatcherIndex(64),
- /* [419] */ MatcherIndex(73),
+ /* [398] */ MatcherIndex(66),
+ /* [399] */ MatcherIndex(70),
+ /* [400] */ MatcherIndex(71),
+ /* [401] */ MatcherIndex(60),
+ /* [402] */ MatcherIndex(68),
+ /* [403] */ MatcherIndex(67),
+ /* [404] */ MatcherIndex(42),
+ /* [405] */ MatcherIndex(43),
+ /* [406] */ MatcherIndex(44),
+ /* [407] */ MatcherIndex(45),
+ /* [408] */ MatcherIndex(46),
+ /* [409] */ MatcherIndex(51),
+ /* [410] */ MatcherIndex(33),
+ /* [411] */ MatcherIndex(34),
+ /* [412] */ MatcherIndex(72),
+ /* [413] */ MatcherIndex(73),
+ /* [414] */ MatcherIndex(63),
+ /* [415] */ MatcherIndex(64),
+ /* [416] */ MatcherIndex(61),
+ /* [417] */ MatcherIndex(62),
+ /* [418] */ MatcherIndex(65),
+ /* [419] */ MatcherIndex(74),
};
static_assert(MatcherIndicesIndex::CanIndex(kMatcherIndices),
diff --git a/src/tint/lang/core/intrinsic/type_matchers.h b/src/tint/lang/core/intrinsic/type_matchers.h
index 4fc1b72..eacfb13 100644
--- a/src/tint/lang/core/intrinsic/type_matchers.h
+++ b/src/tint/lang/core/intrinsic/type_matchers.h
@@ -51,6 +51,7 @@
#include "src/tint/lang/core/type/multisampled_texture.h"
#include "src/tint/lang/core/type/pointer.h"
#include "src/tint/lang/core/type/reference.h"
+#include "src/tint/lang/core/type/resource_binding.h"
#include "src/tint/lang/core/type/sampled_texture.h"
#include "src/tint/lang/core/type/storage_texture.h"
#include "src/tint/lang/core/type/string.h"
@@ -358,6 +359,22 @@
return state.types.runtime_array(el);
}
+inline const type::ResourceBinding* BuildResourceBinding(intrinsic::MatchState& state,
+ const type::Type*) {
+ return state.types.resource_binding();
+}
+
+inline bool MatchResourceBinding(intrinsic::MatchState&, const type::Type* ty) {
+ if (ty->Is<intrinsic::Any>()) {
+ return true;
+ }
+
+ if (ty->Is<type::ResourceBinding>()) {
+ return true;
+ }
+ return false;
+}
+
inline const type::BindingArray* BuildBindingArray(intrinsic::MatchState& state,
const type::Type*,
const type::Type* el,
diff --git a/src/tint/lang/core/ir/validator_value_test.cc b/src/tint/lang/core/ir/validator_value_test.cc
index 48f73b5..f431f2d 100644
--- a/src/tint/lang/core/ir/validator_value_test.cc
+++ b/src/tint/lang/core/ir/validator_value_test.cc
@@ -746,6 +746,21 @@
)")) << res.Failure();
}
+TEST_F(IR_ValidatorTest, Var_ResourceBinding_NonHandleAddressSpace) {
+ auto* v = b.Var(ty.ptr(AddressSpace::kPrivate, ty.resource_binding(), read));
+ mod.root_block->Append(v);
+
+ auto res = ir::Validate(mod);
+ ASSERT_NE(res, Success);
+ EXPECT_THAT(
+ res.Failure().reason,
+ testing::HasSubstr(
+ R"(:2:3 error: var: handle types can only be declared in the 'handle' address space
+ %1:ptr<private, resource_binding, read> = var undef
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+)")) << res.Failure();
+}
+
TEST_F(IR_ValidatorTest, Var_InputAttachementIndex_NonHandle) {
auto* v = b.Var(ty.ptr(AddressSpace::kPrivate, ty.f32(), read_write));
v->SetInputAttachmentIndex(0);
diff --git a/src/tint/lang/core/type/type.cc b/src/tint/lang/core/type/type.cc
index 4ae6135..839748a 100644
--- a/src/tint/lang/core/type/type.cc
+++ b/src/tint/lang/core/type/type.cc
@@ -39,6 +39,7 @@
#include "src/tint/lang/core/type/matrix.h"
#include "src/tint/lang/core/type/pointer.h"
#include "src/tint/lang/core/type/reference.h"
+#include "src/tint/lang/core/type/resource_binding.h"
#include "src/tint/lang/core/type/sampler.h"
#include "src/tint/lang/core/type/struct.h"
#include "src/tint/lang/core/type/texture.h"
@@ -166,7 +167,7 @@
}
bool Type::IsHandle() const {
- if (IsAnyOf<Sampler, Texture>()) {
+ if (IsAnyOf<Sampler, Texture, ResourceBinding>()) {
return true;
}
if (auto* binding_array = As<BindingArray>()) {
diff --git a/src/tint/lang/wgsl/intrinsic/data.cc b/src/tint/lang/wgsl/intrinsic/data.cc
index 7523873..ed9d1f2 100644
--- a/src/tint/lang/wgsl/intrinsic/data.cc
+++ b/src/tint/lang/wgsl/intrinsic/data.cc
@@ -676,6 +676,20 @@
};
+/// TypeMatcher for 'type resource_binding'
+constexpr TypeMatcher kResourceBindingMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchResourceBinding(state, ty)) {
+ return nullptr;
+ }
+ return BuildResourceBinding(state, ty);
+ },
+/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
+ out << style::Type("resource_binding");
+ }
+};
+
+
/// TypeMatcher for 'type sampler'
constexpr TypeMatcher kSamplerMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
@@ -2073,57 +2087,58 @@
/* [32] */ kRuntimeArrayMatcher,
/* [33] */ kArrayMatcher,
/* [34] */ kBindingArrayMatcher,
- /* [35] */ kSamplerMatcher,
- /* [36] */ kSamplerComparisonMatcher,
- /* [37] */ kTexture1DMatcher,
- /* [38] */ kTexture2DMatcher,
- /* [39] */ kTexture2DArrayMatcher,
- /* [40] */ kTexture3DMatcher,
- /* [41] */ kTextureCubeMatcher,
- /* [42] */ kTextureCubeArrayMatcher,
- /* [43] */ kTextureMultisampled2DMatcher,
- /* [44] */ kTextureDepth2DMatcher,
- /* [45] */ kTextureDepth2DArrayMatcher,
- /* [46] */ kTextureDepthCubeMatcher,
- /* [47] */ kTextureDepthCubeArrayMatcher,
- /* [48] */ kTextureDepthMultisampled2DMatcher,
- /* [49] */ kTextureStorage1DMatcher,
- /* [50] */ kTextureStorage2DMatcher,
- /* [51] */ kTextureStorage2DArrayMatcher,
- /* [52] */ kTextureStorage3DMatcher,
- /* [53] */ kTextureExternalMatcher,
- /* [54] */ kTexelBufferMatcher,
- /* [55] */ kInputAttachmentMatcher,
- /* [56] */ kModfResultMatcher,
- /* [57] */ kModfResultVecMatcher,
- /* [58] */ kFrexpResultMatcher,
- /* [59] */ kFrexpResultVecMatcher,
- /* [60] */ kAtomicCompareExchangeResultMatcher,
- /* [61] */ kSubgroupMatrixMatcher,
- /* [62] */ kConstructibleMatcher,
- /* [63] */ kScalarMatcher,
- /* [64] */ kConcreteScalarMatcher,
- /* [65] */ kScalarNoF32Matcher,
- /* [66] */ kScalarNoF16Matcher,
- /* [67] */ kScalarNoI32Matcher,
- /* [68] */ kScalarNoU32Matcher,
- /* [69] */ kScalarNoBoolMatcher,
- /* [70] */ kFiaFiu32F16Matcher,
- /* [71] */ kFiaFi32F16Matcher,
- /* [72] */ kFiaFiu32Matcher,
- /* [73] */ kFaF32Matcher,
- /* [74] */ kFaF32F16Matcher,
- /* [75] */ kIaIu32Matcher,
- /* [76] */ kIaI32Matcher,
- /* [77] */ kFiu32F16Matcher,
- /* [78] */ kFiu32Matcher,
- /* [79] */ kFi32F16Matcher,
- /* [80] */ kFi32Matcher,
- /* [81] */ kF32F16Matcher,
- /* [82] */ kIu32Matcher,
- /* [83] */ kIu32Iu8Matcher,
- /* [84] */ kIu8Matcher,
- /* [85] */ kSubgroupMatrixElementsMatcher,
+ /* [35] */ kResourceBindingMatcher,
+ /* [36] */ kSamplerMatcher,
+ /* [37] */ kSamplerComparisonMatcher,
+ /* [38] */ kTexture1DMatcher,
+ /* [39] */ kTexture2DMatcher,
+ /* [40] */ kTexture2DArrayMatcher,
+ /* [41] */ kTexture3DMatcher,
+ /* [42] */ kTextureCubeMatcher,
+ /* [43] */ kTextureCubeArrayMatcher,
+ /* [44] */ kTextureMultisampled2DMatcher,
+ /* [45] */ kTextureDepth2DMatcher,
+ /* [46] */ kTextureDepth2DArrayMatcher,
+ /* [47] */ kTextureDepthCubeMatcher,
+ /* [48] */ kTextureDepthCubeArrayMatcher,
+ /* [49] */ kTextureDepthMultisampled2DMatcher,
+ /* [50] */ kTextureStorage1DMatcher,
+ /* [51] */ kTextureStorage2DMatcher,
+ /* [52] */ kTextureStorage2DArrayMatcher,
+ /* [53] */ kTextureStorage3DMatcher,
+ /* [54] */ kTextureExternalMatcher,
+ /* [55] */ kTexelBufferMatcher,
+ /* [56] */ kInputAttachmentMatcher,
+ /* [57] */ kModfResultMatcher,
+ /* [58] */ kModfResultVecMatcher,
+ /* [59] */ kFrexpResultMatcher,
+ /* [60] */ kFrexpResultVecMatcher,
+ /* [61] */ kAtomicCompareExchangeResultMatcher,
+ /* [62] */ kSubgroupMatrixMatcher,
+ /* [63] */ kConstructibleMatcher,
+ /* [64] */ kScalarMatcher,
+ /* [65] */ kConcreteScalarMatcher,
+ /* [66] */ kScalarNoF32Matcher,
+ /* [67] */ kScalarNoF16Matcher,
+ /* [68] */ kScalarNoI32Matcher,
+ /* [69] */ kScalarNoU32Matcher,
+ /* [70] */ kScalarNoBoolMatcher,
+ /* [71] */ kFiaFiu32F16Matcher,
+ /* [72] */ kFiaFi32F16Matcher,
+ /* [73] */ kFiaFiu32Matcher,
+ /* [74] */ kFaF32Matcher,
+ /* [75] */ kFaF32F16Matcher,
+ /* [76] */ kIaIu32Matcher,
+ /* [77] */ kIaI32Matcher,
+ /* [78] */ kFiu32F16Matcher,
+ /* [79] */ kFiu32Matcher,
+ /* [80] */ kFi32F16Matcher,
+ /* [81] */ kFi32Matcher,
+ /* [82] */ kF32F16Matcher,
+ /* [83] */ kIu32Matcher,
+ /* [84] */ kIu32Iu8Matcher,
+ /* [85] */ kIu8Matcher,
+ /* [86] */ kSubgroupMatrixElementsMatcher,
};
/// The template numbers, and number matchers
@@ -2165,7 +2180,7 @@
/* [10] */ MatcherIndex(11),
/* [11] */ MatcherIndex(5),
/* [12] */ MatcherIndex(15),
- /* [13] */ MatcherIndex(78),
+ /* [13] */ MatcherIndex(79),
/* [14] */ MatcherIndex(29),
/* [15] */ MatcherIndex(18),
/* [16] */ MatcherIndex(33),
@@ -2209,7 +2224,7 @@
/* [54] */ MatcherIndex(31),
/* [55] */ MatcherIndex(0),
/* [56] */ MatcherIndex(14),
- /* [57] */ MatcherIndex(61),
+ /* [57] */ MatcherIndex(62),
/* [58] */ MatcherIndex(1),
/* [59] */ MatcherIndex(2),
/* [60] */ MatcherIndex(3),
@@ -2238,7 +2253,7 @@
/* [83] */ MatcherIndex(1),
/* [84] */ MatcherIndex(16),
/* [85] */ MatcherIndex(11),
- /* [86] */ MatcherIndex(61),
+ /* [86] */ MatcherIndex(62),
/* [87] */ MatcherIndex(0),
/* [88] */ MatcherIndex(1),
/* [89] */ MatcherIndex(2),
@@ -2255,32 +2270,32 @@
/* [100] */ MatcherIndex(12),
/* [101] */ MatcherIndex(16),
/* [102] */ MatcherIndex(9),
- /* [103] */ MatcherIndex(61),
+ /* [103] */ MatcherIndex(62),
/* [104] */ MatcherIndex(8),
/* [105] */ MatcherIndex(0),
/* [106] */ MatcherIndex(2),
/* [107] */ MatcherIndex(3),
- /* [108] */ MatcherIndex(61),
+ /* [108] */ MatcherIndex(62),
/* [109] */ MatcherIndex(6),
/* [110] */ MatcherIndex(1),
/* [111] */ MatcherIndex(4),
/* [112] */ MatcherIndex(3),
- /* [113] */ MatcherIndex(61),
+ /* [113] */ MatcherIndex(62),
/* [114] */ MatcherIndex(7),
/* [115] */ MatcherIndex(1),
/* [116] */ MatcherIndex(2),
/* [117] */ MatcherIndex(4),
- /* [118] */ MatcherIndex(61),
+ /* [118] */ MatcherIndex(62),
/* [119] */ MatcherIndex(8),
/* [120] */ MatcherIndex(1),
/* [121] */ MatcherIndex(2),
/* [122] */ MatcherIndex(3),
- /* [123] */ MatcherIndex(61),
+ /* [123] */ MatcherIndex(62),
/* [124] */ MatcherIndex(6),
/* [125] */ MatcherIndex(0),
/* [126] */ MatcherIndex(4),
/* [127] */ MatcherIndex(3),
- /* [128] */ MatcherIndex(61),
+ /* [128] */ MatcherIndex(62),
/* [129] */ MatcherIndex(7),
/* [130] */ MatcherIndex(0),
/* [131] */ MatcherIndex(2),
@@ -2336,7 +2351,7 @@
/* [181] */ MatcherIndex(0),
/* [182] */ MatcherIndex(27),
/* [183] */ MatcherIndex(1),
- /* [184] */ MatcherIndex(78),
+ /* [184] */ MatcherIndex(79),
/* [185] */ MatcherIndex(27),
/* [186] */ MatcherIndex(1),
/* [187] */ MatcherIndex(2),
@@ -2352,43 +2367,43 @@
/* [197] */ MatcherIndex(27),
/* [198] */ MatcherIndex(0),
/* [199] */ MatcherIndex(13),
- /* [200] */ MatcherIndex(59),
+ /* [200] */ MatcherIndex(60),
/* [201] */ MatcherIndex(0),
/* [202] */ MatcherIndex(1),
/* [203] */ MatcherIndex(27),
/* [204] */ MatcherIndex(0),
/* [205] */ MatcherIndex(2),
- /* [206] */ MatcherIndex(57),
+ /* [206] */ MatcherIndex(58),
/* [207] */ MatcherIndex(0),
/* [208] */ MatcherIndex(1),
- /* [209] */ MatcherIndex(49),
+ /* [209] */ MatcherIndex(50),
/* [210] */ MatcherIndex(0),
/* [211] */ MatcherIndex(1),
- /* [212] */ MatcherIndex(50),
+ /* [212] */ MatcherIndex(51),
/* [213] */ MatcherIndex(0),
/* [214] */ MatcherIndex(1),
- /* [215] */ MatcherIndex(51),
+ /* [215] */ MatcherIndex(52),
/* [216] */ MatcherIndex(0),
/* [217] */ MatcherIndex(1),
- /* [218] */ MatcherIndex(52),
+ /* [218] */ MatcherIndex(53),
/* [219] */ MatcherIndex(0),
/* [220] */ MatcherIndex(1),
- /* [221] */ MatcherIndex(54),
+ /* [221] */ MatcherIndex(55),
/* [222] */ MatcherIndex(0),
/* [223] */ MatcherIndex(1),
- /* [224] */ MatcherIndex(49),
+ /* [224] */ MatcherIndex(50),
/* [225] */ MatcherIndex(1),
/* [226] */ MatcherIndex(2),
- /* [227] */ MatcherIndex(50),
+ /* [227] */ MatcherIndex(51),
/* [228] */ MatcherIndex(1),
/* [229] */ MatcherIndex(2),
- /* [230] */ MatcherIndex(51),
+ /* [230] */ MatcherIndex(52),
/* [231] */ MatcherIndex(1),
/* [232] */ MatcherIndex(2),
- /* [233] */ MatcherIndex(52),
+ /* [233] */ MatcherIndex(53),
/* [234] */ MatcherIndex(1),
/* [235] */ MatcherIndex(2),
- /* [236] */ MatcherIndex(54),
+ /* [236] */ MatcherIndex(55),
/* [237] */ MatcherIndex(1),
/* [238] */ MatcherIndex(2),
/* [239] */ MatcherIndex(27),
@@ -2399,9 +2414,9 @@
/* [244] */ MatcherIndex(6),
/* [245] */ MatcherIndex(17),
/* [246] */ MatcherIndex(14),
- /* [247] */ MatcherIndex(58),
+ /* [247] */ MatcherIndex(59),
/* [248] */ MatcherIndex(0),
- /* [249] */ MatcherIndex(56),
+ /* [249] */ MatcherIndex(57),
/* [250] */ MatcherIndex(0),
/* [251] */ MatcherIndex(17),
/* [252] */ MatcherIndex(13),
@@ -2409,39 +2424,39 @@
/* [254] */ MatcherIndex(11),
/* [255] */ MatcherIndex(17),
/* [256] */ MatcherIndex(12),
- /* [257] */ MatcherIndex(37),
+ /* [257] */ MatcherIndex(38),
/* [258] */ MatcherIndex(0),
- /* [259] */ MatcherIndex(38),
+ /* [259] */ MatcherIndex(39),
/* [260] */ MatcherIndex(0),
- /* [261] */ MatcherIndex(39),
+ /* [261] */ MatcherIndex(40),
/* [262] */ MatcherIndex(0),
- /* [263] */ MatcherIndex(40),
+ /* [263] */ MatcherIndex(41),
/* [264] */ MatcherIndex(0),
- /* [265] */ MatcherIndex(41),
+ /* [265] */ MatcherIndex(42),
/* [266] */ MatcherIndex(0),
- /* [267] */ MatcherIndex(42),
+ /* [267] */ MatcherIndex(43),
/* [268] */ MatcherIndex(0),
- /* [269] */ MatcherIndex(43),
+ /* [269] */ MatcherIndex(44),
/* [270] */ MatcherIndex(0),
/* [271] */ MatcherIndex(17),
/* [272] */ MatcherIndex(0),
- /* [273] */ MatcherIndex(37),
+ /* [273] */ MatcherIndex(38),
/* [274] */ MatcherIndex(13),
- /* [275] */ MatcherIndex(38),
+ /* [275] */ MatcherIndex(39),
/* [276] */ MatcherIndex(13),
- /* [277] */ MatcherIndex(39),
+ /* [277] */ MatcherIndex(40),
/* [278] */ MatcherIndex(13),
- /* [279] */ MatcherIndex(40),
+ /* [279] */ MatcherIndex(41),
/* [280] */ MatcherIndex(13),
- /* [281] */ MatcherIndex(41),
+ /* [281] */ MatcherIndex(42),
/* [282] */ MatcherIndex(13),
- /* [283] */ MatcherIndex(42),
+ /* [283] */ MatcherIndex(43),
/* [284] */ MatcherIndex(13),
/* [285] */ MatcherIndex(15),
/* [286] */ MatcherIndex(0),
- /* [287] */ MatcherIndex(55),
+ /* [287] */ MatcherIndex(56),
/* [288] */ MatcherIndex(0),
- /* [289] */ MatcherIndex(60),
+ /* [289] */ MatcherIndex(61),
/* [290] */ MatcherIndex(0),
/* [291] */ MatcherIndex(15),
/* [292] */ MatcherIndex(9),
@@ -2501,33 +2516,33 @@
/* [346] */ MatcherIndex(13),
/* [347] */ MatcherIndex(26),
/* [348] */ MatcherIndex(14),
- /* [349] */ MatcherIndex(70),
- /* [350] */ MatcherIndex(74),
- /* [351] */ MatcherIndex(82),
- /* [352] */ MatcherIndex(76),
- /* [353] */ MatcherIndex(63),
- /* [354] */ MatcherIndex(71),
- /* [355] */ MatcherIndex(62),
- /* [356] */ MatcherIndex(44),
- /* [357] */ MatcherIndex(45),
- /* [358] */ MatcherIndex(46),
- /* [359] */ MatcherIndex(47),
- /* [360] */ MatcherIndex(48),
- /* [361] */ MatcherIndex(53),
- /* [362] */ MatcherIndex(35),
- /* [363] */ MatcherIndex(36),
+ /* [349] */ MatcherIndex(71),
+ /* [350] */ MatcherIndex(75),
+ /* [351] */ MatcherIndex(83),
+ /* [352] */ MatcherIndex(77),
+ /* [353] */ MatcherIndex(64),
+ /* [354] */ MatcherIndex(72),
+ /* [355] */ MatcherIndex(63),
+ /* [356] */ MatcherIndex(45),
+ /* [357] */ MatcherIndex(46),
+ /* [358] */ MatcherIndex(47),
+ /* [359] */ MatcherIndex(48),
+ /* [360] */ MatcherIndex(49),
+ /* [361] */ MatcherIndex(54),
+ /* [362] */ MatcherIndex(36),
+ /* [363] */ MatcherIndex(37),
/* [364] */ MatcherIndex(10),
- /* [365] */ MatcherIndex(77),
- /* [366] */ MatcherIndex(81),
- /* [367] */ MatcherIndex(83),
- /* [368] */ MatcherIndex(84),
- /* [369] */ MatcherIndex(64),
- /* [370] */ MatcherIndex(75),
- /* [371] */ MatcherIndex(67),
- /* [372] */ MatcherIndex(68),
- /* [373] */ MatcherIndex(65),
- /* [374] */ MatcherIndex(66),
- /* [375] */ MatcherIndex(69),
+ /* [365] */ MatcherIndex(78),
+ /* [366] */ MatcherIndex(82),
+ /* [367] */ MatcherIndex(84),
+ /* [368] */ MatcherIndex(85),
+ /* [369] */ MatcherIndex(65),
+ /* [370] */ MatcherIndex(76),
+ /* [371] */ MatcherIndex(68),
+ /* [372] */ MatcherIndex(69),
+ /* [373] */ MatcherIndex(66),
+ /* [374] */ MatcherIndex(67),
+ /* [375] */ MatcherIndex(70),
};
static_assert(MatcherIndicesIndex::CanIndex(kMatcherIndices),
diff --git a/src/tint/lang/wgsl/resolver/BUILD.bazel b/src/tint/lang/wgsl/resolver/BUILD.bazel
index cb5763b..43c194e 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.bazel
+++ b/src/tint/lang/wgsl/resolver/BUILD.bazel
@@ -146,6 +146,7 @@
"resolver_helper_test.cc",
"resolver_helper_test.h",
"resolver_test.cc",
+ "resource_binding_test.cc",
"root_identifier_test.cc",
"side_effects_test.cc",
"struct_address_space_use_test.cc",
diff --git a/src/tint/lang/wgsl/resolver/BUILD.cmake b/src/tint/lang/wgsl/resolver/BUILD.cmake
index 8bb3e62..31f1134 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.cmake
+++ b/src/tint/lang/wgsl/resolver/BUILD.cmake
@@ -147,6 +147,7 @@
lang/wgsl/resolver/resolver_helper_test.cc
lang/wgsl/resolver/resolver_helper_test.h
lang/wgsl/resolver/resolver_test.cc
+ lang/wgsl/resolver/resource_binding_test.cc
lang/wgsl/resolver/root_identifier_test.cc
lang/wgsl/resolver/side_effects_test.cc
lang/wgsl/resolver/struct_address_space_use_test.cc
diff --git a/src/tint/lang/wgsl/resolver/BUILD.gn b/src/tint/lang/wgsl/resolver/BUILD.gn
index 760f86d..9e80715 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.gn
+++ b/src/tint/lang/wgsl/resolver/BUILD.gn
@@ -147,6 +147,7 @@
"resolver_helper_test.cc",
"resolver_helper_test.h",
"resolver_test.cc",
+ "resource_binding_test.cc",
"root_identifier_test.cc",
"side_effects_test.cc",
"struct_address_space_use_test.cc",
diff --git a/src/tint/lang/wgsl/resolver/resolver.cc b/src/tint/lang/wgsl/resolver/resolver.cc
index a40be82..aee5052 100644
--- a/src/tint/lang/wgsl/resolver/resolver.cc
+++ b/src/tint/lang/wgsl/resolver/resolver.cc
@@ -50,6 +50,7 @@
#include "src/tint/lang/core/type/multisampled_texture.h"
#include "src/tint/lang/core/type/pointer.h"
#include "src/tint/lang/core/type/reference.h"
+#include "src/tint/lang/core/type/resource_binding.h"
#include "src/tint/lang/core/type/sampled_texture.h"
#include "src/tint/lang/core/type/sampler.h"
#include "src/tint/lang/core/type/storage_texture.h"
@@ -2580,6 +2581,8 @@
return Array(ident);
case core::BuiltinType::kBindingArray:
return BindingArray(ident);
+ case core::BuiltinType::kResourceBinding:
+ return ResourceBinding(ident);
case core::BuiltinType::kAtomic:
return Atomic(ident);
case core::BuiltinType::kPtr:
@@ -2849,6 +2852,14 @@
return out;
}
+const core::type::ResourceBinding* Resolver::ResourceBinding(const ast::Identifier* ident) {
+ auto* out = b.create<core::type::ResourceBinding>();
+ if (DAWN_UNLIKELY(!validator_.ResourceBinding(out, ident->source))) {
+ return nullptr;
+ }
+ return out;
+}
+
const core::type::BindingArray* Resolver::BindingArray(const ast::Identifier* ident) {
auto* tmpl_ident = TemplatedIdentifier(ident, 1, 2);
if (DAWN_UNLIKELY(!tmpl_ident)) {
diff --git a/src/tint/lang/wgsl/resolver/resolver.h b/src/tint/lang/wgsl/resolver/resolver.h
index 72784b0..81141af 100644
--- a/src/tint/lang/wgsl/resolver/resolver.h
+++ b/src/tint/lang/wgsl/resolver/resolver.h
@@ -202,6 +202,10 @@
/// the identifier is not templated.
const core::type::Type* Array(const ast::Identifier* ident);
+ /// @returns a resource_binding, if the `chromium_experimental_dynamic_binding` extension is
+ /// enabled, otherwise nullptr
+ const core::type::ResourceBinding* ResourceBinding(const ast::Identifier* ident);
+
/// @returns a binding_array resolved from the templated identifier @p ident.
const core::type::BindingArray* BindingArray(const ast::Identifier* ident);
diff --git a/src/tint/lang/wgsl/resolver/resource_binding_test.cc b/src/tint/lang/wgsl/resolver/resource_binding_test.cc
new file mode 100644
index 0000000..02dc5c9
--- /dev/null
+++ b/src/tint/lang/wgsl/resolver/resource_binding_test.cc
@@ -0,0 +1,166 @@
+// Copyright 2025 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "src/tint/lang/core/type/resource_binding.h"
+#include "src/tint/lang/wgsl/resolver/resolver.h"
+#include "src/tint/lang/wgsl/resolver/resolver_helper_test.h"
+
+#include "gmock/gmock.h"
+
+using namespace tint::core::fluent_types; // NOLINT
+using namespace tint::core::number_suffixes; // NOLINT
+
+namespace tint::resolver {
+namespace {
+
+using ResolverResourceBindingTest = ResolverTest;
+
+TEST_F(ResolverResourceBindingTest, ValidGlobalDecl) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ auto* var = GlobalVar("a", Binding(0_a), Group(0_a), ty("resource_binding"));
+
+ EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+ auto* m = TypeOf(var)->UnwrapRef()->As<core::type::ResourceBinding>();
+ ASSERT_NE(m, nullptr);
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidNoFeature) {
+ GlobalVar("a", Binding(0_a), Group(0_a), ty("resource_binding"));
+
+ Resolver resolver{this, wgsl::AllowedFeatures{}};
+ EXPECT_FALSE(resolver.Resolve());
+ EXPECT_EQ(
+ resolver.error(),
+ R"(error: use of a 'resource_binding' requires enabling extension 'chromium_experimental_dynamic_binding')");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidGlobalDeclNoGroup) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ GlobalVar("a", Binding(0_a), ty("resource_binding"));
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(),
+ R"(error: resource variables require '@group' and '@binding' attributes)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidGlobalDeclNoBinding) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ GlobalVar("a", Group(0_a), ty("resource_binding"));
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(),
+ R"(error: resource variables require '@group' and '@binding' attributes)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidGlobalDeclPrivate) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ GlobalVar("a", private_, ty("resource_binding"));
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(),
+ R"(error: variables of type 'resource_binding' must not specify an address space)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidGlobalDeclWorkgroup) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ GlobalVar("a", workgroup, ty("resource_binding"));
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(),
+ R"(error: variables of type 'resource_binding' must not specify an address space)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidGlobalDeclStorageWithHandleType) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ GlobalVar("a", storage, Binding(0_a), Group(0_a), ty("resource_binding"));
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(
+ r()->error(),
+ R"(error: type 'resource_binding' cannot be used in address space 'storage' as it is non-host-shareable
+note: while instantiating 'var' a)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidGlobalDeclUniformWithHandleType) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ GlobalVar("a", uniform, Binding(0_a), Group(0_a), ty("resource_binding"));
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(
+ r()->error(),
+ R"(error: type 'resource_binding' cannot be used in address space 'uniform' as it is non-host-shareable
+note: while instantiating 'var' a)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidGlobalDeclOverride) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ Override("a", ty("resource_binding"));
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(),
+ R"(error: resource_binding cannot be used as the type of a 'override')");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidFuncDecl) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ Func("foo", Empty, ty.void_(),
+ Vector{
+ Decl(Var("a", ty("resource_binding"))),
+ });
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(), R"(error: function-scope 'var' must have a constructible type)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidStructMember) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ Structure("S", Vector{Member("a", ty("resource_binding"))});
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(),
+ R"(error: resource_binding cannot be used as the type of a structure member)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidAsFunctionParameter) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ Func("foo", Vector{Param("a", ty("resource_binding"))}, ty.void_(), Empty);
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(), R"(error: type of function parameter cannot be resource_binding)");
+}
+
+TEST_F(ResolverResourceBindingTest, InvalidFunctionPointerParameterWithHandleType) {
+ Enable(wgsl::Extension::kChromiumExperimentalDynamicBinding);
+ Func("foo", Vector{Param("a", ty.ptr<function>(ty("resource_binding")))}, ty.void_(), Empty);
+
+ EXPECT_FALSE(r()->Resolve());
+ EXPECT_EQ(r()->error(), R"(error: pointer can not be formed to handle type resource_binding)");
+}
+
+} // namespace
+} // namespace tint::resolver
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 001cf69..4758db9 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -245,8 +245,8 @@
// https://gpuweb.github.io/gpuweb/wgsl.html#storable-types
bool Validator::IsStorable(const core::type::Type* type) const {
- return IsPlain(type) ||
- type->IsAnyOf<core::type::BindingArray, core::type::Texture, core::type::Sampler>();
+ return IsPlain(type) || type->IsAnyOf<core::type::BindingArray, core::type::ResourceBinding,
+ core::type::Texture, core::type::Sampler>();
}
const ast::Statement* Validator::ClosestContinuing(bool stop_at_loop,
@@ -462,6 +462,18 @@
return true;
}
+bool Validator::ResourceBinding([[maybe_unused]] const core::type::ResourceBinding* t,
+ const Source& source) const {
+ if (!enabled_extensions_.Contains(wgsl::Extension::kChromiumExperimentalDynamicBinding)) {
+ AddError(source) << "use of a " << style::Attribute("resource_binding")
+ << " requires enabling extension "
+ << style::Code("chromium_experimental_dynamic_binding");
+ return false;
+ }
+
+ return true;
+}
+
bool Validator::BindingArray(const core::type::BindingArray* t, const Source& source) const {
if (allowed_features_.features.count(wgsl::LanguageFeature::kSizedBindingArray) == 0) {
AddError(source) << "use of " << style::Type("binding_array") << " requires the "
@@ -992,7 +1004,7 @@
AddError(decl->type->source) << "type of function parameter must be constructible";
return false;
}
- } else if (is_runtime_binding_array ||
+ } else if (var->Type()->Is<core::type::ResourceBinding>() || is_runtime_binding_array ||
(!var->Type()->Is<core::type::Pointer>() && !var->Type()->IsHandle())) {
AddError(decl->source) << "type of function parameter cannot be "
<< sem_.TypeNameOf(var->Type());
diff --git a/src/tint/lang/wgsl/resolver/validator.h b/src/tint/lang/wgsl/resolver/validator.h
index 2cd8db43..de3b8b4 100644
--- a/src/tint/lang/wgsl/resolver/validator.h
+++ b/src/tint/lang/wgsl/resolver/validator.h
@@ -454,6 +454,12 @@
const core::type::Type* type,
const Source& source) const;
+ /// Validates a resource buffer type
+ /// @param t the resource buffer to validate
+ /// @param source the source of the resource buffer type
+ /// @returns true on success, false otherwise
+ bool ResourceBinding(const core::type::ResourceBinding* t, const Source& source) const;
+
/// Validates a binding array type
/// @param t the binding array to validate
/// @param source the source of the binding array type
diff --git a/src/tint/lang/wgsl/resolver/validator_is_storeable_test.cc b/src/tint/lang/wgsl/resolver/validator_is_storeable_test.cc
index 355d1a9..d7141ef 100644
--- a/src/tint/lang/wgsl/resolver/validator_is_storeable_test.cc
+++ b/src/tint/lang/wgsl/resolver/validator_is_storeable_test.cc
@@ -123,5 +123,10 @@
EXPECT_TRUE(v()->IsStorable(arr));
}
+TEST_F(ValidatorIsStorableTest, ResourceBinding) {
+ auto* arr = create<core::type::ResourceBinding>();
+ EXPECT_TRUE(v()->IsStorable(arr));
+}
+
} // namespace
} // namespace tint::resolver
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 46bf2c2..0fcf9c6 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -159,6 +159,7 @@
@display("array<{T}>") type runtime_array<T>
type array<T, N: num>
type binding_array<T, N: num>
+type resource_binding
type sampler
type sampler_comparison
type texture_1d<T>
diff --git a/tools/src/tint/intrinsic/gen/permutate.go b/tools/src/tint/intrinsic/gen/permutate.go
index 2d5105d..88b5304 100644
--- a/tools/src/tint/intrinsic/gen/permutate.go
+++ b/tools/src/tint/intrinsic/gen/permutate.go
@@ -398,6 +398,7 @@
strings.Contains(elTyName, "u8"),
strings.Contains(elTyName, "sampler"),
strings.Contains(elTyName, "texture"),
+ strings.Contains(elTyName, "resource_binding"),
IsAbstract(DeepestElementType(elTy)):
return false
}