Fix validating resolved compat texture binding view dimension
Bug: 341167195
Change-Id: I27a8d2806874131c6da15e28b4e447351caadb42
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/189000
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Commit-Queue: Shrek Shao <shrekshao@google.com>
Auto-Submit: Shrek Shao <shrekshao@google.com>
diff --git a/src/dawn/native/Texture.cpp b/src/dawn/native/Texture.cpp
index 8d0fd12..405da76 100644
--- a/src/dawn/native/Texture.cpp
+++ b/src/dawn/native/Texture.cpp
@@ -562,6 +562,8 @@
if (device->IsCompatibilityMode()) {
const auto textureBindingViewDimension =
ResolveDefaultCompatiblityTextureBindingViewDimension(device, descriptor);
+ DAWN_TRY_CONTEXT(ValidateTextureViewDimension(textureBindingViewDimension),
+ "validating resolved compatibility textureBindingViewDimension");
DAWN_INVALID_IF(
!IsTextureViewDimensionCompatibleWithTextureDimension(textureBindingViewDimension,
diff --git a/src/dawn/tests/unittests/validation/CompatValidationTests.cpp b/src/dawn/tests/unittests/validation/CompatValidationTests.cpp
index 7d7c4a1..af71bfc 100644
--- a/src/dawn/tests/unittests/validation/CompatValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/CompatValidationTests.cpp
@@ -1156,6 +1156,25 @@
ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
}
+// Regression test for crbug.com/341167195
+// Resolved default compatibility textureBindingViewDimension should be validated as it may come
+// from the TextureBindingViewDimensionDescriptor
+TEST_F(CompatValidationTest, InvalidTextureBindingViewDimensionDescriptorDescriptor) {
+ wgpu::TextureDescriptor descriptor;
+ descriptor.size = {1, 1, 1};
+ descriptor.dimension = wgpu::TextureDimension::Undefined;
+ descriptor.format = wgpu::TextureFormat::RGBA8Unorm;
+ descriptor.usage = wgpu::TextureUsage::TextureBinding;
+
+ wgpu::TextureBindingViewDimensionDescriptor textureBindingViewDimensionDesc;
+ descriptor.nextInChain = &textureBindingViewDimensionDesc;
+ // Forcefully set an invalid view dimension.
+ textureBindingViewDimensionDesc.textureBindingViewDimension =
+ static_cast<wgpu::TextureViewDimension>(99);
+
+ ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
+}
+
class CompatTextureViewDimensionValidationTests : public CompatValidationTest {
protected:
void TestBindingTextureViewDimensions(