Validate that ShaderModuleDescriptor has chained descriptor
Bug: chromium:1074575
Change-Id: Ibb124ca8c4771d9b8f2846d3a5f79dca6de8743d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/21360
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index b72ce35..de3a692 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -329,10 +329,14 @@
return ValidateSpirv(device, descriptor->code, descriptor->codeSize);
}
- // For now only a single SPIRV or WGSL subdescriptor is allowed.
const ChainedStruct* chainedDescriptor = descriptor->nextInChain;
+ if (chainedDescriptor == nullptr) {
+ return DAWN_VALIDATION_ERROR("Shader module descriptor missing chained descriptor");
+ }
+ // For now only a single SPIRV or WGSL subdescriptor is allowed.
if (chainedDescriptor->nextInChain != nullptr) {
- return DAWN_VALIDATION_ERROR("chained nextInChain must be nullptr");
+ return DAWN_VALIDATION_ERROR(
+ "Shader module descriptor chained nextInChain must be nullptr");
}
switch (chainedDescriptor->sType) {
diff --git a/src/tests/unittests/validation/ShaderModuleValidationTests.cpp b/src/tests/unittests/validation/ShaderModuleValidationTests.cpp
index 828124f..6a037e9 100644
--- a/src/tests/unittests/validation/ShaderModuleValidationTests.cpp
+++ b/src/tests/unittests/validation/ShaderModuleValidationTests.cpp
@@ -108,3 +108,10 @@
ASSERT_DEVICE_ERROR(utils::CreateShaderModule(device, utils::SingleShaderStage::Fragment,
stream.str().c_str()));
}
+
+// Test that it is invalid to create a shader module with no chained descriptor. (It must be
+// WGSL or SPIRV, not empty)
+TEST_F(ShaderModuleValidationTest, NoChainedDescriptor) {
+ wgpu::ShaderModuleDescriptor desc = {};
+ ASSERT_DEVICE_ERROR(device.CreateShaderModule(&desc));
+}