From 0a5696079b512f436e9d9e68bbaf5acf9dbfd584 Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Thu, 15 Apr 2021 07:18:08 +0000 Subject: [PATCH] Fix unittests that are broken by --enable-toggles=use_tint_generator Tests fixed by this CL: BindGroupLayoutCompatibilityTest.ROStorageInBGLWithRWStorageInShader BindGroupLayoutCompatibilityTest.TextureViewDimension BindingsValidationTest.PipelineLayoutWithLessBindingsThanPipeline GetBindGroupLayoutTests.SameObject GetBindGroupLayoutTests.DefaultShaderStageAndDynamicOffsets GetBindGroupLayoutTests.ComputePipeline GetBindGroupLayoutTests.BindingType GetBindGroupLayoutTests.ViewDimension GetBindGroupLayoutTests.TextureComponentType GetBindGroupLayoutTests.BindingIndices GetBindGroupLayoutTests.MinBufferSize GetBindGroupLayoutTests.StageAggregation GetBindGroupLayoutTests.ConflictingBindingType GetBindGroupLayoutTests.ConflictingBindingTextureMultisampling GetBindGroupLayoutTests.ConflictingBindingViewDimension GetBindGroupLayoutTests.ConflictingBindingTextureComponentType GetBindGroupLayoutTests.UnusedIndex MinBufferSizePipelineCreationTests.LayoutSizesTooSmall MinBufferSizePipelineCreationTests.LayoutSizesTooSmallMultipleGroups MinBufferSizeDrawTimeValidationTests.ZeroMinSizeAndTooSmallBinding MinBufferSizeDrawTimeValidationTests.UnorderedBindings MinBufferSizeDrawTimeValidationTests.MultipleGroups MinBufferSizeDefaultLayoutTests.DefaultLayoutVariousWGSLTypes MinBufferSizeDefaultLayoutTests.DefaultLayoutVariousBindingTypes MinBufferSizeDefaultLayoutTests.MultipleBindGroups MinBufferSizeDefaultLayoutTests.NonDefaultLayout RenderPipelineValidationTest.TextureComponentTypeCompatibility RenderPipelineValidationTest.TextureViewDimensionCompatibility StorageTextureValidationTests.BindGroupLayoutEntryTypeMatchesShaderDeclaration StorageTextureValidationTests.BindGroupLayoutStorageTextureFormatMatchesShaderDeclaration StorageTextureValidationTests.BindGroupLayoutViewDimensionMatchesShaderDeclaration Also enables GetBindGroupLayoutTests.FromCorrectEntryPoint for use_tint_generator, since it handles this case, unlike SPIRV-Cross. These tests remain skipped, but with bugs listed for fixing the underlying issues: MinBufferSizeDefaultLayoutTests.RenderPassConsidersBothStages ShaderModuleValidationTest.MultisampledArrayTexture StorageTextureValidationTests.ReadWriteStorageTexture StorageTextureValidationTests.StorageTextureFormatInShaders StorageTextureValidationTests.UnsupportedWGSLStorageTextureFormat BUG=dawn:756 Change-Id: Ib6b0d4144927073d949cb8d1409063a767fd47e9 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47823 Auto-Submit: Ryan Harrison Commit-Queue: Corentin Wallez Reviewed-by: Austin Eng Reviewed-by: Corentin Wallez --- .../validation/BindGroupValidationTests.cpp | 18 ++- .../GetBindGroupLayoutValidationTests.cpp | 89 +++++++----- .../MinimumBufferSizeValidationTests.cpp | 135 ++++++++++-------- .../RenderPipelineValidationTests.cpp | 6 +- .../ShaderModuleValidationTests.cpp | 1 + .../StorageTextureValidationTests.cpp | 13 +- 6 files changed, 147 insertions(+), 115 deletions(-) diff --git a/src/tests/unittests/validation/BindGroupValidationTests.cpp b/src/tests/unittests/validation/BindGroupValidationTests.cpp index 7a743996d4..724ee9cd8a 100644 --- a/src/tests/unittests/validation/BindGroupValidationTests.cpp +++ b/src/tests/unittests/validation/BindGroupValidationTests.cpp @@ -1715,6 +1715,8 @@ class BindGroupLayoutCompatibilityTest : public ValidationTest { [[group(1), binding(0)]] var sReadonlyBufferDynamic : [[access(read)]] S; [[stage(fragment)]] fn main() { + var val : vec2 = sBufferDynamic.value; + val = sReadonlyBufferDynamic.value; })", std::move(bindGroupLayouts)); } @@ -1748,6 +1750,8 @@ class BindGroupLayoutCompatibilityTest : public ValidationTest { [[group(1), binding(0)]] var sReadonlyBufferDynamic : [[access(read)]] S; [[stage(compute), workgroup_size(4, 4, 1)]] fn main() { + var val : vec2 = sBufferDynamic.value; + val = sReadonlyBufferDynamic.value; })", std::move(bindGroupLayouts)); } @@ -1772,8 +1776,6 @@ TEST_F(BindGroupLayoutCompatibilityTest, RWStorageInBGLWithROStorageInShader) { // Test that it is invalid to pass a readonly storage buffer in the pipeline layout when the shader // uses the binding as a writable storage buffer. TEST_F(BindGroupLayoutCompatibilityTest, ROStorageInBGLWithRWStorageInShader) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // Set up the bind group layout. wgpu::BindGroupLayout bgl0 = utils::MakeBindGroupLayout( device, {{0, wgpu::ShaderStage::Compute | wgpu::ShaderStage::Fragment, @@ -1788,15 +1790,15 @@ TEST_F(BindGroupLayoutCompatibilityTest, ROStorageInBGLWithRWStorageInShader) { } TEST_F(BindGroupLayoutCompatibilityTest, TextureViewDimension) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - constexpr char kTexture2DShaderFS[] = R"( [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"; constexpr char kTexture2DShaderCS[] = R"( [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(compute)]] fn main() { + textureDimensions(myTexture); })"; // Render: Test that 2D texture with 2D view dimension works @@ -1830,10 +1832,12 @@ TEST_F(BindGroupLayoutCompatibilityTest, TextureViewDimension) { constexpr char kTexture2DArrayShaderFS[] = R"( [[group(0), binding(0)]] var myTexture : texture_2d_array; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"; constexpr char kTexture2DArrayShaderCS[] = R"( [[group(0), binding(0)]] var myTexture : texture_2d_array; [[stage(compute)]] fn main() { + textureDimensions(myTexture); })"; // Render: Test that 2D texture array with 2D array view dimension works @@ -1933,8 +1937,6 @@ TEST_F(BindingsValidationTest, PipelineLayoutWithMoreBindingsThanPipeline) { // Test that it is invalid to set a pipeline layout that doesn't have all necessary bindings // required by the pipeline. TEST_F(BindingsValidationTest, PipelineLayoutWithLessBindingsThanPipeline) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // Set up bind group layout. wgpu::BindGroupLayout bgl0 = utils::MakeBindGroupLayout( device, {{0, wgpu::ShaderStage::Compute | wgpu::ShaderStage::Fragment, @@ -2085,6 +2087,7 @@ TEST_F(ComparisonSamplerBindingTest, DISABLED_ShaderAndBGLMatches) { CreateFragmentPipeline(&bindGroupLayout, R"( [[group(0), binding(0)]] var mySampler: sampler; [[stage(fragment)]] fn main() { + let s : sampler = mySampler; })"); } @@ -2096,6 +2099,7 @@ TEST_F(ComparisonSamplerBindingTest, DISABLED_ShaderAndBGLMatches) { CreateFragmentPipeline(&bindGroupLayout, R"( [[group(0), binding(0)]] var mySampler: sampler_comparison; [[stage(fragment)]] fn main() { + let s : sampler_comparison = mySampler; })"); } @@ -2107,6 +2111,7 @@ TEST_F(ComparisonSamplerBindingTest, DISABLED_ShaderAndBGLMatches) { ASSERT_DEVICE_ERROR(CreateFragmentPipeline(&bindGroupLayout, R"( [[group(0), binding(0)]] var mySampler: sampler_comparison; [[stage(fragment)]] fn main() { + let s : sampler_comparison = mySampler; })")); } @@ -2118,6 +2123,7 @@ TEST_F(ComparisonSamplerBindingTest, DISABLED_ShaderAndBGLMatches) { ASSERT_DEVICE_ERROR(CreateFragmentPipeline(&bindGroupLayout, R"( [[group(0), binding(0)]] var mySampler: sampler; [[stage(fragment)]] fn main() { + let s : sampler = mySampler; })")); } } diff --git a/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp b/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp index 0c89ee195e..eddef24994 100644 --- a/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp +++ b/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp @@ -38,8 +38,6 @@ class GetBindGroupLayoutTests : public ValidationTest { // Test that GetBindGroupLayout returns the same object for the same index // and for matching layouts. TEST_F(GetBindGroupLayoutTests, SameObject) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -53,6 +51,8 @@ TEST_F(GetBindGroupLayoutTests, SameObject) { [[group(1), binding(0)]] var uniform1 : S; [[stage(vertex)]] fn main() { + var pos : vec4 = uniform0.pos; + pos = uniform1.pos; })"); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( @@ -67,6 +67,8 @@ TEST_F(GetBindGroupLayoutTests, SameObject) { [[group(3), binding(0)]] var storage3 : [[access(read_write)]] S3; [[stage(fragment)]] fn main() { + var pos_u : vec4 = uniform2.pos; + var pos_s : mat4x4 = storage3.pos; })"); utils::ComboRenderPipelineDescriptor2 descriptor; @@ -93,8 +95,6 @@ TEST_F(GetBindGroupLayoutTests, SameObject) { // - shader stage visibility is the stage that adds the binding. // - dynamic offsets is false TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -107,6 +107,7 @@ TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) { [[group(0), binding(0)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : vec4 = uniforms.pos; })"); wgpu::BindGroupLayoutEntry binding = {}; @@ -138,8 +139,6 @@ TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) { // Test GetBindGroupLayout works with a compute pipeline TEST_F(GetBindGroupLayoutTests, ComputePipeline) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -152,6 +151,7 @@ TEST_F(GetBindGroupLayoutTests, ComputePipeline) { [[group(0), binding(0)]] var uniforms : S; [[stage(compute)]] fn main() { + var pos : vec4 = uniforms.pos; })"); wgpu::ComputePipelineDescriptor descriptor; @@ -177,8 +177,6 @@ TEST_F(GetBindGroupLayoutTests, ComputePipeline) { // Test that the binding type matches the shader. TEST_F(GetBindGroupLayoutTests, BindingType) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -205,6 +203,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) { [[group(0), binding(0)]] var ssbo : [[access(read_write)]] S; [[stage(fragment)]] fn main() { + var pos : vec4 = ssbo.pos; })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -217,6 +216,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) { [[group(0), binding(0)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : vec4 = uniforms.pos; })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -230,6 +230,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) { [[group(0), binding(0)]] var ssbo : [[access(read)]] S; [[stage(fragment)]] fn main() { + var pos : vec4 = ssbo.pos; })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -242,6 +243,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) { [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -252,6 +254,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) { [[group(0), binding(0)]] var myTexture : texture_multisampled_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -263,6 +266,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) { [[group(0), binding(0)]] var mySampler: sampler; [[stage(fragment)]] fn main() { + let s : sampler = mySampler; })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -270,8 +274,6 @@ TEST_F(GetBindGroupLayoutTests, BindingType) { // Test that texture view dimension matches the shader. TEST_F(GetBindGroupLayoutTests, ViewDimension) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -292,6 +294,7 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) { [[group(0), binding(0)]] var myTexture : texture_1d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -302,6 +305,7 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) { [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -312,6 +316,7 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) { [[group(0), binding(0)]] var myTexture : texture_2d_array; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -322,6 +327,7 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) { [[group(0), binding(0)]] var myTexture : texture_3d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -332,6 +338,7 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) { [[group(0), binding(0)]] var myTexture : texture_cube; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -342,6 +349,7 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) { [[group(0), binding(0)]] var myTexture : texture_cube_array; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -349,8 +357,6 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) { // Test that texture component type matches the shader. TEST_F(GetBindGroupLayoutTests, TextureComponentType) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -370,6 +376,7 @@ TEST_F(GetBindGroupLayoutTests, TextureComponentType) { [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -380,6 +387,7 @@ TEST_F(GetBindGroupLayoutTests, TextureComponentType) { [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -390,6 +398,7 @@ TEST_F(GetBindGroupLayoutTests, TextureComponentType) { [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -397,8 +406,6 @@ TEST_F(GetBindGroupLayoutTests, TextureComponentType) { // Test that binding= indices match. TEST_F(GetBindGroupLayoutTests, BindingIndices) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -423,6 +430,7 @@ TEST_F(GetBindGroupLayoutTests, BindingIndices) { [[group(0), binding(0)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : vec4 = uniforms.pos; })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -436,6 +444,7 @@ TEST_F(GetBindGroupLayoutTests, BindingIndices) { [[group(0), binding(1)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : vec4 = uniforms.pos; })"); EXPECT_EQ(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -449,6 +458,7 @@ TEST_F(GetBindGroupLayoutTests, BindingIndices) { [[group(0), binding(1)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : vec4 = uniforms.pos; })"); EXPECT_NE(device.CreateBindGroupLayout(&desc).Get(), pipeline.GetBindGroupLayout(0).Get()); } @@ -464,6 +474,8 @@ TEST_F(GetBindGroupLayoutTests, DuplicateBinding) { [[group(1), binding(0)]] var uniform1 : S; [[stage(vertex)]] fn main() { + var pos : vec4 = uniform0.pos; + pos = uniform1.pos; })"); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( @@ -473,6 +485,7 @@ TEST_F(GetBindGroupLayoutTests, DuplicateBinding) { [[group(1), binding(0)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : vec4 = uniforms.pos; })"); utils::ComboRenderPipelineDescriptor2 descriptor; @@ -485,8 +498,6 @@ TEST_F(GetBindGroupLayoutTests, DuplicateBinding) { // Test that minBufferSize is set on the BGL and that the max of the min buffer sizes is used. TEST_F(GetBindGroupLayoutTests, MinBufferSize) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -499,6 +510,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) { [[group(0), binding(0)]] var uniforms : S; [[stage(vertex)]] fn main() { + var pos : f32 = uniforms.pos; })"); wgpu::ShaderModule vsModule64 = utils::CreateShaderModule(device, R"( @@ -508,6 +520,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) { [[group(0), binding(0)]] var uniforms : S; [[stage(vertex)]] fn main() { + var pos : mat4x4 = uniforms.pos; })"); wgpu::ShaderModule fsModule4 = utils::CreateShaderModule(device, R"( @@ -517,6 +530,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) { [[group(0), binding(0)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : f32 = uniforms.pos; })"); wgpu::ShaderModule fsModule64 = utils::CreateShaderModule(device, R"( @@ -526,6 +540,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) { [[group(0), binding(0)]] var uniforms : S; [[stage(fragment)]] fn main() { + var pos : mat4x4 = uniforms.pos; })"); // Create BGLs with minBufferBindingSize 4 and 64. @@ -573,8 +588,6 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) { // Test that the visibility is correctly aggregated if two stages have the exact same binding. TEST_F(GetBindGroupLayoutTests, StageAggregation) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -587,6 +600,7 @@ TEST_F(GetBindGroupLayoutTests, StageAggregation) { wgpu::ShaderModule vsModuleSampler = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var mySampler: sampler; [[stage(vertex)]] fn main() { + let s : sampler = mySampler; })"); wgpu::ShaderModule fsModuleNoSampler = utils::CreateShaderModule(device, R"( @@ -596,6 +610,7 @@ TEST_F(GetBindGroupLayoutTests, StageAggregation) { wgpu::ShaderModule fsModuleSampler = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var mySampler: sampler; [[stage(fragment)]] fn main() { + let s : sampler = mySampler; })"); // Create BGLs with minBufferBindingSize 4 and 64. @@ -643,8 +658,6 @@ TEST_F(GetBindGroupLayoutTests, StageAggregation) { // Test it is invalid to have conflicting binding types in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( [[block]] struct S { pos : vec4; @@ -652,6 +665,7 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) { [[group(0), binding(0)]] var ubo : S; [[stage(vertex)]] fn main() { + var pos : vec4 = ubo.pos; })"); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( @@ -661,6 +675,7 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) { [[group(0), binding(0)]] var ssbo : [[access(read_write)]] S; [[stage(fragment)]] fn main() { + var pos : vec4 = ssbo.pos; })"); utils::ComboRenderPipelineDescriptor2 descriptor; @@ -673,18 +688,18 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) { // Test it is invalid to have conflicting binding texture multisampling in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(vertex)]] fn main() { + textureDimensions(myTexture); })"); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var myTexture : texture_multisampled_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); utils::ComboRenderPipelineDescriptor2 descriptor; @@ -697,18 +712,18 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) { // Test it is invalid to have conflicting binding texture dimension in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(vertex)]] fn main() { + textureDimensions(myTexture); })"); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var myTexture : texture_3d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); utils::ComboRenderPipelineDescriptor2 descriptor; @@ -721,18 +736,18 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) { // Test it is invalid to have conflicting binding texture component type in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureComponentType) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(vertex)]] fn main() { + textureDimensions(myTexture); })"); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var myTexture : texture_2d; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"); utils::ComboRenderPipelineDescriptor2 descriptor; @@ -758,8 +773,6 @@ TEST_F(GetBindGroupLayoutTests, OutOfRangeIndex) { // Test that unused indices return the empty bind group layout. TEST_F(GetBindGroupLayoutTests, UnusedIndex) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - // This test works assuming Dawn Native's object deduplication. // Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn // Native. @@ -773,6 +786,8 @@ TEST_F(GetBindGroupLayoutTests, UnusedIndex) { [[group(2), binding(0)]] var uniforms2 : S; [[stage(fragment)]] fn main() { + var pos : vec4 = uniforms0.pos; + pos = uniforms2.pos; })"); wgpu::BindGroupLayoutDescriptor desc = {}; @@ -819,6 +834,7 @@ TEST_F(GetBindGroupLayoutTests, Reflection) { [[group(0), binding(0)]] var uniforms : S; [[stage(vertex)]] fn main() { + var pos : vec4 = uniforms.pos; })"); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( @@ -850,24 +866,23 @@ TEST_F(GetBindGroupLayoutTests, Reflection) { // Test that fragment output validation is for the correct entryPoint // TODO(dawn:216): Re-enable when we correctly reflect which bindings are used for an entryPoint. -TEST_F(GetBindGroupLayoutTests, DISABLED_FromCorrectEntryPoint) { +TEST_F(GetBindGroupLayoutTests, FromCorrectEntryPoint) { + DAWN_SKIP_TEST_IF(!HasToggleEnabled("use_tint_generator")); + wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( [[block]] struct Data { data : f32; }; - [[binding 0, set 0]] var data0 : [[access(read_write)]] Data; - [[binding 1, set 0]] var data1 : [[access(read_write)]] Data; + [[group(0), binding(0)]] var data0 : [[access(read_write)]] Data; + [[group(0), binding(1)]] var data1 : [[access(read_write)]] Data; - fn compute0() { + [[stage(compute)]] fn compute0() { data0.data = 0.0; - return; } - fn compute1() { + + [[stage(compute)]] fn compute1() { data1.data = 0.0; - return; } - entry_point compute = compute0; - entry_point compute = compute1; )"); wgpu::ComputePipelineDescriptor pipelineDesc; diff --git a/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp b/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp index 412c1fed43..bb9a323eb3 100644 --- a/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp +++ b/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp @@ -24,7 +24,9 @@ namespace { struct BindingDescriptor { uint32_t group; uint32_t binding; - std::string text; + std::string decl; + std::string ref_type; + std::string ref_mem; uint64_t size; wgpu::BufferBindingType type = wgpu::BufferBindingType::Storage; wgpu::ShaderStage visibility = wgpu::ShaderStage::Compute | wgpu::ShaderStage::Fragment; @@ -71,7 +73,7 @@ namespace { std::ostringstream ostream; size_t index = 0; for (const BindingDescriptor& b : bindings) { - ostream << "[[block]] struct S" << index << " { " << b.text << "};\n"; + ostream << "[[block]] struct S" << index << " { " << b.decl << "};\n"; ostream << "[[group(" << b.group << "), binding(" << b.binding << ")]] "; switch (b.type) { case wgpu::BufferBindingType::Uniform: @@ -93,23 +95,42 @@ namespace { return ostream.str(); } + std::string GenerateReferenceString(const std::vector& bindings, + wgpu::ShaderStage stage) { + std::ostringstream ostream; + size_t index = 0; + for (const BindingDescriptor& b : bindings) { + if (b.visibility & stage) { + if (!b.ref_type.empty() && !b.ref_mem.empty()) { + ostream << "var r" << index << " : " << b.ref_type << " = b" << index << "." + << b.ref_mem << ";\n"; + } + } + index++; + } + return ostream.str(); + } + // Used for adding custom types available throughout the tests static const std::string kStructs = "struct ThreeFloats {f1 : f32; f2 : f32; f3 : f32;};\n"; // Creates a compute shader with given bindings std::string CreateComputeShaderWithBindings(const std::vector& bindings) { return kStructs + GenerateBindingString(bindings) + - "[[stage(compute), workgroup_size(1,1,1)]] fn main() {}"; + "[[stage(compute), workgroup_size(1,1,1)]] fn main() {\n" + + GenerateReferenceString(bindings, wgpu::ShaderStage::Compute) + "}"; } // Creates a vertex shader with given bindings std::string CreateVertexShaderWithBindings(const std::vector& bindings) { - return kStructs + GenerateBindingString(bindings) + "[[stage(vertex)]] fn main() {}"; + return kStructs + GenerateBindingString(bindings) + "[[stage(vertex)]] fn main() {\n" + + GenerateReferenceString(bindings, wgpu::ShaderStage::Vertex) + "}"; } // Creates a fragment shader with given bindings std::string CreateFragmentShaderWithBindings(const std::vector& bindings) { - return kStructs + GenerateBindingString(bindings) + "[[stage(fragment)]] fn main() {}"; + return kStructs + GenerateBindingString(bindings) + "[[stage(fragment)]] fn main() {\n" + + GenerateReferenceString(bindings, wgpu::ShaderStage::Fragment) + "}"; } // Concatenates vectors containing BindingDescriptor @@ -301,8 +322,8 @@ class MinBufferSizePipelineCreationTests : public MinBufferSizeTestsBase {}; // Pipeline can be created if minimum buffer size in layout is specified as 0 TEST_F(MinBufferSizePipelineCreationTests, ZeroMinBufferSize) { - std::vector bindings = {{0, 0, "a : f32; b : f32;", 8}, - {0, 1, "c : f32;", 4}}; + std::vector bindings = {{0, 0, "a : f32; b : f32;", "f32", "a", 8}, + {0, 1, "c : f32;", "f32", "c", 4}}; std::string computeShader = CreateComputeShaderWithBindings(bindings); std::string vertexShader = CreateVertexShaderWithBindings({}); @@ -315,10 +336,8 @@ TEST_F(MinBufferSizePipelineCreationTests, ZeroMinBufferSize) { // Fail if layout given has non-zero minimum sizes smaller than shader requirements TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmall) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - - std::vector bindings = {{0, 0, "a : f32; b : f32;", 8}, - {0, 1, "c : f32;", 4}}; + std::vector bindings = {{0, 0, "a : f32; b : f32;", "f32", "a", 8}, + {0, 1, "c : f32;", "f32", "c", 4}}; std::string computeShader = CreateComputeShaderWithBindings(bindings); std::string vertexShader = CreateVertexShaderWithBindings({}); @@ -338,12 +357,11 @@ TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmall) { // Fail if layout given has non-zero minimum sizes smaller than shader requirements TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmallMultipleGroups) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - - std::vector bg0Bindings = {{0, 0, "a : f32; b : f32;", 8}, - {0, 1, "c : f32;", 4}}; - std::vector bg1Bindings = {{1, 0, "d : f32; e : f32; f : f32;", 12}, - {1, 1, "g : mat2x2;", 16}}; + std::vector bg0Bindings = {{0, 0, "a : f32; b : f32;", "f32", "a", 8}, + {0, 1, "c : f32;", "f32", "c", 4}}; + std::vector bg1Bindings = { + {1, 0, "d : f32; e : f32; f : f32;", "f32", "e", 12}, + {1, 1, "g : mat2x2;", "mat2x2", "g", 16}}; std::vector bindings = CombineBindings({bg0Bindings, bg1Bindings}); std::string computeShader = CreateComputeShaderWithBindings(bindings); @@ -368,8 +386,8 @@ class MinBufferSizeBindGroupCreationTests : public MinBufferSizeTestsBase {}; // Fail if a binding is smaller than minimum buffer size TEST_F(MinBufferSizeBindGroupCreationTests, BindingTooSmall) { - std::vector bindings = {{0, 0, "a : f32; b : f32;", 8}, - {0, 1, "c : f32;", 4}}; + std::vector bindings = {{0, 0, "a : f32; b : f32;", "f32", "a", 8}, + {0, 1, "c : f32;", "f32", "c", 4}}; wgpu::BindGroupLayout layout = CreateBindGroupLayout(bindings, {8, 4}); CheckSizeBounds({8, 4}, [&](const std::vector& sizes, bool expectation) { @@ -402,10 +420,8 @@ class MinBufferSizeDrawTimeValidationTests : public MinBufferSizeTestsBase {}; // Fail if binding sizes are too small at draw time TEST_F(MinBufferSizeDrawTimeValidationTests, ZeroMinSizeAndTooSmallBinding) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - - std::vector bindings = {{0, 0, "a : f32; b : f32;", 8}, - {0, 1, "c : f32;", 4}}; + std::vector bindings = {{0, 0, "a : f32; b : f32;", "f32", "a", 8}, + {0, 1, "c : f32;", "f32", "c", 4}}; std::string computeShader = CreateComputeShaderWithBindings(bindings); std::string vertexShader = CreateVertexShaderWithBindings({}); @@ -425,11 +441,10 @@ TEST_F(MinBufferSizeDrawTimeValidationTests, ZeroMinSizeAndTooSmallBinding) { // Draw time validation works for non-contiguous bindings TEST_F(MinBufferSizeDrawTimeValidationTests, UnorderedBindings) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - - std::vector bindings = {{0, 2, "a : f32; b : f32;", 8}, - {0, 0, "c : f32;", 4}, - {0, 4, "d : f32; e : f32; f : f32;", 12}}; + std::vector bindings = { + {0, 2, "a : f32; b : f32;", "f32", "a", 8}, + {0, 0, "c : f32;", "f32", "c", 4}, + {0, 4, "d : f32; e : f32; f : f32;", "f32", "e", 12}}; std::string computeShader = CreateComputeShaderWithBindings(bindings); std::string vertexShader = CreateVertexShaderWithBindings({}); @@ -449,12 +464,11 @@ TEST_F(MinBufferSizeDrawTimeValidationTests, UnorderedBindings) { // Draw time validation works for multiple bind groups TEST_F(MinBufferSizeDrawTimeValidationTests, MultipleGroups) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - - std::vector bg0Bindings = {{0, 0, "a : f32; b : f32;", 8}, - {0, 1, "c : f32;", 4}}; - std::vector bg1Bindings = {{1, 0, "d : f32; e : f32; f : f32;", 12}, - {1, 1, "g : mat2x2;", 16}}; + std::vector bg0Bindings = {{0, 0, "a : f32; b : f32;", "f32", "a", 8}, + {0, 1, "c : f32;", "f32", "c", 4}}; + std::vector bg1Bindings = { + {1, 0, "d : f32; e : f32; f : f32;", "f32", "e", 12}, + {1, 1, "g : mat2x2;", "mat2x2", "g", 16}}; std::vector bindings = CombineBindings({bg0Bindings, bg1Bindings}); std::string computeShader = CreateComputeShaderWithBindings(bindings); @@ -522,57 +536,54 @@ class MinBufferSizeDefaultLayoutTests : public MinBufferSizeTestsBase { // Test the minimum size computations for various WGSL types. TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousWGSLTypes) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - - CheckShaderBindingSizeReflection( - {{{0, 0, "a : f32;", 4}, {0, 1, "b : array;", 4}, {0, 2, "c : mat2x2;", 16}}}); - CheckShaderBindingSizeReflection({{{0, 3, "d : u32; e : array;", 8}, - {0, 4, "f : ThreeFloats;", 12}, - {0, 5, "g : array;", 12}}}); + CheckShaderBindingSizeReflection({{{0, 0, "a : f32;", "f32", "a", 4}, + {0, 1, "b : array;", "f32", "b[0]", 4}, + {0, 2, "c : mat2x2;", "mat2x2", "c", 16}}}); + CheckShaderBindingSizeReflection({{{0, 3, "d : u32; e : array;", "u32", "d", 8}, + {0, 4, "f : ThreeFloats;", "f32", "f.f1", 12}, + {0, 5, "g : array;", "f32", "g[0].f1", 12}}}); } // Test the minimum size computations for various buffer binding types. TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousBindingTypes) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - CheckShaderBindingSizeReflection( - {{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform}, - {0, 1, "a : f32; b : f32;", 8, wgpu::BufferBindingType::Storage}, - {0, 2, "a : f32; b : f32; c: f32;", 12, wgpu::BufferBindingType::ReadOnlyStorage}}}); + {{{0, 0, "a : f32;", "f32", "a", 4, wgpu::BufferBindingType::Uniform}, + {0, 1, "a : f32; b : f32;", "f32", "a", 8, wgpu::BufferBindingType::Storage}, + {0, 2, "a : f32; b : f32; c: f32;", "f32", "a", 12, + wgpu::BufferBindingType::ReadOnlyStorage}}}); } // Test the minimum size computations works with multiple bind groups. TEST_F(MinBufferSizeDefaultLayoutTests, MultipleBindGroups) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - CheckShaderBindingSizeReflection( - {{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform}}, - {{1, 0, "a : f32; b : f32;", 8, wgpu::BufferBindingType::Storage}}, - {{2, 0, "a : f32; b : f32; c : f32;", 12, wgpu::BufferBindingType::ReadOnlyStorage}}}); + {{{0, 0, "a : f32;", "f32", "a", 4, wgpu::BufferBindingType::Uniform}}, + {{1, 0, "a : f32; b : f32;", "f32", "a", 8, wgpu::BufferBindingType::Storage}}, + {{2, 0, "a : f32; b : f32; c : f32;", "f32", "a", 12, + wgpu::BufferBindingType::ReadOnlyStorage}}}); } // Test the minimum size computations with manual size/align/stride decorations. TEST_F(MinBufferSizeDefaultLayoutTests, NonDefaultLayout) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - - CheckShaderBindingSizeReflection({{{0, 0, "[[size(256)]] a : u32; b : u32;", 260}, - {0, 1, "c : u32; [[align(16)]] d : u32;", 20}, - {0, 2, "d : [[stride(40)]] array;", 120}, - {0, 3, "e : [[stride(40)]] array;", 40}}}); + CheckShaderBindingSizeReflection( + {{{0, 0, "[[size(256)]] a : u32; b : u32;", "u32", "a", 260}, + {0, 1, "c : u32; [[align(16)]] d : u32;", "u32", "c", 20}, + {0, 2, "d : [[stride(40)]] array;", "u32", "d[0]", 120}, + {0, 3, "e : [[stride(40)]] array;", "u32", "e[0]", 40}}}); } // Minimum size should be the max requirement of both vertex and fragment stages. TEST_F(MinBufferSizeDefaultLayoutTests, RenderPassConsidersBothStages) { + // TODO(https://crbug.com/tint/716): Remove skip once this is resolved. DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); std::string vertexShader = CreateVertexShaderWithBindings( - {{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform}, - {0, 1, "b : vec4;", 16, wgpu::BufferBindingType::Uniform}}); + {{0, 0, "a : f32;", "f32", "a", 4, wgpu::BufferBindingType::Uniform}, + {0, 1, "b : vec4;", "vec4", "b", 16, wgpu::BufferBindingType::Uniform}}); std::string fragShader = CreateFragmentShaderWithBindings( - {{0, 0, "a : f32; b : f32;", 8, wgpu::BufferBindingType::Uniform}, - {0, 1, "c : f32; d : f32;", 8, wgpu::BufferBindingType::Uniform}}); + {{0, 0, "a : f32; b : f32;", "f32", "a", 8, wgpu::BufferBindingType::Uniform}, + {0, 1, "c : f32; d : f32;", "f32", "c", 8, wgpu::BufferBindingType::Uniform}}); wgpu::BindGroupLayout renderLayout = GetBGLFromRenderShaders(vertexShader, fragShader, 0); - CheckLayoutBindingSizeValidation(renderLayout, {{0, 0, "", 8}, {0, 1, "", 16}}); + CheckLayoutBindingSizeValidation(renderLayout, {{0, 0, "", "", "", 8}, {0, 1, "", "", "", 16}}); } diff --git a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp index 3114d20cae..3b63b7ab83 100644 --- a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp +++ b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp @@ -393,8 +393,6 @@ TEST_F(RenderPipelineValidationTest, AlphaToCoverageAndSampleCount) { // Tests that the texture component type in shader must match the bind group layout. TEST_F(RenderPipelineValidationTest, TextureComponentTypeCompatibility) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - constexpr uint32_t kNumTextureComponentType = 3u; std::array kScalarTypes = {{"f32", "i32", "u32"}}; std::array kTextureComponentTypes = {{ @@ -414,6 +412,7 @@ TEST_F(RenderPipelineValidationTest, TextureComponentTypeCompatibility) { << kScalarTypes[i] << R"(>; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"; descriptor.cFragment.module = utils::CreateShaderModule(device, stream.str().c_str()); @@ -432,8 +431,6 @@ TEST_F(RenderPipelineValidationTest, TextureComponentTypeCompatibility) { // Tests that the texture view dimension in shader must match the bind group layout. TEST_F(RenderPipelineValidationTest, TextureViewDimensionCompatibility) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - constexpr uint32_t kNumTextureViewDimensions = 6u; std::array kTextureKeywords = {{ "texture_1d", @@ -463,6 +460,7 @@ TEST_F(RenderPipelineValidationTest, TextureViewDimensionCompatibility) { [[group(0), binding(0)]] var myTexture : )" << kTextureKeywords[i] << R"(; [[stage(fragment)]] fn main() { + textureDimensions(myTexture); })"; descriptor.cFragment.module = utils::CreateShaderModule(device, stream.str().c_str()); diff --git a/src/tests/unittests/validation/ShaderModuleValidationTests.cpp b/src/tests/unittests/validation/ShaderModuleValidationTests.cpp index b7abc1730e..30754bb92c 100644 --- a/src/tests/unittests/validation/ShaderModuleValidationTests.cpp +++ b/src/tests/unittests/validation/ShaderModuleValidationTests.cpp @@ -118,6 +118,7 @@ TEST_F(ShaderModuleValidationTest, CombinedTextureAndSampler) { // Test that it is not allowed to declare a multisampled-array interface texture. // TODO(enga): Also test multisampled cube, cube array, and 3D. These have no GLSL keywords. TEST_F(ShaderModuleValidationTest, MultisampledArrayTexture) { + // TODO(https://crbug.com/tint/717): Remove skip once this is fixed DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); // SPIR-V ASM produced by glslang for the following fragment shader: diff --git a/src/tests/unittests/validation/StorageTextureValidationTests.cpp b/src/tests/unittests/validation/StorageTextureValidationTests.cpp index b7a59739b5..87b9c55789 100644 --- a/src/tests/unittests/validation/StorageTextureValidationTests.cpp +++ b/src/tests/unittests/validation/StorageTextureValidationTests.cpp @@ -87,6 +87,7 @@ class StorageTextureValidationTests : public ValidationTest { << imageFormatQualifier << ">;\n" "[[stage(compute)]] fn main() {\n" + " textureDimensions(image0);\n" "}\n"; return ostream.str(); @@ -226,6 +227,7 @@ TEST_F(StorageTextureValidationTests, ComputePipeline) { // Validate read-write storage textures are not currently supported. TEST_F(StorageTextureValidationTests, ReadWriteStorageTexture) { + // TODO(https://crbug.com/tint/692): Remove skip once this is fixed. DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); // Read-write storage textures cannot be declared in a vertex shader by default. @@ -233,6 +235,7 @@ TEST_F(StorageTextureValidationTests, ReadWriteStorageTexture) { ASSERT_DEVICE_ERROR(utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var image0 : [[access(read_write)]] texture_storage_2d; [[stage(vertex)]] fn main() { + textureDimensions(image0); })")); } @@ -241,6 +244,7 @@ TEST_F(StorageTextureValidationTests, ReadWriteStorageTexture) { ASSERT_DEVICE_ERROR(utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var image0 : [[access(read_write)]] texture_storage_2d; [[stage(fragment)]] fn main() { + textureDimensions(image0); })")); } @@ -249,6 +253,7 @@ TEST_F(StorageTextureValidationTests, ReadWriteStorageTexture) { ASSERT_DEVICE_ERROR(utils::CreateShaderModule(device, R"( [[group(0), binding(0)]] var image0 : [[access(read_write)]] texture_storage_2d; [[stage(compute)]] fn main() { + textureDimensions(image0); })")); } } @@ -288,6 +293,7 @@ TEST_F(StorageTextureValidationTests, BindGroupLayoutWithStorageTextureBindingTy // Validate it is an error to declare a read-only or write-only storage texture in shaders with any // format that doesn't support TextureUsage::Storage texture usages. TEST_F(StorageTextureValidationTests, StorageTextureFormatInShaders) { + // TODO(https://crbug.com/tint/718): Remove skip once this is fixed. DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); // Not include RGBA8UnormSrgb, BGRA8Unorm, BGRA8UnormSrgb because they are not related to any @@ -326,6 +332,7 @@ TEST_F(StorageTextureValidationTests, StorageTextureFormatInShaders) { // Verify that declaring a storage texture format that is not supported in WebGPU causes validation // error. TEST_F(StorageTextureValidationTests, UnsupportedWGSLStorageTextureFormat) { + // TODO(https://crbug.com/tint/718): Remove skip once this is fixed. DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); constexpr std::array kUnsupportedTextureFormats = { @@ -384,8 +391,6 @@ TEST_F(StorageTextureValidationTests, UnsupportedTextureViewDimensionInBindGroup // render and compute pipeline, the binding type in the bind group layout must match the // declaration in the shader. TEST_F(StorageTextureValidationTests, BindGroupLayoutEntryTypeMatchesShaderDeclaration) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - constexpr wgpu::TextureFormat kStorageTextureFormat = wgpu::TextureFormat::R32Float; std::initializer_list kSupportedBindingTypes = { @@ -469,8 +474,6 @@ TEST_F(StorageTextureValidationTests, StorageTextureFormatInBindGroupLayout) { // Verify the storage texture format in the bind group layout must match the declaration in shader. TEST_F(StorageTextureValidationTests, BindGroupLayoutStorageTextureFormatMatchesShaderDeclaration) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - for (wgpu::StorageTextureAccess bindingType : kSupportedStorageTextureAccess) { for (wgpu::TextureFormat storageTextureFormatInShader : utils::kAllTextureFormats) { if (!utils::TextureFormatSupportsStorageTexture(storageTextureFormatInShader)) { @@ -527,8 +530,6 @@ TEST_F(StorageTextureValidationTests, BindGroupLayoutStorageTextureFormatMatches // Verify the dimension of the bind group layout with storage textures must match the one declared // in shader. TEST_F(StorageTextureValidationTests, BindGroupLayoutViewDimensionMatchesShaderDeclaration) { - DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator")); - constexpr std::array kSupportedDimensions = { wgpu::TextureViewDimension::e1D, wgpu::TextureViewDimension::e2D, wgpu::TextureViewDimension::e2DArray, wgpu::TextureViewDimension::e3D};