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