mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-09 13:38:00 +00:00
reader/spirv: Clean up disjoint AST nodes
Perform a program clone at the end of parsing to remove any unreachable AST nodes. Actually fixing the parser to never create these looks like a huge amount of work. Fixed: tint:749 Change-Id: Ib956634257e0933c9702d6be22f79942f7cf4c51 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49520 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Commit Bot service account
parent
9481156eb9
commit
275eb7e4e4
@@ -25,12 +25,22 @@ namespace spirv {
|
||||
Program Parse(const std::vector<uint32_t>& input) {
|
||||
ParserImpl parser(input);
|
||||
bool parsed = parser.Parse();
|
||||
ProgramBuilder builder = std::move(parser.builder());
|
||||
|
||||
ProgramBuilder& builder = parser.builder();
|
||||
if (!parsed) {
|
||||
// TODO(bclayton): Migrate spirv::ParserImpl to using diagnostics.
|
||||
builder.Diagnostics().add_error(parser.error());
|
||||
return Program(std::move(builder));
|
||||
}
|
||||
return Program(std::move(builder));
|
||||
|
||||
// The SPIR-V parser can construct disjoint AST nodes, which is invalid for
|
||||
// the Resolver. Clone the Program to clean these up.
|
||||
builder.SetResolveOnBuild(false);
|
||||
Program program_with_disjoint_ast(std::move(builder));
|
||||
|
||||
ProgramBuilder output;
|
||||
CloneContext(&output, &program_with_disjoint_ast, false).Clone();
|
||||
return Program(std::move(output));
|
||||
}
|
||||
|
||||
} // namespace spirv
|
||||
|
||||
Reference in New Issue
Block a user