Add texel_buffers WGSL language feature to wgsl.def and dawn.json

Bug: 382544164
Change-Id: Ic0b73b7e9d293fdb6ecdc982fbf7454432d7d188
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/246035
Commit-Queue: Diego Rodrigues <diejorarr@gmail.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/common/WGSLFeatureMapping.h b/src/dawn/common/WGSLFeatureMapping.h
index 4dbf1b4..a6b0639 100644
--- a/src/dawn/common/WGSLFeatureMapping.h
+++ b/src/dawn/common/WGSLFeatureMapping.h
@@ -35,6 +35,7 @@
     X(kReadonlyAndReadwriteStorageTextures, ReadonlyAndReadwriteStorageTextures)   \
     X(kUnrestrictedPointerParameters, UnrestrictedPointerParameters)               \
     X(kSizedBindingArray, SizedBindingArray)                                       \
+    X(kTexelBuffers, TexelBuffers)                                                 \
     /* ----------------- entries below are only for testing  ------------------ */ \
     X(kChromiumTestingUnimplemented, ChromiumTestingUnimplemented)                 \
     X(kChromiumTestingUnsafeExperimental, ChromiumTestingUnsafeExperimental)       \
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json
index e61220d..6a80502 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -4236,6 +4236,7 @@
             {"value": 3, "name": "unrestricted pointer parameters", "jsrepr": "'unrestricted_pointer_parameters'"},
             {"value": 4, "name": "pointer composite access", "jsrepr": "'pointer_composite_access'"},
             {"value": 5, "name": "sized binding array", "jsrepr": "'sized_binding_array'"},
+            {"value": 6, "name": "texel buffers", "jsrepr": "'texel_buffers'"},
 
             {"value": 0, "name": "chromium testing unimplemented", "jsrepr": "'chromium_testing_unimplemented'", "tags": ["dawn"]},
             {"value": 1, "name": "chromium testing unsafe experimental", "jsrepr": "'chromium_testing_unsafe_experimental'", "tags": ["dawn"]},
diff --git a/src/dawn/node/binding/Converter.cpp b/src/dawn/node/binding/Converter.cpp
index a8c7322..eb76bec 100644
--- a/src/dawn/node/binding/Converter.cpp
+++ b/src/dawn/node/binding/Converter.cpp
@@ -1667,6 +1667,9 @@
         case interop::WGSLLanguageFeatureName::kSizedBindingArray:
             out = wgpu::WGSLLanguageFeatureName::SizedBindingArray;
             return true;
+        case interop::WGSLLanguageFeatureName::kTexelBuffers:
+            out = wgpu::WGSLLanguageFeatureName::TexelBuffers;
+            return true;
     }
     return false;
 }
@@ -1688,6 +1691,9 @@
         case wgpu::WGSLLanguageFeatureName::SizedBindingArray:
             out = interop::WGSLLanguageFeatureName::kSizedBindingArray;
             return true;
+        case wgpu::WGSLLanguageFeatureName::TexelBuffers:
+            out = interop::WGSLLanguageFeatureName::kTexelBuffers;
+            return true;
 
         case wgpu::WGSLLanguageFeatureName::ChromiumTestingUnimplemented:
         case wgpu::WGSLLanguageFeatureName::ChromiumTestingUnsafeExperimental:
diff --git a/src/dawn/node/interop/DawnExtensions.idl b/src/dawn/node/interop/DawnExtensions.idl
index 29c9d6d..2a6b2d1 100644
--- a/src/dawn/node/interop/DawnExtensions.idl
+++ b/src/dawn/node/interop/DawnExtensions.idl
@@ -77,6 +77,7 @@
     "unrestricted_pointer_parameters",
     "pointer_composite_access",
     "sized_binding_array",
+    "texel_buffers",
 };
 
 dictionary GPUBindGroupLayoutEntry {
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 45def37..096b524 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -429,6 +429,7 @@
 "tan"
 "tanh"
 "texel"
+"texel_buffers"
 "textureBarrier"
 "textureDimensions"
 "textureGather"
diff --git a/src/tint/lang/wgsl/feature_status.cc b/src/tint/lang/wgsl/feature_status.cc
index cf453e5..888ddd9 100644
--- a/src/tint/lang/wgsl/feature_status.cc
+++ b/src/tint/lang/wgsl/feature_status.cc
@@ -37,6 +37,7 @@
             // Experimental features
             ///////////////////////////////////////////////////////////////////
         case LanguageFeature::kSizedBindingArray:
+        case LanguageFeature::kTexelBuffers:
             return FeatureStatus::kUnsafeExperimental;
 
             ////////////////////////////////////////////////////////////////////
diff --git a/src/tint/lang/wgsl/language_feature.cc b/src/tint/lang/wgsl/language_feature.cc
index 3a114a1..5c3fb12 100644
--- a/src/tint/lang/wgsl/language_feature.cc
+++ b/src/tint/lang/wgsl/language_feature.cc
@@ -69,6 +69,9 @@
     if (str == "sized_binding_array") {
         return LanguageFeature::kSizedBindingArray;
     }
+    if (str == "texel_buffers") {
+        return LanguageFeature::kTexelBuffers;
+    }
     if (str == "unrestricted_pointer_parameters") {
         return LanguageFeature::kUnrestrictedPointerParameters;
     }
@@ -97,6 +100,8 @@
             return "readonly_and_readwrite_storage_textures";
         case LanguageFeature::kSizedBindingArray:
             return "sized_binding_array";
+        case LanguageFeature::kTexelBuffers:
+            return "texel_buffers";
         case LanguageFeature::kUnrestrictedPointerParameters:
             return "unrestricted_pointer_parameters";
     }
diff --git a/src/tint/lang/wgsl/language_feature.h b/src/tint/lang/wgsl/language_feature.h
index 9ce7096..eb8dff0 100644
--- a/src/tint/lang/wgsl/language_feature.h
+++ b/src/tint/lang/wgsl/language_feature.h
@@ -55,6 +55,7 @@
     kPointerCompositeAccess,
     kReadonlyAndReadwriteStorageTextures,
     kSizedBindingArray,
+    kTexelBuffers,
     kUnrestrictedPointerParameters,
 };
 
@@ -77,6 +78,7 @@
     "pointer_composite_access",
     "readonly_and_readwrite_storage_textures",
     "sized_binding_array",
+    "texel_buffers",
     "unrestricted_pointer_parameters",
 };
 
@@ -91,6 +93,7 @@
     LanguageFeature::kPointerCompositeAccess,
     LanguageFeature::kReadonlyAndReadwriteStorageTextures,
     LanguageFeature::kSizedBindingArray,
+    LanguageFeature::kTexelBuffers,
     LanguageFeature::kUnrestrictedPointerParameters,
 };
 
diff --git a/src/tint/lang/wgsl/language_feature_test.cc b/src/tint/lang/wgsl/language_feature_test.cc
index 93325e6..3e684b1 100644
--- a/src/tint/lang/wgsl/language_feature_test.cc
+++ b/src/tint/lang/wgsl/language_feature_test.cc
@@ -68,6 +68,7 @@
     {"readonly_and_readwrite_storage_textures",
      LanguageFeature::kReadonlyAndReadwriteStorageTextures},
     {"sized_binding_array", LanguageFeature::kSizedBindingArray},
+    {"texel_buffers", LanguageFeature::kTexelBuffers},
     {"unrestricted_pointer_parameters", LanguageFeature::kUnrestrictedPointerParameters},
 };
 
@@ -99,9 +100,12 @@
     {"sized_indiyg_array", LanguageFeature::kUndefined},
     {"llGznnd_bin77ing_rrrray", LanguageFeature::kUndefined},
     {"sized_bindin4_00rray", LanguageFeature::kUndefined},
-    {"unrestrictedpointr_prameteoos", LanguageFeature::kUndefined},
-    {"unrstrited_pointzzr_parameters", LanguageFeature::kUndefined},
-    {"unrst11icted_pppiniierparameters", LanguageFeature::kUndefined},
+    {"teool_bffer", LanguageFeature::kUndefined},
+    {"exezz_uffers", LanguageFeature::kUndefined},
+    {"texel_bii11eps", LanguageFeature::kUndefined},
+    {"unrestricted_pointer_parametXXrs", LanguageFeature::kUndefined},
+    {"unrestri55tIId_pointer_paramnnt99rs", LanguageFeature::kUndefined},
+    {"unraastrSScted_pointerHHrparameteYs", LanguageFeature::kUndefined},
 };
 
 using LanguageFeatureParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 00e62c9..4a123d5 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -106,6 +106,7 @@
   readonly_and_readwrite_storage_textures
   unrestricted_pointer_parameters
   sized_binding_array
+  texel_buffers
 
   // Language features used only for testing whose status will never change.
   chromium_testing_unimplemented
diff --git a/third_party/webgpu-headers/webgpu.h.diff b/third_party/webgpu-headers/webgpu.h.diff
index 822bf96..3bc1be3 100644
--- a/third_party/webgpu-headers/webgpu.h.diff
+++ b/third_party/webgpu-headers/webgpu.h.diff
@@ -105,6 +105,7 @@
      WGPUWGSLLanguageFeatureName_UnrestrictedPointerParameters = 0x00000003,
      WGPUWGSLLanguageFeatureName_PointerCompositeAccess = 0x00000004,
 +    WGPUWGSLLanguageFeatureName_SizedBindingArray = 0x00000005,
++    WGPUWGSLLanguageFeatureName_TexelBuffers = 0x00000006,
      WGPUWGSLLanguageFeatureName_Force32 = 0x7FFFFFFF
  } WGPUWGSLLanguageFeatureName WGPU_ENUM_ATTRIBUTE;