Disable texture_1d support for textureSampleLevel by default

This CL gates texture_1d support textureSampleLevel behind a
experimental language feature while we're testing it works as intended
with the CTS.

Bug: 382514673
Change-Id: I75544a06a5bb5fbda1ca5ab9b1a89324bfc9aec0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/247654
Commit-Queue: Fr <beaufort.francois@gmail.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/dawn/common/WGSLFeatureMapping.h b/src/dawn/common/WGSLFeatureMapping.h
index a6b0639..55ffa0e 100644
--- a/src/dawn/common/WGSLFeatureMapping.h
+++ b/src/dawn/common/WGSLFeatureMapping.h
@@ -36,6 +36,7 @@
     X(kUnrestrictedPointerParameters, UnrestrictedPointerParameters)               \
     X(kSizedBindingArray, SizedBindingArray)                                       \
     X(kTexelBuffers, TexelBuffers)                                                 \
+    X(kTextureSampleLevel1D, TextureSampleLevel1d)                                 \
     /* ----------------- 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 a98f11c..727edcd 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -4238,6 +4238,7 @@
             {"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": 7, "name": "texture sample level 1d",  "jsrepr": "'texture_sample_level_1d'", "tags": ["dawn"]},
 
             {"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 eb76bec..f42c95e 100644
--- a/src/dawn/node/binding/Converter.cpp
+++ b/src/dawn/node/binding/Converter.cpp
@@ -1670,6 +1670,9 @@
         case interop::WGSLLanguageFeatureName::kTexelBuffers:
             out = wgpu::WGSLLanguageFeatureName::TexelBuffers;
             return true;
+        case interop::WGSLLanguageFeatureName::kTextureSampleLevel1D:
+            out = wgpu::WGSLLanguageFeatureName::TextureSampleLevel1d;
+            return true;
     }
     return false;
 }
@@ -1694,6 +1697,9 @@
         case wgpu::WGSLLanguageFeatureName::TexelBuffers:
             out = interop::WGSLLanguageFeatureName::kTexelBuffers;
             return true;
+        case wgpu::WGSLLanguageFeatureName::TextureSampleLevel1d:
+            out = interop::WGSLLanguageFeatureName::kTextureSampleLevel1D;
+            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 2a6b2d1..276c294 100644
--- a/src/dawn/node/interop/DawnExtensions.idl
+++ b/src/dawn/node/interop/DawnExtensions.idl
@@ -78,6 +78,7 @@
     "pointer_composite_access",
     "sized_binding_array",
     "texel_buffers",
+    "texture_sample_level_1d",
 };
 
 dictionary GPUBindGroupLayoutEntry {
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index d2680eb..3930037 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -460,6 +460,7 @@
 "texture_depth_multisampled_2d"
 "texture_external"
 "texture_multisampled_2d"
+"texture_sample_level_1d"
 "texture_storage_1d"
 "texture_storage_2d"
 "texture_storage_2d_array"
diff --git a/src/tint/lang/wgsl/feature_status.cc b/src/tint/lang/wgsl/feature_status.cc
index 888ddd9..34aa57a 100644
--- a/src/tint/lang/wgsl/feature_status.cc
+++ b/src/tint/lang/wgsl/feature_status.cc
@@ -38,6 +38,7 @@
             ///////////////////////////////////////////////////////////////////
         case LanguageFeature::kSizedBindingArray:
         case LanguageFeature::kTexelBuffers:
+        case LanguageFeature::kTextureSampleLevel1D:
             return FeatureStatus::kUnsafeExperimental;
 
             ////////////////////////////////////////////////////////////////////
diff --git a/src/tint/lang/wgsl/language_feature.cc b/src/tint/lang/wgsl/language_feature.cc
index 5c3fb12..ce96e39 100644
--- a/src/tint/lang/wgsl/language_feature.cc
+++ b/src/tint/lang/wgsl/language_feature.cc
@@ -72,6 +72,9 @@
     if (str == "texel_buffers") {
         return LanguageFeature::kTexelBuffers;
     }
+    if (str == "texture_sample_level_1d") {
+        return LanguageFeature::kTextureSampleLevel1D;
+    }
     if (str == "unrestricted_pointer_parameters") {
         return LanguageFeature::kUnrestrictedPointerParameters;
     }
@@ -102,6 +105,8 @@
             return "sized_binding_array";
         case LanguageFeature::kTexelBuffers:
             return "texel_buffers";
+        case LanguageFeature::kTextureSampleLevel1D:
+            return "texture_sample_level_1d";
         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 eb8dff0..6815c14 100644
--- a/src/tint/lang/wgsl/language_feature.h
+++ b/src/tint/lang/wgsl/language_feature.h
@@ -43,7 +43,7 @@
 namespace tint::wgsl {
 
 /// An enumerator of WGSL language features
-/// @see src/tint/lang/wgsl/intrinsics.def for language feature descriptions
+/// @see src/tint/lang/wgsl/wgsl.def for language feature descriptions
 enum class LanguageFeature : uint8_t {
     kUndefined,
     kChromiumTestingExperimental,
@@ -56,6 +56,7 @@
     kReadonlyAndReadwriteStorageTextures,
     kSizedBindingArray,
     kTexelBuffers,
+    kTextureSampleLevel1D,
     kUnrestrictedPointerParameters,
 };
 
@@ -79,6 +80,7 @@
     "readonly_and_readwrite_storage_textures",
     "sized_binding_array",
     "texel_buffers",
+    "texture_sample_level_1d",
     "unrestricted_pointer_parameters",
 };
 
@@ -94,6 +96,7 @@
     LanguageFeature::kReadonlyAndReadwriteStorageTextures,
     LanguageFeature::kSizedBindingArray,
     LanguageFeature::kTexelBuffers,
+    LanguageFeature::kTextureSampleLevel1D,
     LanguageFeature::kUnrestrictedPointerParameters,
 };
 
diff --git a/src/tint/lang/wgsl/language_feature.h.tmpl b/src/tint/lang/wgsl/language_feature.h.tmpl
index 16e676c..6690fa5 100644
--- a/src/tint/lang/wgsl/language_feature.h.tmpl
+++ b/src/tint/lang/wgsl/language_feature.h.tmpl
@@ -21,7 +21,7 @@
 namespace tint::wgsl {
 
 /// An enumerator of WGSL language features
-/// @see src/tint/lang/wgsl/intrinsics.def for language feature descriptions
+/// @see src/tint/lang/wgsl/wgsl.def for language feature descriptions
 {{ Eval "DeclareEnum" "Enum" $enum "EmitOStream" false}}
 
 /// All features
diff --git a/src/tint/lang/wgsl/language_feature_test.cc b/src/tint/lang/wgsl/language_feature_test.cc
index 3e684b1..27754d7 100644
--- a/src/tint/lang/wgsl/language_feature_test.cc
+++ b/src/tint/lang/wgsl/language_feature_test.cc
@@ -69,6 +69,7 @@
      LanguageFeature::kReadonlyAndReadwriteStorageTextures},
     {"sized_binding_array", LanguageFeature::kSizedBindingArray},
     {"texel_buffers", LanguageFeature::kTexelBuffers},
+    {"texture_sample_level_1d", LanguageFeature::kTextureSampleLevel1D},
     {"unrestricted_pointer_parameters", LanguageFeature::kUnrestrictedPointerParameters},
 };
 
@@ -103,9 +104,12 @@
     {"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},
+    {"textXXre_sample_level_1d", LanguageFeature::kUndefined},
+    {"texnnure99samIIle_level_155", LanguageFeature::kUndefined},
+    {"texaSSurre_sample_lHHvel_Yd", LanguageFeature::kUndefined},
+    {"unkkestrictd_poiter_parameter", LanguageFeature::kUndefined},
+    {"jnrestricted_pRinter_paramtgrs", LanguageFeature::kUndefined},
+    {"unrestrbted_ponter_parameters", LanguageFeature::kUndefined},
 };
 
 using LanguageFeatureParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 390b4ee..a9d80c1 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -2064,6 +2064,22 @@
         }
     }
 
+    if (builtin->Fn() == wgsl::BuiltinFn::kTextureSampleLevel) {
+        auto* tex = call->Arguments()[0];
+        auto* tex_type = tex->Type()->As<core::type::Texture>();
+
+        const auto feature = wgsl::LanguageFeature::kTextureSampleLevel1D;
+        if (tex_type->Dim() == core::type::TextureDimension::k1d &&
+            !allowed_features_.features.count(feature)) {
+            AddError(call->Declaration()->source)
+                << "built-in function " << style::Function(builtin->Fn()) << " requires the "
+                << style::Code(wgsl::ToString(feature))
+                << " language feature for 1d textures, which is not allowed in the current "
+                   "environment";
+            return false;
+        }
+    }
+
     const auto feature = builtin->RequiredLanguageFeature();
     if (feature != wgsl::LanguageFeature::kUndefined) {
         if (!allowed_features_.features.count(feature)) {
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index f71d123..7d12514 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -107,6 +107,7 @@
   unrestricted_pointer_parameters
   sized_binding_array
   texel_buffers
+  texture_sample_level_1d
 
   // Language features used only for testing whose status will never change.
   chromium_testing_unimplemented