[Compat] Add validation for texture view array layer in bind group
Add validation of Compatibility mode restrictions #6
in compatibility-mode proposal.
Some cts tests need update to fit this restrictions.
Bug: 367440985
Change-Id: Ic9022d3782d3cdd7455de76724f2cb99dd1f753d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/209135
Auto-Submit: Shrek Shao <shrekshao@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Shrek Shao <shrekshao@google.com>
diff --git a/src/dawn/native/BindGroup.cpp b/src/dawn/native/BindGroup.cpp
index 0da292a..af334cd 100644
--- a/src/dawn/native/BindGroup.cpp
+++ b/src/dawn/native/BindGroup.cpp
@@ -147,6 +147,18 @@
return {};
}
+MaybeError ValidateCompatibilityModeTextureViewArrayLayer(DeviceBase* device,
+ const TextureViewBase* view,
+ const TextureBase* texture) {
+ DAWN_INVALID_IF(
+ view->GetBaseArrayLayer() != 0 || view->GetLayerCount() != texture->GetArrayLayers(),
+ "Texture binding uses %s with baseArrayLayer (%u) and arrayLayerCount (%u), but must use "
+ "all (%u) layers of %s in compatibility mode.",
+ view, view->GetBaseArrayLayer(), view->GetLayerCount(), texture->GetArrayLayers(), texture);
+
+ return {};
+}
+
MaybeError ValidateSampledTextureBinding(DeviceBase* device,
const BindGroupEntry& entry,
const TextureBindingInfo& layout,
@@ -190,13 +202,16 @@
"Dimension (%s) of %s doesn't match the expected dimension (%s).",
entry.textureView->GetDimension(), entry.textureView, layout.viewDimension);
- DAWN_INVALID_IF(
- device->IsCompatibilityMode() && entry.textureView->GetDimension() !=
- texture->GetCompatibilityTextureBindingViewDimension(),
- "Dimension (%s) of %s must match textureBindingViewDimension (%s) of "
- "%s in compatibility mode.",
- entry.textureView->GetDimension(), entry.textureView,
- texture->GetCompatibilityTextureBindingViewDimension(), texture);
+ if (device->IsCompatibilityMode()) {
+ DAWN_INVALID_IF(
+ view->GetDimension() != texture->GetCompatibilityTextureBindingViewDimension(),
+ "Dimension (%s) of %s must match textureBindingViewDimension (%s) of "
+ "%s in compatibility mode.",
+ view->GetDimension(), view, texture->GetCompatibilityTextureBindingViewDimension(),
+ texture);
+
+ DAWN_TRY(ValidateCompatibilityModeTextureViewArrayLayer(device, view, texture));
+ }
return {};
}
@@ -225,6 +240,10 @@
DAWN_INVALID_IF(view->GetLevelCount() != 1, "mipLevelCount (%u) of %s expected to be 1.",
view->GetLevelCount(), view);
+ if (device->IsCompatibilityMode()) {
+ DAWN_TRY(ValidateCompatibilityModeTextureViewArrayLayer(device, view, texture));
+ }
+
return {};
}
diff --git a/webgpu-cts/compat-expectations.txt b/webgpu-cts/compat-expectations.txt
index ba4dc27..2da00b1 100644
--- a/webgpu-cts/compat-expectations.txt
+++ b/webgpu-cts/compat-expectations.txt
@@ -173,15 +173,14 @@
crbug.com/dawn/2168 webgpu:api,validation,error_scope:simple:errorType="out-of-memory";errorFilter="validation" [ Failure ]
crbug.com/dawn/2168 [ android arm ] webgpu:api,validation,error_scope:current_scope:errorFilter="validation";stackDepth=100000 [ Failure ]
-# textureStore() out_of_bounds_array tests crashing
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=0;arrayLevels=2;type="i32" [ Failure ]
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=0;arrayLevels=2;type="u32" [ Failure ]
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=0;arrayLevels=3;type="i32" [ Failure ]
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=0;arrayLevels=3;type="u32" [ Failure ]
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=1;arrayLevels=2;type="i32" [ Failure ]
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=1;arrayLevels=2;type="u32" [ Failure ]
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=1;arrayLevels=3;type="i32" [ Failure ]
-crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:baseLevel=1;arrayLevels=3;type="u32" [ Failure ]
+# CTS tests need update to fit compat mode restriction on texture view array layers or binding view dimension.
+crbug.com/dawn/367440985 webgpu:shader,execution,expression,call,builtin,textureStore:out_of_bounds_array:* [ Failure ]
+crbug.com/dawn/367440985 webgpu:api,validation,resource_usages,texture,in_render_common:subresources,color_attachment_and_bind_group:* [ Failure ]
+crbug.com/dawn/367440985 webgpu:api,validation,resource_usages,texture,in_render_common:subresources,depth_stencil_attachment_and_bind_group:* [ Failure ]
+crbug.com/dawn/367440985 webgpu:api,validation,resource_usages,texture,in_render_common:subresources,depth_stencil_texture_in_bind_groups:* [ Failure ]
+crbug.com/dawn/367440985 webgpu:api,validation,resource_usages,texture,in_render_common:subresources,multiple_bind_groups:* [ Failure ]
+crbug.com/dawn/367440985 webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,set_bind_group_on_same_index_color_texture:* [ Failure ]
+crbug.com/dawn/367440985 webgpu:api,validation,resource_usages,texture,in_render_misc:subresources,set_unused_bind_group:* [ Failure ]
# bitcast ai_to_f32 failures; precision issue?
crbug.com/354152178 [ intel-0x4680 ] webgpu:shader,execution,expression,call,builtin,bitcast:ai_to_f32:* [ Failure ]