mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-18 09:25:25 +00:00
[spirv-writer] Handle non-struct entry point return values
Generate a global variable for the return value and replace return statements with assignments to this variable. Add a list of return statements to semantic::Function. Bug: tint:509 Change-Id: I6bc08fcac7858b48f0eff62199d5011665284220 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/44804 Commit-Queue: James Price <jrprice@google.com> Auto-Submit: James Price <jrprice@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Commit Bot service account
parent
417b82291b
commit
4ffd3e2ea5
@@ -29,6 +29,7 @@ class BuiltinDecoration;
|
||||
class Function;
|
||||
class GroupDecoration;
|
||||
class LocationDecoration;
|
||||
class ReturnStatement;
|
||||
} // namespace ast
|
||||
|
||||
namespace semantic {
|
||||
@@ -53,11 +54,13 @@ class Function : public Castable<Function, CallTarget> {
|
||||
/// @param declaration the ast::Function
|
||||
/// @param referenced_module_vars the referenced module variables
|
||||
/// @param local_referenced_module_vars the locally referenced module
|
||||
/// @param return_statements the function return statements
|
||||
/// variables
|
||||
/// @param ancestor_entry_points the ancestor entry points
|
||||
Function(ast::Function* declaration,
|
||||
std::vector<const Variable*> referenced_module_vars,
|
||||
std::vector<const Variable*> local_referenced_module_vars,
|
||||
std::vector<const ast::ReturnStatement*> return_statements,
|
||||
std::vector<Symbol> ancestor_entry_points);
|
||||
|
||||
/// Destructor
|
||||
@@ -76,6 +79,10 @@ class Function : public Castable<Function, CallTarget> {
|
||||
const std::vector<const Variable*>& LocalReferencedModuleVariables() const {
|
||||
return local_referenced_module_vars_;
|
||||
}
|
||||
/// @returns the return statements
|
||||
const std::vector<const ast::ReturnStatement*> ReturnStatements() const {
|
||||
return return_statements_;
|
||||
}
|
||||
/// @returns the ancestor entry points
|
||||
const std::vector<Symbol>& AncestorEntryPoints() const {
|
||||
return ancestor_entry_points_;
|
||||
@@ -148,6 +155,7 @@ class Function : public Castable<Function, CallTarget> {
|
||||
ast::Function* const declaration_;
|
||||
std::vector<const Variable*> const referenced_module_vars_;
|
||||
std::vector<const Variable*> const local_referenced_module_vars_;
|
||||
std::vector<const ast::ReturnStatement*> const return_statements_;
|
||||
std::vector<Symbol> const ancestor_entry_points_;
|
||||
};
|
||||
|
||||
|
||||
@@ -57,11 +57,13 @@ std::tuple<ast::BindingDecoration*, ast::GroupDecoration*> GetBindingAndGroup(
|
||||
Function::Function(ast::Function* declaration,
|
||||
std::vector<const Variable*> referenced_module_vars,
|
||||
std::vector<const Variable*> local_referenced_module_vars,
|
||||
std::vector<const ast::ReturnStatement*> return_statements,
|
||||
std::vector<Symbol> ancestor_entry_points)
|
||||
: Base(declaration->return_type(), GetParameters(declaration)),
|
||||
declaration_(declaration),
|
||||
referenced_module_vars_(std::move(referenced_module_vars)),
|
||||
local_referenced_module_vars_(std::move(local_referenced_module_vars)),
|
||||
return_statements_(std::move(return_statements)),
|
||||
ancestor_entry_points_(std::move(ancestor_entry_points)) {}
|
||||
|
||||
Function::~Function() = default;
|
||||
|
||||
Reference in New Issue
Block a user