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>
This commit is contained in:
dan sinclair 2020-08-26 19:09:26 +00:00 committed by Commit Bot service account
parent df503f0e85
commit 43915bd0a1
4 changed files with 48 additions and 13 deletions

View File

@ -16,6 +16,8 @@
#include <sstream> #include <sstream>
#include "src/ast/type/struct_type.h"
namespace tint { namespace tint {
namespace ast { namespace ast {
@ -95,7 +97,13 @@ std::string Module::to_str() const {
ep->to_str(out, indent); ep->to_str(out, indent);
} }
for (auto* const alias : alias_types_) { for (auto* const alias : alias_types_) {
for (size_t i = 0; i < indent; ++i) {
out << " ";
}
out << alias->name() << " -> " << alias->type()->type_name() << std::endl; 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_) { for (const auto& func : functions_) {
func->to_str(out, indent); func->to_str(out, indent);

View File

@ -748,8 +748,12 @@ TEST_F(SpvParserTest, RemapStorageBuffer_TypesAndVarDeclarations) {
storage_buffer storage_buffer
__alias_S__struct_S __alias_S__struct_S
} }
RTArr -> __array__u32_stride_4 RTArr -> __array__u32_stride_4
S -> __struct_S)")); 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) { TEST_F(SpvParserTest, RemapStorageBuffer_ThroughAccessChain_NonCascaded) {

View File

@ -1310,7 +1310,12 @@ TEST_F(SpvParserTest, ModuleScopeVar_NonReadableDecoration_DroppedForNow) {
storage_buffer storage_buffer
__alias_S__struct_S __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; })")) << module_str;
} }
@ -1332,7 +1337,12 @@ TEST_F(SpvParserTest, ModuleScopeVar_NonWritableDecoration_DroppedForNow) {
storage_buffer storage_buffer
__alias_S__struct_S __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; })")) << module_str;
} }
@ -1358,7 +1368,10 @@ TEST_F(SpvParserTest, ModuleScopeVar_ColMajorDecoration_Dropped) {
storage_buffer storage_buffer
__alias_S__struct_S __alias_S__struct_S
} }
S -> __struct_S S -> __struct_S
[[block]] Struct{
StructMember{field0: __mat_2_3__f32}
}
})")) << module_str; })")) << module_str;
} }
@ -1384,7 +1397,10 @@ TEST_F(SpvParserTest, ModuleScopeVar_MatrixStrideDecoration_Dropped) {
storage_buffer storage_buffer
__alias_S__struct_S __alias_S__struct_S
} }
S -> __struct_S S -> __struct_S
[[block]] Struct{
StructMember{field0: __mat_2_3__f32}
}
})")) << module_str; })")) << module_str;
} }

View File

@ -60,8 +60,16 @@ TEST_F(SpvParserTest, NamedTypes_Dup_EmitBoth) {
%s2 = OpTypeStruct %uint %uint %s2 = OpTypeStruct %uint %uint
)")); )"));
EXPECT_TRUE(p->BuildAndParseInternalModule()) << p->error(); EXPECT_TRUE(p->BuildAndParseInternalModule()) << p->error();
EXPECT_THAT(p->module().to_str(), EXPECT_THAT(p->module().to_str(), HasSubstr(R"(S -> __struct_S
HasSubstr("S -> __struct_S\nS_1 -> __struct_S_1")); 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 // TODO(dneto): Should we make an alias for an un-decoratrd array with
@ -89,7 +97,7 @@ TEST_F(SpvParserTest, NamedTypes_AnonRTArray_Dup_EmitBoth) {
)")); )"));
EXPECT_TRUE(p->BuildAndParseInternalModule()); EXPECT_TRUE(p->BuildAndParseInternalModule());
EXPECT_THAT(p->module().to_str(), 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")); "__array__u32_stride_8\n"));
} }
@ -129,10 +137,9 @@ TEST_F(SpvParserTest, NamedTypes_AnonArray_Dup_EmitBoth) {
%arr2 = OpTypeArray %uint %uint_5 %arr2 = OpTypeArray %uint %uint_5
)")); )"));
EXPECT_TRUE(p->BuildAndParseInternalModule()); EXPECT_TRUE(p->BuildAndParseInternalModule());
EXPECT_THAT( EXPECT_THAT(p->module().to_str(),
p->module().to_str(), HasSubstr("Arr -> __array__u32_5_stride_8\n Arr_1 -> "
HasSubstr( "__array__u32_5_stride_8"));
"Arr -> __array__u32_5_stride_8\nArr_1 -> __array__u32_5_stride_"));
} }
// TODO(dneto): Handle arrays sized by a spec constant. // TODO(dneto): Handle arrays sized by a spec constant.