Add Source parameter to decoration constructors

Once a `Decoration` has been parsed, it'll be placed into a `DecorationList` and validated later in the parse. In order to create error diagnostics that refer back to the decoration, we need to know its source.

Bug: tint:282
Bug: tint:291
Change-Id: I38de708adbd041601b61d7e0a4d0402e9a2fe526
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/31722
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
This commit is contained in:
Ben Clayton
2020-11-03 21:48:20 +00:00
committed by Commit Bot service account
parent 35298800a6
commit 34a2eb1999
78 changed files with 779 additions and 604 deletions

View File

@@ -143,8 +143,8 @@ void VertexPullingTransform::FindOrInsertVertexIndexIfUsed() {
vertex_index_name_, ast::StorageClass::kInput, GetI32Type()));
ast::VariableDecorationList decorations;
decorations.push_back(
std::make_unique<ast::BuiltinDecoration>(ast::Builtin::kVertexIdx));
decorations.push_back(std::make_unique<ast::BuiltinDecoration>(
ast::Builtin::kVertexIdx, Source{}));
var->set_decorations(std::move(decorations));
mod_->AddGlobalVariable(std::move(var));
@@ -186,8 +186,8 @@ void VertexPullingTransform::FindOrInsertInstanceIndexIfUsed() {
instance_index_name_, ast::StorageClass::kInput, GetI32Type()));
ast::VariableDecorationList decorations;
decorations.push_back(
std::make_unique<ast::BuiltinDecoration>(ast::Builtin::kInstanceIdx));
decorations.push_back(std::make_unique<ast::BuiltinDecoration>(
ast::Builtin::kInstanceIdx, Source{}));
var->set_decorations(std::move(decorations));
mod_->AddGlobalVariable(std::move(var));
@@ -221,7 +221,7 @@ void VertexPullingTransform::AddVertexStorageBuffers() {
// The array inside the struct definition
auto internal_array = std::make_unique<ast::type::ArrayType>(GetU32Type());
ast::ArrayDecorationList ary_decos;
ary_decos.push_back(std::make_unique<ast::StrideDecoration>(4u));
ary_decos.push_back(std::make_unique<ast::StrideDecoration>(4u, Source{}));
internal_array->set_decorations(std::move(ary_decos));
auto* internal_array_type = ctx_->type_mgr().Get(std::move(internal_array));
@@ -229,13 +229,14 @@ void VertexPullingTransform::AddVertexStorageBuffers() {
// Creating the struct type
ast::StructMemberList members;
ast::StructMemberDecorationList member_dec;
member_dec.push_back(std::make_unique<ast::StructMemberOffsetDecoration>(0u));
member_dec.push_back(
std::make_unique<ast::StructMemberOffsetDecoration>(0u, Source{}));
members.push_back(std::make_unique<ast::StructMember>(
kStructBufferName, internal_array_type, std::move(member_dec)));
ast::StructDecorationList decos;
decos.push_back(std::make_unique<ast::StructBlockDecoration>());
decos.push_back(std::make_unique<ast::StructBlockDecoration>(Source{}));
auto* struct_type =
ctx_->type_mgr().Get(std::make_unique<ast::type::StructType>(
@@ -251,8 +252,10 @@ void VertexPullingTransform::AddVertexStorageBuffers() {
// Add decorations
ast::VariableDecorationList decorations;
decorations.push_back(std::make_unique<ast::BindingDecoration>(i));
decorations.push_back(std::make_unique<ast::SetDecoration>(pulling_set_));
decorations.push_back(
std::make_unique<ast::BindingDecoration>(i, Source{}));
decorations.push_back(
std::make_unique<ast::SetDecoration>(pulling_set_, Source{}));
var->set_decorations(std::move(decorations));
mod_->AddGlobalVariable(std::move(var));

View File

@@ -44,8 +44,8 @@ class VertexPullingTransformHelper {
auto func = std::make_unique<ast::Function>(
"main", ast::VariableList{},
ctx_.type_mgr().Get(std::make_unique<ast::type::VoidType>()));
func->add_decoration(
std::make_unique<ast::StageDecoration>(ast::PipelineStage ::kVertex));
func->add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage ::kVertex, Source{}));
mod()->AddFunction(std::move(func));
}
@@ -69,7 +69,8 @@ class VertexPullingTransformHelper {
std::make_unique<ast::Variable>(name, ast::StorageClass::kInput, type));
ast::VariableDecorationList decorations;
decorations.push_back(std::make_unique<ast::LocationDecoration>(location));
decorations.push_back(
std::make_unique<ast::LocationDecoration>(location, Source{}));
var->set_decorations(std::move(decorations));
mod_->AddGlobalVariable(std::move(var));
@@ -112,8 +113,8 @@ TEST_F(VertexPullingTransformTest, Error_EntryPointWrongStage) {
auto func = std::make_unique<ast::Function>(
"main", ast::VariableList{},
ctx()->type_mgr().Get(std::make_unique<ast::type::VoidType>()));
func->add_decoration(
std::make_unique<ast::StageDecoration>(ast::PipelineStage::kFragment));
func->add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kFragment, Source{}));
mod()->AddFunction(std::move(func));
InitTransform({});
@@ -396,8 +397,8 @@ TEST_F(VertexPullingTransformTest, ExistingVertexIndexAndInstanceIndex) {
ast::StorageClass::kInput, &i32));
ast::VariableDecorationList decorations;
decorations.push_back(
std::make_unique<ast::BuiltinDecoration>(ast::Builtin::kVertexIdx));
decorations.push_back(std::make_unique<ast::BuiltinDecoration>(
ast::Builtin::kVertexIdx, Source{}));
vertex_index_var->set_decorations(std::move(decorations));
mod()->AddGlobalVariable(std::move(vertex_index_var));
@@ -409,8 +410,8 @@ TEST_F(VertexPullingTransformTest, ExistingVertexIndexAndInstanceIndex) {
ast::StorageClass::kInput, &i32));
ast::VariableDecorationList decorations;
decorations.push_back(
std::make_unique<ast::BuiltinDecoration>(ast::Builtin::kInstanceIdx));
decorations.push_back(std::make_unique<ast::BuiltinDecoration>(
ast::Builtin::kInstanceIdx, Source{}));
instance_index_var->set_decorations(std::move(decorations));
mod()->AddGlobalVariable(std::move(instance_index_var));