[tint] Add the "sized_binding_array" feature.
It is experimental for now.
Bug: 393558555
Change-Id: If1f77dcd0d2f4fc9b479142f7a3b04f9a9cbf97d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/224374
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/dawn/common/WGSLFeatureMapping.h b/src/dawn/common/WGSLFeatureMapping.h
index 814e089..4dbf1b4 100644
--- a/src/dawn/common/WGSLFeatureMapping.h
+++ b/src/dawn/common/WGSLFeatureMapping.h
@@ -34,6 +34,7 @@
X(kPointerCompositeAccess, PointerCompositeAccess) \
X(kReadonlyAndReadwriteStorageTextures, ReadonlyAndReadwriteStorageTextures) \
X(kUnrestrictedPointerParameters, UnrestrictedPointerParameters) \
+ X(kSizedBindingArray, SizedBindingArray) \
/* ----------------- 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 d8385c1..9890a7a 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -4103,6 +4103,7 @@
{"value": 2, "name": "packed 4x8 integer dot product", "jsrepr": "'packed_4x8_integer_dot_product'"},
{"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": 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 c8b5c68..099ca42 100644
--- a/src/dawn/node/binding/Converter.cpp
+++ b/src/dawn/node/binding/Converter.cpp
@@ -1637,6 +1637,9 @@
case interop::WGSLLanguageFeatureName::kPointerCompositeAccess:
out = wgpu::WGSLLanguageFeatureName::PointerCompositeAccess;
return true;
+ case interop::WGSLLanguageFeatureName::kSizedBindingArray:
+ out = wgpu::WGSLLanguageFeatureName::SizedBindingArray;
+ return true;
}
return false;
}
@@ -1655,6 +1658,9 @@
case wgpu::WGSLLanguageFeatureName::PointerCompositeAccess:
out = interop::WGSLLanguageFeatureName::kPointerCompositeAccess;
return true;
+ case wgpu::WGSLLanguageFeatureName::SizedBindingArray:
+ out = interop::WGSLLanguageFeatureName::kSizedBindingArray;
+ 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 150f6dd..789093e 100644
--- a/src/dawn/node/interop/DawnExtensions.idl
+++ b/src/dawn/node/interop/DawnExtensions.idl
@@ -60,6 +60,7 @@
"packed_4x8_integer_dot_product",
"unrestricted_pointer_parameters",
"pointer_composite_access",
+ "sized_binding_array",
};
// TODO(crbug.com/354751907) Move to GPUAdapterInfo
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 4e536dd..7a8f64c 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -377,6 +377,7 @@
"sin"
"sinh"
"size"
+"sized_binding_array"
"smoothstep"
"sqrt"
"step"
diff --git a/src/tint/lang/wgsl/features/language_feature.cc b/src/tint/lang/wgsl/features/language_feature.cc
index f0391dc..7e51181 100644
--- a/src/tint/lang/wgsl/features/language_feature.cc
+++ b/src/tint/lang/wgsl/features/language_feature.cc
@@ -66,6 +66,9 @@
if (str == "readonly_and_readwrite_storage_textures") {
return LanguageFeature::kReadonlyAndReadwriteStorageTextures;
}
+ if (str == "sized_binding_array") {
+ return LanguageFeature::kSizedBindingArray;
+ }
if (str == "unrestricted_pointer_parameters") {
return LanguageFeature::kUnrestrictedPointerParameters;
}
@@ -92,6 +95,8 @@
return "pointer_composite_access";
case LanguageFeature::kReadonlyAndReadwriteStorageTextures:
return "readonly_and_readwrite_storage_textures";
+ case LanguageFeature::kSizedBindingArray:
+ return "sized_binding_array";
case LanguageFeature::kUnrestrictedPointerParameters:
return "unrestricted_pointer_parameters";
}
diff --git a/src/tint/lang/wgsl/features/language_feature.h b/src/tint/lang/wgsl/features/language_feature.h
index b7aedbb..7c04716 100644
--- a/src/tint/lang/wgsl/features/language_feature.h
+++ b/src/tint/lang/wgsl/features/language_feature.h
@@ -54,6 +54,7 @@
kPacked4X8IntegerDotProduct,
kPointerCompositeAccess,
kReadonlyAndReadwriteStorageTextures,
+ kSizedBindingArray,
kUnrestrictedPointerParameters,
};
@@ -75,6 +76,7 @@
"packed_4x8_integer_dot_product",
"pointer_composite_access",
"readonly_and_readwrite_storage_textures",
+ "sized_binding_array",
"unrestricted_pointer_parameters",
};
@@ -88,6 +90,7 @@
LanguageFeature::kPacked4X8IntegerDotProduct,
LanguageFeature::kPointerCompositeAccess,
LanguageFeature::kReadonlyAndReadwriteStorageTextures,
+ LanguageFeature::kSizedBindingArray,
LanguageFeature::kUnrestrictedPointerParameters,
};
diff --git a/src/tint/lang/wgsl/features/status.cc b/src/tint/lang/wgsl/features/status.cc
index 87462d2..a8162e3 100644
--- a/src/tint/lang/wgsl/features/status.cc
+++ b/src/tint/lang/wgsl/features/status.cc
@@ -36,6 +36,8 @@
////////////////////////////////////////////////////////////////////
// Experimental features
///////////////////////////////////////////////////////////////////
+ case LanguageFeature::kSizedBindingArray:
+ return FeatureStatus::kUnsafeExperimental;
////////////////////////////////////////////////////////////////////
// Enabled features
diff --git a/src/tint/lang/wgsl/language_feature_test.cc b/src/tint/lang/wgsl/language_feature_test.cc
index dc3b564..b4d96d9 100644
--- a/src/tint/lang/wgsl/language_feature_test.cc
+++ b/src/tint/lang/wgsl/language_feature_test.cc
@@ -67,6 +67,7 @@
{"pointer_composite_access", LanguageFeature::kPointerCompositeAccess},
{"readonly_and_readwrite_storage_textures",
LanguageFeature::kReadonlyAndReadwriteStorageTextures},
+ {"sized_binding_array", LanguageFeature::kSizedBindingArray},
{"unrestricted_pointer_parameters", LanguageFeature::kUnrestrictedPointerParameters},
};
@@ -95,9 +96,12 @@
{"readonlF_and_readwrite_st9rage_textues", LanguageFeature::kUndefined},
{"readonly_and_radwrite_storage_textures", LanguageFeature::kUndefined},
{"readonly_and_readwrite_sOOrage_tVxRRures", LanguageFeature::kUndefined},
- {"unrestrictd_pointer_payameters", LanguageFeature::kUndefined},
- {"unrerrt77iGted_poillter_paramenners", LanguageFeature::kUndefined},
- {"unrestricted4point00r_parameters", LanguageFeature::kUndefined},
+ {"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},
};
using LanguageFeatureParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 63b14ee..90c2e95 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -108,6 +108,7 @@
pointer_composite_access
readonly_and_readwrite_storage_textures
unrestricted_pointer_parameters
+ sized_binding_array
// Language features used only for testing whose status will never change.
chromium_testing_unimplemented