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