Emit structs when emitting the aliases.
This Cl updates the AST dump command to emit struct members after
emitting the type alias.
Change-Id: I5e0c3d8f2cc56525586646c613839c2e014d471f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/27320
Commit-Queue: David Neto <dneto@google.com>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/ast/module.cc b/src/ast/module.cc
index 74a081c..ffb4132 100644
--- a/src/ast/module.cc
+++ b/src/ast/module.cc
@@ -16,6 +16,8 @@
#include <sstream>
+#include "src/ast/type/struct_type.h"
+
namespace tint {
namespace ast {
@@ -95,7 +97,13 @@
ep->to_str(out, indent);
}
for (auto* const alias : alias_types_) {
+ for (size_t i = 0; i < indent; ++i) {
+ out << " ";
+ }
out << alias->name() << " -> " << alias->type()->type_name() << std::endl;
+ if (alias->type()->IsStruct()) {
+ alias->type()->AsStruct()->impl()->to_str(out, indent);
+ }
}
for (const auto& func : functions_) {
func->to_str(out, indent);
diff --git a/src/reader/spirv/function_memory_test.cc b/src/reader/spirv/function_memory_test.cc
index f7c3f4e..149b304 100644
--- a/src/reader/spirv/function_memory_test.cc
+++ b/src/reader/spirv/function_memory_test.cc
@@ -748,8 +748,12 @@
storage_buffer
__alias_S__struct_S
}
-RTArr -> __array__u32_stride_4
-S -> __struct_S)"));
+ RTArr -> __array__u32_stride_4
+ S -> __struct_S
+ [[block]] Struct{
+ StructMember{[[ offset 0 ]] field0: __u32}
+ StructMember{[[ offset 4 ]] field1: __alias_RTArr__array__u32_stride_4}
+ })"));
}
TEST_F(SpvParserTest, RemapStorageBuffer_ThroughAccessChain_NonCascaded) {
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index 3839f42..139358e 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -1310,7 +1310,12 @@
storage_buffer
__alias_S__struct_S
}
-S -> __struct_S
+ S -> __struct_S
+ [[block]] Struct{
+ StructMember{field0: __u32}
+ StructMember{field1: __f32}
+ StructMember{field2: __array__u32_2}
+ }
})")) << module_str;
}
@@ -1332,7 +1337,12 @@
storage_buffer
__alias_S__struct_S
}
-S -> __struct_S
+ S -> __struct_S
+ [[block]] Struct{
+ StructMember{field0: __u32}
+ StructMember{field1: __f32}
+ StructMember{field2: __array__u32_2}
+ }
})")) << module_str;
}
@@ -1358,7 +1368,10 @@
storage_buffer
__alias_S__struct_S
}
-S -> __struct_S
+ S -> __struct_S
+ [[block]] Struct{
+ StructMember{field0: __mat_2_3__f32}
+ }
})")) << module_str;
}
@@ -1384,7 +1397,10 @@
storage_buffer
__alias_S__struct_S
}
-S -> __struct_S
+ S -> __struct_S
+ [[block]] Struct{
+ StructMember{field0: __mat_2_3__f32}
+ }
})")) << module_str;
}
diff --git a/src/reader/spirv/parser_impl_named_types_test.cc b/src/reader/spirv/parser_impl_named_types_test.cc
index 4d5939a..a942e1a 100644
--- a/src/reader/spirv/parser_impl_named_types_test.cc
+++ b/src/reader/spirv/parser_impl_named_types_test.cc
@@ -60,8 +60,16 @@
%s2 = OpTypeStruct %uint %uint
)"));
EXPECT_TRUE(p->BuildAndParseInternalModule()) << p->error();
- EXPECT_THAT(p->module().to_str(),
- HasSubstr("S -> __struct_S\nS_1 -> __struct_S_1"));
+ EXPECT_THAT(p->module().to_str(), HasSubstr(R"(S -> __struct_S
+ Struct{
+ StructMember{field0: __u32}
+ StructMember{field1: __u32}
+ }
+ S_1 -> __struct_S_1
+ Struct{
+ StructMember{field0: __u32}
+ StructMember{field1: __u32}
+ })"));
}
// TODO(dneto): Should we make an alias for an un-decoratrd array with
@@ -89,7 +97,7 @@
)"));
EXPECT_TRUE(p->BuildAndParseInternalModule());
EXPECT_THAT(p->module().to_str(),
- HasSubstr("RTArr -> __array__u32_stride_8\nRTArr_1 -> "
+ HasSubstr("RTArr -> __array__u32_stride_8\n RTArr_1 -> "
"__array__u32_stride_8\n"));
}
@@ -129,10 +137,9 @@
%arr2 = OpTypeArray %uint %uint_5
)"));
EXPECT_TRUE(p->BuildAndParseInternalModule());
- EXPECT_THAT(
- p->module().to_str(),
- HasSubstr(
- "Arr -> __array__u32_5_stride_8\nArr_1 -> __array__u32_5_stride_"));
+ EXPECT_THAT(p->module().to_str(),
+ HasSubstr("Arr -> __array__u32_5_stride_8\n Arr_1 -> "
+ "__array__u32_5_stride_8"));
}
// TODO(dneto): Handle arrays sized by a spec constant.