[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 ]