transform/VertexPulling: s/_tint/tint
Don't use a leading underscore in identifiers. Tint cannot parse these, they're illegal in MSL.
Bug: tint:640
Change-Id: I6e923cf3317a646cc5f4f2a10a7a522036000c70
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/47634
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index df00a17..af4f00b 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -48,7 +48,6 @@
CloneContext& ctx;
VertexPulling::Config const cfg;
std::unordered_map<uint32_t, ast::Variable*> location_to_var;
- std::vector<LocationReplacement> location_replacements;
Symbol vertex_index_name;
Symbol instance_index_name;
Symbol pulling_position_name;
@@ -60,7 +59,7 @@
Symbol GetVertexBufferName(uint32_t index) {
return utils::GetOrCreate(vertex_buffer_names, index, [&] {
static const char kVertexBufferNamePrefix[] =
- "_tint_pulling_vertex_buffer_";
+ "tint_pulling_vertex_buffer_";
return ctx.dst->Symbols().New(kVertexBufferNamePrefix +
std::to_string(index));
});
@@ -69,7 +68,7 @@
/// Lazily generates the pulling position symbol
Symbol GetPullingPositionName() {
if (!pulling_position_name.IsValid()) {
- static const char kPullingPosVarName[] = "_tint_pulling_pos";
+ static const char kPullingPosVarName[] = "tint_pulling_pos";
pulling_position_name = ctx.dst->Symbols().New(kPullingPosVarName);
}
return pulling_position_name;
@@ -78,7 +77,7 @@
/// Lazily generates the structure buffer symbol
Symbol GetStructBufferName() {
if (!struct_buffer_name.IsValid()) {
- static const char kStructBufferName[] = "_tint_vertex_data";
+ static const char kStructBufferName[] = "tint_vertex_data";
struct_buffer_name = ctx.dst->Symbols().New(kStructBufferName);
}
return struct_buffer_name;
@@ -115,7 +114,7 @@
}
// We didn't find a vertex index builtin, so create one
- static const char kDefaultVertexIndexName[] = "_tint_pulling_vertex_index";
+ static const char kDefaultVertexIndexName[] = "tint_pulling_vertex_index";
vertex_index_name = ctx.dst->Symbols().New(kDefaultVertexIndexName);
ctx.dst->Global(
@@ -158,7 +157,7 @@
// We didn't find an instance index builtin, so create one
static const char kDefaultInstanceIndexName[] =
- "_tint_pulling_instance_index";
+ "tint_pulling_instance_index";
instance_index_name = ctx.dst->Symbols().New(kDefaultInstanceIndexName);
ctx.dst->Global(instance_index_name, ctx.dst->ty.u32(),
@@ -187,8 +186,7 @@
ctx.Clone(v->declared_type()),
ast::StorageClass::kPrivate);
location_to_var[location] = replacement;
- location_replacements.emplace_back(
- LocationReplacement{v, replacement});
+ ctx.Replace(v, replacement);
break;
}
}
@@ -415,15 +413,17 @@
// following stages will pass
CloneContext ctx(&out, in);
+
+ // Start by cloning all the symbols. This ensures that the authored symbols
+ // won't get renamed if they collide with new symbols below.
+ ctx.CloneSymbols();
+
State state{ctx, cfg};
state.FindOrInsertVertexIndexIfUsed();
state.FindOrInsertInstanceIndexIfUsed();
state.ConvertVertexInputVariablesToPrivate();
state.AddVertexStorageBuffers();
- for (auto& replacement : state.location_replacements) {
- ctx.Replace(replacement.from, replacement.to);
- }
ctx.ReplaceAll([&](ast::Function* f) -> ast::Function* {
if (f == func) {
return CloneWithStatementsAtStart(&ctx, f,
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index ce01f87..827b6d4 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -81,13 +81,13 @@
auto* expect = R"(
[[block]]
struct TintVertexData {
- _tint_vertex_data : [[stride(4)]] array<u32>;
+ tint_vertex_data : [[stride(4)]] array<u32>;
};
[[stage(vertex)]]
fn main() {
{
- var _tint_pulling_pos : u32;
+ var tint_pulling_pos : u32;
}
}
)";
@@ -111,23 +111,23 @@
)";
auto* expect = R"(
-[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : u32;
+[[builtin(vertex_index)]] var<in> tint_pulling_vertex_index : u32;
[[block]]
struct TintVertexData {
- _tint_vertex_data : [[stride(4)]] array<u32>;
+ tint_vertex_data : [[stride(4)]] array<u32>;
};
-[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
[[stage(vertex)]]
fn main() {
{
- var _tint_pulling_pos : u32;
- _tint_pulling_pos = ((_tint_pulling_vertex_index * 4u) + 0u);
- var_a = bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[(_tint_pulling_pos / 4u)]);
+ var tint_pulling_pos : u32;
+ tint_pulling_pos = ((tint_pulling_vertex_index * 4u) + 0u);
+ var_a = bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[(tint_pulling_pos / 4u)]);
}
}
)";
@@ -153,23 +153,23 @@
)";
auto* expect = R"(
-[[builtin(instance_index)]] var<in> _tint_pulling_instance_index : u32;
+[[builtin(instance_index)]] var<in> tint_pulling_instance_index : u32;
[[block]]
struct TintVertexData {
- _tint_vertex_data : [[stride(4)]] array<u32>;
+ tint_vertex_data : [[stride(4)]] array<u32>;
};
-[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
[[stage(vertex)]]
fn main() {
{
- var _tint_pulling_pos : u32;
- _tint_pulling_pos = ((_tint_pulling_instance_index * 4u) + 0u);
- var_a = bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[(_tint_pulling_pos / 4u)]);
+ var tint_pulling_pos : u32;
+ tint_pulling_pos = ((tint_pulling_instance_index * 4u) + 0u);
+ var_a = bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[(tint_pulling_pos / 4u)]);
}
}
)";
@@ -195,23 +195,23 @@
)";
auto* expect = R"(
-[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : u32;
+[[builtin(vertex_index)]] var<in> tint_pulling_vertex_index : u32;
[[block]]
struct TintVertexData {
- _tint_vertex_data : [[stride(4)]] array<u32>;
+ tint_vertex_data : [[stride(4)]] array<u32>;
};
-[[binding(0), group(5)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(5)]] var<storage> tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
[[stage(vertex)]]
fn main() {
{
- var _tint_pulling_pos : u32;
- _tint_pulling_pos = ((_tint_pulling_vertex_index * 4u) + 0u);
- var_a = bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[(_tint_pulling_pos / 4u)]);
+ var tint_pulling_pos : u32;
+ tint_pulling_pos = ((tint_pulling_vertex_index * 4u) + 0u);
+ var_a = bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[(tint_pulling_pos / 4u)]);
}
}
)";
@@ -244,12 +244,12 @@
auto* expect = R"(
[[block]]
struct TintVertexData {
- _tint_vertex_data : [[stride(4)]] array<u32>;
+ tint_vertex_data : [[stride(4)]] array<u32>;
};
-[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> tint_pulling_vertex_buffer_0 : TintVertexData;
-[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
+[[binding(1), group(4)]] var<storage> tint_pulling_vertex_buffer_1 : TintVertexData;
var<private> var_a : f32;
@@ -262,11 +262,11 @@
[[stage(vertex)]]
fn main() {
{
- var _tint_pulling_pos : u32;
- _tint_pulling_pos = ((custom_vertex_index * 4u) + 0u);
- var_a = bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[(_tint_pulling_pos / 4u)]);
- _tint_pulling_pos = ((custom_instance_index * 4u) + 0u);
- var_b = bitcast<f32>(_tint_pulling_vertex_buffer_1._tint_vertex_data[(_tint_pulling_pos / 4u)]);
+ var tint_pulling_pos : u32;
+ tint_pulling_pos = ((custom_vertex_index * 4u) + 0u);
+ var_a = bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[(tint_pulling_pos / 4u)]);
+ tint_pulling_pos = ((custom_instance_index * 4u) + 0u);
+ var_b = bitcast<f32>(tint_pulling_vertex_buffer_1.tint_vertex_data[(tint_pulling_pos / 4u)]);
}
}
)";
@@ -303,14 +303,14 @@
)";
auto* expect = R"(
-[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : u32;
+[[builtin(vertex_index)]] var<in> tint_pulling_vertex_index : u32;
[[block]]
struct TintVertexData {
- _tint_vertex_data : [[stride(4)]] array<u32>;
+ tint_vertex_data : [[stride(4)]] array<u32>;
};
-[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32;
@@ -319,11 +319,11 @@
[[stage(vertex)]]
fn main() {
{
- var _tint_pulling_pos : u32;
- _tint_pulling_pos = ((_tint_pulling_vertex_index * 16u) + 0u);
- var_a = bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[(_tint_pulling_pos / 4u)]);
- _tint_pulling_pos = ((_tint_pulling_vertex_index * 16u) + 0u);
- var_b = vec4<f32>(bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[((_tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[((_tint_pulling_pos + 4u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[((_tint_pulling_pos + 8u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[((_tint_pulling_pos + 12u) / 4u)]));
+ var tint_pulling_pos : u32;
+ tint_pulling_pos = ((tint_pulling_vertex_index * 16u) + 0u);
+ var_a = bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[(tint_pulling_pos / 4u)]);
+ tint_pulling_pos = ((tint_pulling_vertex_index * 16u) + 0u);
+ var_b = vec4<f32>(bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[((tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[((tint_pulling_pos + 4u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[((tint_pulling_pos + 8u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[((tint_pulling_pos + 12u) / 4u)]));
}
}
)";
@@ -353,18 +353,18 @@
)";
auto* expect = R"(
-[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : u32;
+[[builtin(vertex_index)]] var<in> tint_pulling_vertex_index : u32;
[[block]]
struct TintVertexData {
- _tint_vertex_data : [[stride(4)]] array<u32>;
+ tint_vertex_data : [[stride(4)]] array<u32>;
};
-[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
+[[binding(0), group(4)]] var<storage> tint_pulling_vertex_buffer_0 : TintVertexData;
-[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
+[[binding(1), group(4)]] var<storage> tint_pulling_vertex_buffer_1 : TintVertexData;
-[[binding(2), group(4)]] var<storage> _tint_pulling_vertex_buffer_2 : TintVertexData;
+[[binding(2), group(4)]] var<storage> tint_pulling_vertex_buffer_2 : TintVertexData;
var<private> var_a : vec2<f32>;
@@ -375,13 +375,13 @@
[[stage(vertex)]]
fn main() {
{
- var _tint_pulling_pos : u32;
- _tint_pulling_pos = ((_tint_pulling_vertex_index * 8u) + 0u);
- var_a = vec2<f32>(bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[((_tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_0._tint_vertex_data[((_tint_pulling_pos + 4u) / 4u)]));
- _tint_pulling_pos = ((_tint_pulling_vertex_index * 12u) + 0u);
- var_b = vec3<f32>(bitcast<f32>(_tint_pulling_vertex_buffer_1._tint_vertex_data[((_tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_1._tint_vertex_data[((_tint_pulling_pos + 4u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_1._tint_vertex_data[((_tint_pulling_pos + 8u) / 4u)]));
- _tint_pulling_pos = ((_tint_pulling_vertex_index * 16u) + 0u);
- var_c = vec4<f32>(bitcast<f32>(_tint_pulling_vertex_buffer_2._tint_vertex_data[((_tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_2._tint_vertex_data[((_tint_pulling_pos + 4u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_2._tint_vertex_data[((_tint_pulling_pos + 8u) / 4u)]), bitcast<f32>(_tint_pulling_vertex_buffer_2._tint_vertex_data[((_tint_pulling_pos + 12u) / 4u)]));
+ var tint_pulling_pos : u32;
+ tint_pulling_pos = ((tint_pulling_vertex_index * 8u) + 0u);
+ var_a = vec2<f32>(bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[((tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_0.tint_vertex_data[((tint_pulling_pos + 4u) / 4u)]));
+ tint_pulling_pos = ((tint_pulling_vertex_index * 12u) + 0u);
+ var_b = vec3<f32>(bitcast<f32>(tint_pulling_vertex_buffer_1.tint_vertex_data[((tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_1.tint_vertex_data[((tint_pulling_pos + 4u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_1.tint_vertex_data[((tint_pulling_pos + 8u) / 4u)]));
+ tint_pulling_pos = ((tint_pulling_vertex_index * 16u) + 0u);
+ var_c = vec4<f32>(bitcast<f32>(tint_pulling_vertex_buffer_2.tint_vertex_data[((tint_pulling_pos + 0u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_2.tint_vertex_data[((tint_pulling_pos + 4u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_2.tint_vertex_data[((tint_pulling_pos + 8u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_2.tint_vertex_data[((tint_pulling_pos + 12u) / 4u)]));
}
}
)";
@@ -401,6 +401,63 @@
EXPECT_EQ(expect, str(got));
}
+TEST_F(VertexPullingTest, AttemptSymbolCollision) {
+ auto* src = R"(
+[[location(0)]] var<in> var_a : f32;
+[[location(1)]] var<in> var_b : vec4<f32>;
+
+[[stage(vertex)]]
+fn main() {
+ var tint_pulling_vertex_index : i32;
+ var tint_pulling_vertex_buffer_0 : i32;
+ var tint_vertex_data : i32;
+ var tint_pulling_pos : i32;
+}
+)";
+
+ auto* expect = R"(
+[[builtin(vertex_index)]] var<in> tint_pulling_vertex_index_1 : u32;
+
+[[block]]
+struct TintVertexData {
+ tint_vertex_data_1 : [[stride(4)]] array<u32>;
+};
+
+[[binding(0), group(4)]] var<storage> tint_pulling_vertex_buffer_0_1 : TintVertexData;
+
+var<private> var_a : f32;
+
+var<private> var_b : vec4<f32>;
+
+[[stage(vertex)]]
+fn main() {
+ {
+ var tint_pulling_pos_1 : u32;
+ tint_pulling_pos_1 = ((tint_pulling_vertex_index_1 * 16u) + 0u);
+ var_a = bitcast<f32>(tint_pulling_vertex_buffer_0_1.tint_vertex_data_1[(tint_pulling_pos_1 / 4u)]);
+ tint_pulling_pos_1 = ((tint_pulling_vertex_index_1 * 16u) + 0u);
+ var_b = vec4<f32>(bitcast<f32>(tint_pulling_vertex_buffer_0_1.tint_vertex_data_1[((tint_pulling_pos_1 + 0u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_0_1.tint_vertex_data_1[((tint_pulling_pos_1 + 4u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_0_1.tint_vertex_data_1[((tint_pulling_pos_1 + 8u) / 4u)]), bitcast<f32>(tint_pulling_vertex_buffer_0_1.tint_vertex_data_1[((tint_pulling_pos_1 + 12u) / 4u)]));
+ }
+ var tint_pulling_vertex_index : i32;
+ var tint_pulling_vertex_buffer_0 : i32;
+ var tint_vertex_data : i32;
+ var tint_pulling_pos : i32;
+}
+)";
+
+ VertexPulling::Config cfg;
+ cfg.vertex_state = {
+ {{16,
+ InputStepMode::kVertex,
+ {{VertexFormat::kF32, 0, 0}, {VertexFormat::kVec4F32, 0, 1}}}}};
+ cfg.entry_point_name = "main";
+
+ DataMap data;
+ data.Add<VertexPulling::Config>(cfg);
+ auto got = Run<VertexPulling>(src, std::move(data));
+
+ EXPECT_EQ(expect, str(got));
+}
} // namespace
} // namespace transform
} // namespace tint