[spirv-reader][ir] Support `Block` struct annotation.

The `Block` struct annotation can just be ignored as it just marks the
structure as a memory block.

Bug: 425900788
Change-Id: I7eab6044effb8632c5f51edf742beacbcace32b6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/247775
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/reader/parser/atomics_test.cc b/src/tint/lang/spirv/reader/parser/atomics_test.cc
index 4f5dd32..28f51de 100644
--- a/src/tint/lang/spirv/reader/parser/atomics_test.cc
+++ b/src/tint/lang/spirv/reader/parser/atomics_test.cc
@@ -117,8 +117,7 @@
     EXPECT_DEATH_IF_SUPPORTED({ auto _ = Run(src); }, "internal compiler error");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserDeathTest, DISABLED_AtomicSMin_u32) {
+TEST_F(SpirvParserDeathTest, AtomicSMin_u32) {
     auto src = R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -156,8 +155,7 @@
     EXPECT_DEATH_IF_SUPPORTED({ auto _ = Run(src); }, "internal compiler error");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserDeathTest, DISABLED_AtomicSMax_u32) {
+TEST_F(SpirvParserDeathTest, AtomicSMax_u32) {
     auto src = R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -195,8 +193,7 @@
     EXPECT_DEATH_IF_SUPPORTED({ auto _ = Run(src); }, "internal compiler error");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserDeathTest, DISABLED_AtomicUMin_i32) {
+TEST_F(SpirvParserDeathTest, AtomicUMin_i32) {
     auto src = R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -855,8 +852,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicAdd) {
+TEST_F(SpirvParser_AtomicsTest, AtomicAdd) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -929,8 +925,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicSub) {
+TEST_F(SpirvParser_AtomicsTest, AtomicSub) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1003,8 +998,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicAnd) {
+TEST_F(SpirvParser_AtomicsTest, AtomicAnd) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1077,8 +1071,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicOr) {
+TEST_F(SpirvParser_AtomicsTest, AtomicOr) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1151,8 +1144,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicXor) {
+TEST_F(SpirvParser_AtomicsTest, AtomicXor) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1225,8 +1217,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicMax) {
+TEST_F(SpirvParser_AtomicsTest, AtomicMax) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1299,8 +1290,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicMin) {
+TEST_F(SpirvParser_AtomicsTest, AtomicMin) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1373,8 +1363,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicExchange) {
+TEST_F(SpirvParser_AtomicsTest, AtomicExchange) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1447,8 +1436,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicCompareExchange) {
+TEST_F(SpirvParser_AtomicsTest, AtomicCompareExchange) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1521,8 +1509,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicLoad) {
+TEST_F(SpirvParser_AtomicsTest, AtomicLoad) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1595,8 +1582,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicStore) {
+TEST_F(SpirvParser_AtomicsTest, AtomicStore) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1669,8 +1655,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicDecrement) {
+TEST_F(SpirvParser_AtomicsTest, AtomicDecrement) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1743,8 +1728,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_AtomicIncrement) {
+TEST_F(SpirvParser_AtomicsTest, AtomicIncrement) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -2250,8 +2234,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_ReplaceAssignsAndDecls_StructOfArray) {
+TEST_F(SpirvParser_AtomicsTest, ReplaceAssignsAndDecls_StructOfArray) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -2326,8 +2309,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParser_AtomicsTest, DISABLED_ReplaceAssignsAndDecls_Let) {
+TEST_F(SpirvParser_AtomicsTest, ReplaceAssignsAndDecls_Let) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
diff --git a/src/tint/lang/spirv/reader/parser/function_test.cc b/src/tint/lang/spirv/reader/parser/function_test.cc
index c2175f8..41622bc 100644
--- a/src/tint/lang/spirv/reader/parser/function_test.cc
+++ b/src/tint/lang/spirv/reader/parser/function_test.cc
@@ -226,8 +226,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_VertexShader_PositionUnused_Struct) {
+TEST_F(SpirvParserTest, VertexShader_PositionUnused_Struct) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -264,8 +263,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_VertexShader_PositionUsed_Struct) {
+TEST_F(SpirvParserTest, VertexShader_PositionUsed_Struct) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpMemoryModel Logical GLSL450
diff --git a/src/tint/lang/spirv/reader/parser/memory_test.cc b/src/tint/lang/spirv/reader/parser/memory_test.cc
index c8e0d05..2c4fa2c 100644
--- a/src/tint/lang/spirv/reader/parser/memory_test.cc
+++ b/src/tint/lang/spirv/reader/parser/memory_test.cc
@@ -30,8 +30,7 @@
 namespace tint::spirv::reader {
 namespace {
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_ArrayLength_FromVar) {
+TEST_F(SpirvParserTest, ArrayLength_FromVar) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -81,8 +80,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_ArrayLength_FromCopyObject) {
+TEST_F(SpirvParserTest, ArrayLength_FromCopyObject) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -134,8 +132,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_ArrayLength_FromAccessChain) {
+TEST_F(SpirvParserTest, ArrayLength_FromAccessChain) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -399,8 +396,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_Store_RuntimeArrayElement) {
+TEST_F(SpirvParserTest, Store_RuntimeArrayElement) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -1387,8 +1383,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_StorageBufferAccessMode) {
+TEST_F(SpirvParserTest, StorageBufferAccessMode) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
diff --git a/src/tint/lang/spirv/reader/parser/parser.cc b/src/tint/lang/spirv/reader/parser/parser.cc
index 6890743..00d4cbc 100644
--- a/src/tint/lang/spirv/reader/parser/parser.cc
+++ b/src/tint/lang/spirv/reader/parser/parser.cc
@@ -482,6 +482,10 @@
         uint32_t array_stride = 0;
         for (auto& deco : type->decorations()) {
             switch (spv::Decoration(deco[0])) {
+                case spv::Decoration::Block: {
+                    // Ignore, just means it's a memory block.
+                    break;
+                }
                 case spv::Decoration::ArrayStride: {
                     array_stride = deco[1];
                     break;
diff --git a/src/tint/lang/spirv/reader/parser/var_test.cc b/src/tint/lang/spirv/reader/parser/var_test.cc
index 546eb14..9a87cd7 100644
--- a/src/tint/lang/spirv/reader/parser/var_test.cc
+++ b/src/tint/lang/spirv/reader/parser/var_test.cc
@@ -142,8 +142,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_StorageVar_ReadOnly) {
+TEST_F(SpirvParserTest, StorageVar_ReadOnly) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -183,8 +182,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_StorageVar_ReadWrite) {
+TEST_F(SpirvParserTest, StorageVar_ReadWrite) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -223,8 +221,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_StorageVar_ReadOnly_And_ReadWrite) {
+TEST_F(SpirvParserTest, StorageVar_ReadOnly_And_ReadWrite) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
@@ -268,8 +265,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_UniformVar) {
+TEST_F(SpirvParserTest, UniformVar) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -1277,8 +1273,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvParserTest, DISABLED_Var_OpSpecConstantComposite_struct_Mixed) {
+TEST_F(SpirvParserTest, Var_OpSpecConstantComposite_struct_Mixed) {
     EXPECT_IR(R"(
                OpCapability Shader
                OpExtension "SPV_KHR_storage_buffer_storage_class"
diff --git a/src/tint/lang/spirv/reader/reader_test.cc b/src/tint/lang/spirv/reader/reader_test.cc
index e406e90..28cf6d6 100644
--- a/src/tint/lang/spirv/reader/reader_test.cc
+++ b/src/tint/lang/spirv/reader/reader_test.cc
@@ -362,8 +362,7 @@
 )");
 }
 
-// TODO(dsinclair): Requires `Block` decoration support
-TEST_F(SpirvReaderTest, DISABLED_ClipDistances_gl_PerVertex) {
+TEST_F(SpirvReaderTest, ClipDistances_gl_PerVertex) {
     auto got = Run(R"(
                OpCapability Shader
                OpCapability ClipDistance