[ast] Rename Builtin::kSampleId to Builtin::kSampleIndex
Other builtins use WGSL terms instead of SPIR-V terms too, and the
WGSL writer is relying on the output of `operator<<(Builtin)`, which
just stringifies the name of the enum. This also matches the
equivalent `semantic::Usage::kSampleIndex` enum.
Added test coverage for WGSL builtin generation.
Bug: tint:372
Change-Id: I8077d22c4a5ddf67b1ad07e7365453db74db8e7d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/41660
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Auto-Submit: James Price <jrprice@google.com>
diff --git a/src/ast/builtin.cc b/src/ast/builtin.cc
index 36dbb83..03a689e 100644
--- a/src/ast/builtin.cc
+++ b/src/ast/builtin.cc
@@ -59,8 +59,8 @@
out << "global_invocation_id";
break;
}
- case Builtin::kSampleId: {
- out << "sample_id";
+ case Builtin::kSampleIndex: {
+ out << "sample_index";
break;
}
case Builtin::kSampleMaskIn: {
diff --git a/src/ast/builtin.h b/src/ast/builtin.h
index 864cfb3..0305958 100644
--- a/src/ast/builtin.h
+++ b/src/ast/builtin.h
@@ -32,7 +32,7 @@
kLocalInvocationId,
kLocalInvocationIndex,
kGlobalInvocationId,
- kSampleId,
+ kSampleIndex,
kSampleMaskIn,
kSampleMaskOut,
diff --git a/src/reader/spirv/enum_converter.cc b/src/reader/spirv/enum_converter.cc
index 149e265..5694d92 100644
--- a/src/reader/spirv/enum_converter.cc
+++ b/src/reader/spirv/enum_converter.cc
@@ -87,7 +87,7 @@
case SpvBuiltInGlobalInvocationId:
return ast::Builtin::kGlobalInvocationId;
case SpvBuiltInSampleId:
- return ast::Builtin::kSampleId;
+ return ast::Builtin::kSampleIndex;
case SpvBuiltInSampleMask:
return sc == ast::StorageClass::kInput ? ast::Builtin::kSampleMaskIn
: ast::Builtin::kSampleMaskOut;
diff --git a/src/reader/spirv/enum_converter_test.cc b/src/reader/spirv/enum_converter_test.cc
index bf34e62..2bcad74 100644
--- a/src/reader/spirv/enum_converter_test.cc
+++ b/src/reader/spirv/enum_converter_test.cc
@@ -225,7 +225,7 @@
BuiltinCase{SpvBuiltInGlobalInvocationId, ast::StorageClass::kInput,
true, ast::Builtin::kGlobalInvocationId},
BuiltinCase{SpvBuiltInSampleId, ast::StorageClass::kInput, true,
- ast::Builtin::kSampleId},
+ ast::Builtin::kSampleIndex},
BuiltinCase{SpvBuiltInSampleMask, ast::StorageClass::kInput, true,
ast::Builtin::kSampleMaskIn}));
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index 49e81c3..e22cb84 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -2062,7 +2062,7 @@
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
Decorations{
- BuiltinDecoration{sample_id}
+ BuiltinDecoration{sample_index}
}
x_1
in
@@ -2104,7 +2104,7 @@
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
Decorations{
- BuiltinDecoration{sample_id}
+ BuiltinDecoration{sample_index}
}
x_1
in
@@ -2146,7 +2146,7 @@
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
Decorations{
- BuiltinDecoration{sample_id}
+ BuiltinDecoration{sample_index}
}
x_1
in
@@ -2213,7 +2213,7 @@
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
Decorations{
- BuiltinDecoration{sample_id}
+ BuiltinDecoration{sample_index}
}
x_1
in
@@ -2252,7 +2252,7 @@
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
Decorations{
- BuiltinDecoration{sample_id}
+ BuiltinDecoration{sample_index}
}
x_1
in
@@ -2301,7 +2301,7 @@
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
Decorations{
- BuiltinDecoration{sample_id}
+ BuiltinDecoration{sample_index}
}
x_1
in
@@ -2349,7 +2349,7 @@
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
Decorations{
- BuiltinDecoration{sample_id}
+ BuiltinDecoration{sample_index}
}
x_1
in
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index f1d34e0..6ee2728 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -1776,7 +1776,7 @@
return "SV_GroupIndex";
case ast::Builtin::kGlobalInvocationId:
return "SV_DispatchThreadID";
- case ast::Builtin::kSampleId:
+ case ast::Builtin::kSampleIndex:
return "SV_SampleIndex";
case ast::Builtin::kSampleMaskIn:
return "SV_Coverage";
diff --git a/src/writer/hlsl/generator_impl_test.cc b/src/writer/hlsl/generator_impl_test.cc
index 33d8f5b..0231793 100644
--- a/src/writer/hlsl/generator_impl_test.cc
+++ b/src/writer/hlsl/generator_impl_test.cc
@@ -96,7 +96,7 @@
HlslBuiltinData{ast::Builtin::kLocalInvocationIndex, "SV_GroupIndex"},
HlslBuiltinData{ast::Builtin::kGlobalInvocationId,
"SV_DispatchThreadID"},
- HlslBuiltinData{ast::Builtin::kSampleId, "SV_SampleIndex"},
+ HlslBuiltinData{ast::Builtin::kSampleIndex, "SV_SampleIndex"},
HlslBuiltinData{ast::Builtin::kSampleMaskIn, "SV_Coverage"},
HlslBuiltinData{ast::Builtin::kSampleMaskOut, "SV_Coverage"}));
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 7fb6803..6732b0f 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -1455,7 +1455,7 @@
return "thread_index_in_threadgroup";
case ast::Builtin::kGlobalInvocationId:
return "thread_position_in_grid";
- case ast::Builtin::kSampleId:
+ case ast::Builtin::kSampleIndex:
return "sample_id";
case ast::Builtin::kSampleMaskIn:
return "sample_mask";
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index 4bce1d9..36067fc 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -120,7 +120,7 @@
"thread_index_in_threadgroup"},
MslBuiltinData{ast::Builtin::kGlobalInvocationId,
"thread_position_in_grid"},
- MslBuiltinData{ast::Builtin::kSampleId, "sample_id"},
+ MslBuiltinData{ast::Builtin::kSampleIndex, "sample_id"},
MslBuiltinData{ast::Builtin::kSampleMaskIn, "sample_mask"},
MslBuiltinData{ast::Builtin::kSampleMaskOut,
"sample_mask"}));
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index de8a747..6b545e3 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -3194,7 +3194,7 @@
return SpvBuiltInGlobalInvocationId;
case ast::Builtin::kPointSize:
return SpvBuiltInPointSize;
- case ast::Builtin::kSampleId: // TODO(dneto)
+ case ast::Builtin::kSampleIndex: // TODO(dneto)
case ast::Builtin::kSampleMaskIn: // TODO(dneto)
case ast::Builtin::kSampleMaskOut: // TODO(dneto)
case ast::Builtin::kNone:
diff --git a/src/writer/wgsl/generator_impl_test.cc b/src/writer/wgsl/generator_impl_test.cc
index 3d684c9..8b25c28 100644
--- a/src/writer/wgsl/generator_impl_test.cc
+++ b/src/writer/wgsl/generator_impl_test.cc
@@ -18,7 +18,9 @@
#include "gtest/gtest.h"
#include "src/ast/function.h"
+#include "src/ast/variable.h"
#include "src/program.h"
+#include "src/semantic/variable.h"
#include "src/type/void_type.h"
#include "src/writer/wgsl/test_helper.h"
@@ -41,6 +43,50 @@
)");
}
+struct WgslBuiltinData {
+ ast::Builtin builtin;
+ const char* attribute_name;
+};
+inline std::ostream& operator<<(std::ostream& out, WgslBuiltinData data) {
+ out << data.builtin;
+ return out;
+}
+using WgslBuiltinConversionTest = TestParamHelper<WgslBuiltinData>;
+TEST_P(WgslBuiltinConversionTest, Emit) {
+ auto params = GetParam();
+
+ auto* var = Global("a", ast::StorageClass::kNone, ty.f32(), nullptr,
+ ast::VariableDecorationList{
+ create<ast::BuiltinDecoration>(params.builtin),
+ });
+
+ GeneratorImpl& gen = Build();
+
+ gen.EmitVariableDecorations(program->Sem().Get(var));
+
+ EXPECT_EQ(gen.result(),
+ "[[builtin(" + std::string(params.attribute_name) + ")]] ");
+}
+INSTANTIATE_TEST_SUITE_P(
+ WgslGeneratorImplTest,
+ WgslBuiltinConversionTest,
+ testing::Values(
+ WgslBuiltinData{ast::Builtin::kPosition, "position"},
+ WgslBuiltinData{ast::Builtin::kVertexIndex, "vertex_index"},
+ WgslBuiltinData{ast::Builtin::kInstanceIndex, "instance_index"},
+ WgslBuiltinData{ast::Builtin::kFrontFacing, "front_facing"},
+ WgslBuiltinData{ast::Builtin::kFragCoord, "frag_coord"},
+ WgslBuiltinData{ast::Builtin::kFragDepth, "frag_depth"},
+ WgslBuiltinData{ast::Builtin::kLocalInvocationId,
+ "local_invocation_id"},
+ WgslBuiltinData{ast::Builtin::kLocalInvocationIndex,
+ "local_invocation_index"},
+ WgslBuiltinData{ast::Builtin::kGlobalInvocationId,
+ "global_invocation_id"},
+ WgslBuiltinData{ast::Builtin::kSampleIndex, "sample_index"},
+ WgslBuiltinData{ast::Builtin::kSampleMaskIn, "sample_mask_in"},
+ WgslBuiltinData{ast::Builtin::kSampleMaskOut, "sample_mask_out"}));
+
} // namespace
} // namespace wgsl
} // namespace writer
diff --git a/src/writer/wgsl/test_helper.h b/src/writer/wgsl/test_helper.h
index 8972784..14a69a2 100644
--- a/src/writer/wgsl/test_helper.h
+++ b/src/writer/wgsl/test_helper.h
@@ -43,16 +43,17 @@
if (gen_) {
return *gen_;
}
- program_ = std::make_unique<Program>(std::move(*this));
- gen_ = std::make_unique<GeneratorImpl>(program_.get());
+ program = std::make_unique<Program>(std::move(*this));
+ gen_ = std::make_unique<GeneratorImpl>(program.get());
return *gen_;
}
/// The type determiner
TypeDeterminer td;
+ // The program built with a call to Build()
+ std::unique_ptr<Program> program;
private:
- std::unique_ptr<Program> program_;
std::unique_ptr<GeneratorImpl> gen_;
};
using TestHelper = TestHelperBase<testing::Test>;