[wgsl] Add uniform_buffer_standard_layout language feature
Add the enum and wire it up to all places that need it. Mark it as
experimental.
Bug: 452662924
Change-Id: I6202149aa6a22fff3a4b3746a384b55d741d5b1f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/267514
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/dawn/common/WGSLFeatureMapping.h b/src/dawn/common/WGSLFeatureMapping.h
index 8447f24..712089b 100644
--- a/src/dawn/common/WGSLFeatureMapping.h
+++ b/src/dawn/common/WGSLFeatureMapping.h
@@ -37,6 +37,7 @@
X(kSizedBindingArray, SizedBindingArray) \
X(kTexelBuffers, TexelBuffers) \
X(kChromiumPrint, ChromiumPrint) \
+ X(kUniformBufferStandardLayout, UniformBufferStandardLayout) \
/* ----------------- 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 3828e2c..328d8b0 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -4423,6 +4423,7 @@
{"value": 5, "name": "sized binding array", "jsrepr": "'sized_binding_array'", "tags": ["dawn"]},
{"value": 6, "name": "texel buffers", "jsrepr": "'texel_buffers'", "tags": ["dawn"]},
{"value": 7, "name": "chromium print", "jsrepr": "'chromium_print'", "tags": ["dawn"]},
+ {"value": 8, "name": "uniform buffer standard layout", "jsrepr": "'uniform_buffer_standard_layout'", "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 2674b60..57f6f0c 100644
--- a/src/dawn/node/binding/Converter.cpp
+++ b/src/dawn/node/binding/Converter.cpp
@@ -1780,6 +1780,9 @@
case interop::WGSLLanguageFeatureName::kChromiumPrint:
out = wgpu::WGSLLanguageFeatureName::ChromiumPrint;
return true;
+ case interop::WGSLLanguageFeatureName::kUniformBufferStandardLayout:
+ out = wgpu::WGSLLanguageFeatureName::UniformBufferStandardLayout;
+ return true;
}
return false;
}
@@ -1807,6 +1810,9 @@
case wgpu::WGSLLanguageFeatureName::ChromiumPrint:
out = interop::WGSLLanguageFeatureName::kChromiumPrint;
return true;
+ case wgpu::WGSLLanguageFeatureName::UniformBufferStandardLayout:
+ out = interop::WGSLLanguageFeatureName::kUniformBufferStandardLayout;
+ 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 bf93951..d0544ba 100644
--- a/src/dawn/node/interop/DawnExtensions.idl
+++ b/src/dawn/node/interop/DawnExtensions.idl
@@ -79,6 +79,7 @@
"sized_binding_array",
"texel_buffers",
"chromium_print",
+ "uniform_buffer_standard_layout",
};
dictionary GPUBindGroupLayoutEntry {
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index cafc90c..8940160 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -504,6 +504,7 @@
"u32"
"u8"
"uniform"
+"uniform_buffer_standard_layout"
"unpack2x16float"
"unpack2x16snorm"
"unpack2x16unorm"
diff --git a/src/tint/lang/wgsl/enums.cc b/src/tint/lang/wgsl/enums.cc
index 0acde78..30f27a0 100644
--- a/src/tint/lang/wgsl/enums.cc
+++ b/src/tint/lang/wgsl/enums.cc
@@ -213,6 +213,9 @@
if (str == "texel_buffers") {
return LanguageFeature::kTexelBuffers;
}
+ if (str == "uniform_buffer_standard_layout") {
+ return LanguageFeature::kUniformBufferStandardLayout;
+ }
if (str == "unrestricted_pointer_parameters") {
return LanguageFeature::kUnrestrictedPointerParameters;
}
@@ -244,6 +247,8 @@
return "sized_binding_array";
case LanguageFeature::kTexelBuffers:
return "texel_buffers";
+ case LanguageFeature::kUniformBufferStandardLayout:
+ return "uniform_buffer_standard_layout";
case LanguageFeature::kUnrestrictedPointerParameters:
return "unrestricted_pointer_parameters";
}
diff --git a/src/tint/lang/wgsl/enums.h b/src/tint/lang/wgsl/enums.h
index 495cc86..17be5d9 100644
--- a/src/tint/lang/wgsl/enums.h
+++ b/src/tint/lang/wgsl/enums.h
@@ -198,6 +198,7 @@
kReadonlyAndReadwriteStorageTextures,
kSizedBindingArray,
kTexelBuffers,
+ kUniformBufferStandardLayout,
kUnrestrictedPointerParameters,
};
@@ -222,6 +223,7 @@
"readonly_and_readwrite_storage_textures",
"sized_binding_array",
"texel_buffers",
+ "uniform_buffer_standard_layout",
"unrestricted_pointer_parameters",
};
@@ -238,6 +240,7 @@
LanguageFeature::kReadonlyAndReadwriteStorageTextures,
LanguageFeature::kSizedBindingArray,
LanguageFeature::kTexelBuffers,
+ LanguageFeature::kUniformBufferStandardLayout,
LanguageFeature::kUnrestrictedPointerParameters,
};
diff --git a/src/tint/lang/wgsl/enums_test.cc b/src/tint/lang/wgsl/enums_test.cc
index c29b02e..d545d56 100644
--- a/src/tint/lang/wgsl/enums_test.cc
+++ b/src/tint/lang/wgsl/enums_test.cc
@@ -323,6 +323,7 @@
{"readonly_and_readwrite_storage_textures", LanguageFeature::kReadonlyAndReadwriteStorageTextures},
{"sized_binding_array", LanguageFeature::kSizedBindingArray},
{"texel_buffers", LanguageFeature::kTexelBuffers},
+ {"uniform_buffer_standard_layout", LanguageFeature::kUniformBufferStandardLayout},
{"unrestricted_pointer_parameters", LanguageFeature::kUnrestrictedPointerParameters},
};
@@ -360,9 +361,12 @@
{"tezyel_bXXffer", LanguageFeature::kUndefined},
{"exelPbufVVers", LanguageFeature::kUndefined},
{"texel_Cufernn", LanguageFeature::kUndefined},
- {"nrestrqqcHHed_oinAAer_parameters", LanguageFeature::kUndefined},
- {"unrestricted_pointer_parametrs", LanguageFeature::kUndefined},
- {"unfestricKKed_pointer_parameer", LanguageFeature::kUndefined},
+ {"qqniformbffer_stanAAard_layoHHt", LanguageFeature::kUndefined},
+ {"uniform_buffr_standard_layout", LanguageFeature::kUndefined},
+ {"unfKform_ffer_standard_layout", LanguageFeature::kUndefined},
+ {"ulrestrictePggointerparameters", LanguageFeature::kUndefined},
+ {"unrestricted_pointer_prameters", LanguageFeature::kUndefined},
+ {"unrectricted_poinTTer_paNamete4s", LanguageFeature::kUndefined},
};
using LanguageFeatureParseTest = testing::TestWithParam<LanguageFeatureCase>;
diff --git a/src/tint/lang/wgsl/feature_status.cc b/src/tint/lang/wgsl/feature_status.cc
index bb42a34..0721f4b 100644
--- a/src/tint/lang/wgsl/feature_status.cc
+++ b/src/tint/lang/wgsl/feature_status.cc
@@ -36,6 +36,7 @@
////////////////////////////////////////////////////////////////////
// Experimental features
///////////////////////////////////////////////////////////////////
+ case LanguageFeature::kUniformBufferStandardLayout:
case LanguageFeature::kSizedBindingArray:
case LanguageFeature::kTexelBuffers:
return FeatureStatus::kUnsafeExperimental;
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 847e6fb..c5c3d6e 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -113,6 +113,7 @@
unrestricted_pointer_parameters
sized_binding_array
texel_buffers
+ uniform_buffer_standard_layout
// Non-standard language features for Chromium developers.
chromium_print