Fix default viewDimension in deprecated BGLEntry path.
The handling of the default view dimension in the deprecated bind group
layout entry path was checking the viewDimension of the new
sub-descriptor instead of the deprecated viewDimension member. This
meant that viewDimension was always defaulted and "2D".
This commit fixes the issue by looking at the correct viewDimension member
and adds a regression deprecation test.
Bug: dawn:620
Change-Id: Icc133b6d80ba3d88bae30dc9138f1d74e14d12c7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/36841
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/BindGroupLayout.cpp b/src/dawn_native/BindGroupLayout.cpp
index 3d95e3b..0ae9b83 100644
--- a/src/dawn_native/BindGroupLayout.cpp
+++ b/src/dawn_native/BindGroupLayout.cpp
@@ -443,8 +443,7 @@
case wgpu::BindingType::SampledTexture:
bindingInfo.bindingType = BindingInfoType::Texture;
bindingInfo.texture.viewDimension = binding.viewDimension;
- if (binding.texture.viewDimension ==
- wgpu::TextureViewDimension::Undefined) {
+ if (binding.viewDimension == wgpu::TextureViewDimension::Undefined) {
bindingInfo.texture.viewDimension = wgpu::TextureViewDimension::e2D;
}
@@ -469,8 +468,7 @@
bindingInfo.storageTexture.access = wgpu::StorageTextureAccess::ReadOnly;
bindingInfo.storageTexture.format = binding.storageTextureFormat;
bindingInfo.storageTexture.viewDimension = binding.viewDimension;
- if (binding.storageTexture.viewDimension ==
- wgpu::TextureViewDimension::Undefined) {
+ if (binding.viewDimension == wgpu::TextureViewDimension::Undefined) {
bindingInfo.storageTexture.viewDimension =
wgpu::TextureViewDimension::e2D;
}
@@ -480,8 +478,7 @@
bindingInfo.storageTexture.access = wgpu::StorageTextureAccess::WriteOnly;
bindingInfo.storageTexture.format = binding.storageTextureFormat;
bindingInfo.storageTexture.viewDimension = binding.viewDimension;
- if (binding.storageTexture.viewDimension ==
- wgpu::TextureViewDimension::Undefined) {
+ if (binding.viewDimension == wgpu::TextureViewDimension::Undefined) {
bindingInfo.storageTexture.viewDimension =
wgpu::TextureViewDimension::e2D;
}
diff --git a/src/tests/end2end/DeprecatedAPITests.cpp b/src/tests/end2end/DeprecatedAPITests.cpp
index 9855619..5cd4240 100644
--- a/src/tests/end2end/DeprecatedAPITests.cpp
+++ b/src/tests/end2end/DeprecatedAPITests.cpp
@@ -105,6 +105,51 @@
ASSERT_DEVICE_ERROR(device.CreateBindGroupLayout(&descriptor));
}
+// Test that the deprecated BGLEntry path correctly handles the defaulting of viewDimension.
+// This is a regression test for crbug.com/dawn/620
+TEST_P(DeprecationTests, BindGroupLayoutEntryViewDimensionDefaulting) {
+ wgpu::BindGroupLayoutEntry binding;
+ binding.binding = 0;
+ binding.visibility = wgpu::ShaderStage::Vertex;
+ binding.type = wgpu::BindingType::SampledTexture;
+
+ wgpu::BindGroupLayoutDescriptor bglDesc;
+ bglDesc.entryCount = 1;
+ bglDesc.entries = &binding;
+
+ // Check that the default viewDimension is 2D.
+ {
+ binding.viewDimension = wgpu::TextureViewDimension::Undefined;
+ wgpu::BindGroupLayout bgl = device.CreateBindGroupLayout(&bglDesc);
+
+ wgpu::TextureDescriptor desc;
+ desc.usage = wgpu::TextureUsage::Sampled;
+ desc.size = {1, 1, 1};
+ desc.format = wgpu::TextureFormat::RGBA8Unorm;
+ desc.dimension = wgpu::TextureDimension::e2D;
+ wgpu::Texture texture = device.CreateTexture(&desc);
+
+ // Success, the default is 2D and we give it a 2D view.
+ utils::MakeBindGroup(device, bgl, {{0, texture.CreateView()}});
+ }
+
+ // Check that setting a non-default viewDimension works.
+ {
+ binding.viewDimension = wgpu::TextureViewDimension::e2DArray;
+ wgpu::BindGroupLayout bgl = device.CreateBindGroupLayout(&bglDesc);
+
+ wgpu::TextureDescriptor desc;
+ desc.usage = wgpu::TextureUsage::Sampled;
+ desc.size = {1, 1, 4};
+ desc.format = wgpu::TextureFormat::RGBA8Unorm;
+ desc.dimension = wgpu::TextureDimension::e2D;
+ wgpu::Texture texture = device.CreateTexture(&desc);
+
+ // Success, the view will be 2DArray and the BGL expects a 2DArray.
+ utils::MakeBindGroup(device, bgl, {{0, texture.CreateView()}});
+ }
+}
+
DAWN_INSTANTIATE_TEST(DeprecationTests,
D3D12Backend(),
MetalBackend(),