Convert HLSL to higher level namer.
This CL switches the HLSL generator to use the top level UnsafeNamer
instead of a custom namer.
Change-Id: I7643ee6586955ed2bc493104004fb9f9c524e951
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/36660
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 5c9ff05..f940575 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -609,8 +609,6 @@
"src/writer/hlsl/generator.h",
"src/writer/hlsl/generator_impl.cc",
"src/writer/hlsl/generator_impl.h",
- "src/writer/hlsl/namer.cc",
- "src/writer/hlsl/namer.h",
]
configs += [ ":tint_common_config" ]
@@ -1199,7 +1197,6 @@
"src/writer/hlsl/generator_impl_type_test.cc",
"src/writer/hlsl/generator_impl_unary_op_test.cc",
"src/writer/hlsl/generator_impl_variable_decl_statement_test.cc",
- "src/writer/hlsl/namer_test.cc",
"src/writer/hlsl/test_helper.h",
]
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fa08d9d..7925a66 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -352,8 +352,6 @@
writer/hlsl/generator.h
writer/hlsl/generator_impl.cc
writer/hlsl/generator_impl.h
- writer/hlsl/namer.cc
- writer/hlsl/namer.h
)
endif()
@@ -726,7 +724,6 @@
writer/hlsl/generator_impl_type_test.cc
writer/hlsl/generator_impl_unary_op_test.cc
writer/hlsl/generator_impl_variable_decl_statement_test.cc
- writer/hlsl/namer_test.cc
writer/hlsl/test_helper.h
)
endif()
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 193302a..9dae4b8 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -141,7 +141,8 @@
} // namespace
-GeneratorImpl::GeneratorImpl(ast::Module* module) : module_(module) {}
+GeneratorImpl::GeneratorImpl(ast::Module* module)
+ : module_(module), namer_(std::make_unique<UnsafeNamer>(module)) {}
GeneratorImpl::~GeneratorImpl() = default;
@@ -208,17 +209,6 @@
global_variables_.set(global->symbol(), global);
}
-std::string GeneratorImpl::generate_name(const std::string& prefix) {
- std::string name = prefix;
- uint32_t i = 0;
- while (namer_.IsMapped(name) || namer_.IsRemapped(name)) {
- name = prefix + "_" + std::to_string(i);
- ++i;
- }
- namer_.RegisterRemappedName(name);
- return name;
-}
-
std::string GeneratorImpl::current_ep_var_name(VarType type) {
std::string name = "";
switch (type) {
@@ -254,10 +244,10 @@
return true;
}
out << "typedef ";
- if (!EmitType(out, alias->type(), "")) {
+ if (!EmitType(out, alias->type(), Symbol())) {
return false;
}
- out << " " << namer_.NameFor(alias->name()) << ";" << std::endl;
+ out << " " << namer_->NameFor(alias->symbol()) << ";" << std::endl;
} else if (auto* str = ty->As<ast::type::Struct>()) {
if (!EmitStructType(out, str, str->name())) {
return false;
@@ -300,7 +290,7 @@
}
out << "as";
- if (!EmitType(out, expr->type(), "")) {
+ if (!EmitType(out, expr->type(), Symbol())) {
return false;
}
out << "(";
@@ -366,7 +356,7 @@
return false;
}
- auto name = generate_name(kTempNamePrefix);
+ auto name = namer_->GenerateName(kTempNamePrefix);
make_indent(pre);
pre << "bool " << name << " = " << lhs_out.str() << ";" << std::endl;
@@ -626,13 +616,13 @@
// // We create variables to hold the two parameters in case they're
// // function calls with side effects.
// auto* param0 = param[0].get();
- // auto* name0 = generate_name("outer_product_expr_0");
+ // auto* name0 = namer_->GenerateName("outer_product_expr_0");
// auto* param1 = param[1].get();
- // auto* name1 = generate_name("outer_product_expr_1");
+ // auto* name1 = namer_->GenerateName("outer_product_expr_1");
// make_indent(out);
- // if (!EmitType(out, expr->result_type(), "")) {
+ // if (!EmitType(out, expr->result_type(), Symbol()) {
// return false;
// }
// out << "(";
@@ -984,7 +974,7 @@
if (expr->type()->Is<ast::type::Array>()) {
out << "{";
} else {
- if (!EmitType(out, expr->type(), "")) {
+ if (!EmitType(out, expr->type(), Symbol())) {
return false;
}
out << "(";
@@ -1090,7 +1080,7 @@
out << name << ".";
}
}
- out << namer_.NameFor(ident->name());
+ out << namer_->NameFor(ident->symbol());
return true;
}
@@ -1241,7 +1231,7 @@
Symbol ep_sym) {
auto name = func->symbol().to_str();
- if (!EmitType(out, func->return_type(), "")) {
+ if (!EmitType(out, func->return_type(), Symbol())) {
return false;
}
@@ -1250,13 +1240,11 @@
if (emit_duplicate_functions) {
auto func_name = name;
auto ep_name = ep_sym.to_str();
- // TODO(dsinclair): The SymbolToName should go away and just use
- // to_str() here when the conversion is complete.
- name = generate_name(func->name() + "_" + module_->SymbolToName(ep_sym));
+ name = namer_->GenerateName(namer_->NameFor(func->symbol()) + "_" +
+ namer_->NameFor(ep_sym));
ep_func_name_remapped_[ep_name + "_" + func_name] = name;
} else {
- // TODO(dsinclair): this should be updated to a remapped name
- name = namer_.NameFor(func->name());
+ name = namer_->NameFor(func->symbol());
}
out << name << "(";
@@ -1292,7 +1280,7 @@
}
first = false;
- if (!EmitType(out, v->type(), v->name())) {
+ if (!EmitType(out, v->type(), v->symbol())) {
return false;
}
// Array name is output as part of the type
@@ -1379,7 +1367,7 @@
increment_indent();
make_indent(out);
- if (!EmitType(out, type, "")) {
+ if (!EmitType(out, type, Symbol())) {
return false;
}
out << " " << var->name() << ";" << std::endl;
@@ -1423,9 +1411,9 @@
}
if (!in_variables.empty()) {
- auto in_struct_name =
- generate_name(func->name() + "_" + kInStructNameSuffix);
- auto in_var_name = generate_name(kTintStructInVarPrefix);
+ auto in_struct_name = namer_->GenerateName(namer_->NameFor(func->symbol()) +
+ "_" + kInStructNameSuffix);
+ auto in_var_name = namer_->GenerateName(kTintStructInVarPrefix);
ep_sym_to_in_data_[func->symbol().value()] = {in_struct_name, in_var_name};
make_indent(out);
@@ -1438,7 +1426,7 @@
auto* deco = data.second;
make_indent(out);
- if (!EmitType(out, var->type(), var->name())) {
+ if (!EmitType(out, var->type(), var->symbol())) {
return false;
}
@@ -1469,9 +1457,9 @@
}
if (!outvariables.empty()) {
- auto outstruct_name =
- generate_name(func->name() + "_" + kOutStructNameSuffix);
- auto outvar_name = generate_name(kTintStructOutVarPrefix);
+ auto outstruct_name = namer_->GenerateName(namer_->NameFor(func->symbol()) +
+ "_" + kOutStructNameSuffix);
+ auto outvar_name = namer_->GenerateName(kTintStructOutVarPrefix);
ep_sym_to_out_data_[func->symbol().value()] = {outstruct_name, outvar_name};
make_indent(out);
@@ -1483,7 +1471,7 @@
auto* deco = data.second;
make_indent(out);
- if (!EmitType(out, var->type(), var->name())) {
+ if (!EmitType(out, var->type(), var->symbol())) {
return false;
}
@@ -1569,8 +1557,7 @@
} else {
out << "void";
}
- // TODO(dsinclair): This should output the remapped name
- out << " " << namer_.NameFor(module_->SymbolToName(current_ep_sym_)) << "(";
+ out << " " << namer_->NameFor(current_ep_sym_) << "(";
auto in_data = ep_sym_to_in_data_.find(current_ep_sym_.value());
if (in_data != ep_sym_to_in_data_.end()) {
@@ -1649,8 +1636,8 @@
bool GeneratorImpl::EmitLoop(std::ostream& out, ast::LoopStatement* stmt) {
loop_emission_counter_++;
- std::string guard = namer_.NameFor("tint_hlsl_is_first_" +
- std::to_string(loop_emission_counter_));
+ std::string guard = namer_->GenerateName(
+ "tint_hlsl_is_first_" + std::to_string(loop_emission_counter_));
if (stmt->has_continuing()) {
make_indent(out);
@@ -1877,11 +1864,11 @@
uint32_t stride = mat->rows() == 2 ? 8 : 16;
if (is_store) {
- if (!EmitType(out, mat, "")) {
+ if (!EmitType(out, mat, Symbol())) {
return false;
}
- auto name = generate_name(kTempNamePrefix);
+ auto name = namer_->GenerateName(kTempNamePrefix);
out << " " << name << " = ";
if (!EmitExpression(pre, out, rhs)) {
return false;
@@ -2101,9 +2088,9 @@
bool GeneratorImpl::EmitType(std::ostream& out,
ast::type::Type* type,
- const std::string& name) {
+ const Symbol& sym) {
if (auto* alias = type->As<ast::type::Alias>()) {
- out << namer_.NameFor(alias->name());
+ out << namer_->NameFor(alias->symbol());
} else if (auto* ary = type->As<ast::type::Array>()) {
ast::type::Type* base_type = ary;
std::vector<uint32_t> sizes;
@@ -2118,11 +2105,11 @@
}
base_type = arr->type();
}
- if (!EmitType(out, base_type, "")) {
+ if (!EmitType(out, base_type, Symbol())) {
return false;
}
- if (!name.empty()) {
- out << " " << namer_.NameFor(name);
+ if (sym.IsValid()) {
+ out << " " << namer_->NameFor(sym);
}
for (uint32_t size : sizes) {
out << "[" << size << "]";
@@ -2134,7 +2121,7 @@
} else if (type->Is<ast::type::I32>()) {
out << "int";
} else if (auto* mat = type->As<ast::type::Matrix>()) {
- if (!EmitType(out, mat->type(), "")) {
+ if (!EmitType(out, mat->type(), Symbol())) {
return false;
}
out << mat->rows() << "x" << mat->columns();
@@ -2205,7 +2192,7 @@
out << "uint" << size;
} else {
out << "vector<";
- if (!EmitType(out, vec->type(), "")) {
+ if (!EmitType(out, vec->type(), Symbol())) {
return false;
}
out << ", " << size << ">";
@@ -2234,12 +2221,12 @@
// TODO(dsinclair): Handle [[offset]] annotation on structs
// https://bugs.chromium.org/p/tint/issues/detail?id=184
- if (!EmitType(out, mem->type(), mem->name())) {
+ if (!EmitType(out, mem->type(), mem->symbol())) {
return false;
}
// Array member name will be output with the type
if (!mem->type()->Is<ast::type::Array>()) {
- out << " " << namer_.NameFor(mem->name());
+ out << " " << namer_->NameFor(mem->symbol());
}
out << ";" << std::endl;
}
@@ -2298,7 +2285,7 @@
if (var->is_const()) {
out << "const ";
}
- if (!EmitType(out, var->type(), var->name())) {
+ if (!EmitType(out, var->type(), var->symbol())) {
return false;
}
if (!var->type()->Is<ast::type::Array>()) {
@@ -2347,7 +2334,7 @@
}
out << "#endif" << std::endl;
out << "static const ";
- if (!EmitType(out, var->type(), var->name())) {
+ if (!EmitType(out, var->type(), var->symbol())) {
return false;
}
out << " " << var->name() << " = WGSL_SPEC_CONSTANT_" << const_id << ";"
@@ -2355,7 +2342,7 @@
out << "#undef WGSL_SPEC_CONSTANT_" << const_id << std::endl;
} else {
out << "static const ";
- if (!EmitType(out, var->type(), var->name())) {
+ if (!EmitType(out, var->type(), var->symbol())) {
return false;
}
if (!var->type()->Is<ast::type::Array>()) {
diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h
index ebd98b9..4a2a371 100644
--- a/src/writer/hlsl/generator_impl.h
+++ b/src/writer/hlsl/generator_impl.h
@@ -15,6 +15,7 @@
#ifndef SRC_WRITER_HLSL_GENERATOR_IMPL_H_
#define SRC_WRITER_HLSL_GENERATOR_IMPL_H_
+#include <memory>
#include <string>
#include <unordered_map>
#include <unordered_set>
@@ -41,8 +42,8 @@
#include "src/ast/type/struct_type.h"
#include "src/ast/type_constructor_expression.h"
#include "src/ast/unary_op_expression.h"
+#include "src/namer.h"
#include "src/scope_stack.h"
-#include "src/writer/hlsl/namer.h"
namespace tint {
namespace writer {
@@ -288,11 +289,9 @@
/// Handles generating type
/// @param out the output stream
/// @param type the type to generate
- /// @param name the name of the variable, only used for array emission
+ /// @param sym the symbol of the variable, Only used for array emission
/// @returns true if the type is emitted
- bool EmitType(std::ostream& out,
- ast::type::Type* type,
- const std::string& name);
+ bool EmitType(std::ostream& out, ast::type::Type* type, const Symbol& sym);
/// Handles generating a structure declaration
/// @param out the output stream
/// @param ty the struct to generate
@@ -379,9 +378,6 @@
/// @returns true if an input or output struct is required.
bool has_referenced_var_needing_struct(ast::Function* func);
- /// @returns the namer for testing
- Namer* namer_for_testing() { return &namer_; }
-
private:
enum class VarType { kIn, kOut };
@@ -395,8 +391,8 @@
std::string error_;
size_t indent_ = 0;
- Namer namer_;
ast::Module* module_ = nullptr;
+ std::unique_ptr<Namer> namer_;
Symbol current_ep_sym_;
bool generating_entry_point_ = false;
uint32_t loop_emission_counter_ = 0;
diff --git a/src/writer/hlsl/generator_impl_alias_type_test.cc b/src/writer/hlsl/generator_impl_alias_type_test.cc
index 544f4ea..f8c823b 100644
--- a/src/writer/hlsl/generator_impl_alias_type_test.cc
+++ b/src/writer/hlsl/generator_impl_alias_type_test.cc
@@ -34,14 +34,6 @@
)");
}
-TEST_F(HlslGeneratorImplTest_Alias, EmitAlias_NameCollision) {
- auto* alias = ty.alias("float", ty.f32);
-
- ASSERT_TRUE(gen.EmitConstructedType(out, alias)) << gen.error();
- EXPECT_EQ(result(), R"(typedef float float_tint_0;
-)");
-}
-
TEST_F(HlslGeneratorImplTest_Alias, EmitAlias_Struct) {
auto* str = create<ast::Struct>(
ast::StructMemberList{Member("a", ty.f32),
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 49d4530..42b5988 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -70,24 +70,6 @@
)");
}
-TEST_F(HlslGeneratorImplTest_Function, Emit_Function_Name_Collision) {
- auto* func = Func("GeometryShader", ast::VariableList{}, ty.void_,
- ast::StatementList{
- create<ast::ReturnStatement>(),
- },
- ast::FunctionDecorationList{});
-
- mod->AddFunction(func);
- gen.increment_indent();
-
- ASSERT_TRUE(gen.Generate(out)) << gen.error();
- EXPECT_EQ(result(), R"( void GeometryShader_tint_0() {
- return;
- }
-
-)");
-}
-
TEST_F(HlslGeneratorImplTest_Function, Emit_Function_WithParams) {
auto* func =
Func("my_func",
@@ -810,23 +792,6 @@
}
TEST_F(HlslGeneratorImplTest_Function,
- Emit_FunctionDecoration_EntryPoint_WithNameCollision) {
- auto* func = Func(
- "GeometryShader", ast::VariableList{}, ty.void_, ast::StatementList{},
- ast::FunctionDecorationList{
- create<ast::StageDecoration>(ast::PipelineStage::kFragment),
- });
-
- mod->AddFunction(func);
-
- ASSERT_TRUE(gen.Generate(out)) << gen.error();
- EXPECT_EQ(result(), R"(void GeometryShader_tint_0() {
-}
-
-)");
-}
-
-TEST_F(HlslGeneratorImplTest_Function,
Emit_FunctionDecoration_EntryPoint_Compute) {
auto* func =
Func("main", ast::VariableList{}, ty.void_,
diff --git a/src/writer/hlsl/generator_impl_identifier_test.cc b/src/writer/hlsl/generator_impl_identifier_test.cc
index eba1c18..94bbab6 100644
--- a/src/writer/hlsl/generator_impl_identifier_test.cc
+++ b/src/writer/hlsl/generator_impl_identifier_test.cc
@@ -29,13 +29,6 @@
EXPECT_EQ(result(), "foo");
}
-TEST_F(HlslGeneratorImplTest_Identifier,
- EmitIdentifierExpression_Single_WithCollision) {
- auto* i = Expr("virtual");
- ASSERT_TRUE(gen.EmitExpression(pre, out, i)) << gen.error();
- EXPECT_EQ(result(), "virtual_tint_0");
-}
-
} // namespace
} // namespace hlsl
} // namespace writer
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index 1841ef6..0306eda 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -74,7 +74,7 @@
auto* a = Var("a", ast::StorageClass::kNone, ty.vec2<f32>());
auto* b = Var("b", ast::StorageClass::kNone, ty.vec3<f32>());
- auto* call = Call("outer_product", "a", "b");
+ auto* call = Call("outerProduct", "a", "b");
td.RegisterVariableForTesting(a);
td.RegisterVariableForTesting(b);
diff --git a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
index eeaef41..08e828b 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
@@ -33,181 +33,181 @@
using ValidTextureOverload = ast::intrinsic::test::ValidTextureOverload;
switch (overload) {
case ValidTextureOverload::kSample1dF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, 1.0f))";
+ return R"(texture.Sample(sampler, 1.0f))";
case ValidTextureOverload::kSample1dArrayF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, float(2))))";
+ return R"(texture.Sample(sampler, float2(1.0f, float(2))))";
case ValidTextureOverload::kSample2dF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f)))";
+ return R"(texture.Sample(sampler, float2(1.0f, 2.0f)))";
case ValidTextureOverload::kSample2dOffsetF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f), int2(3, 4)))";
+ return R"(texture.Sample(sampler, float2(1.0f, 2.0f), int2(3, 4)))";
case ValidTextureOverload::kSample2dArrayF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3))))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, float(3))))";
case ValidTextureOverload::kSample2dArrayOffsetF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
case ValidTextureOverload::kSample3dF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f)))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, 3.0f)))";
case ValidTextureOverload::kSample3dOffsetF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), int3(4, 5, 6)))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, 3.0f), int3(4, 5, 6)))";
case ValidTextureOverload::kSampleCubeF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f)))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, 3.0f)))";
case ValidTextureOverload::kSampleCubeArrayF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4))))";
+ return R"(texture.Sample(sampler, float4(1.0f, 2.0f, 3.0f, float(4))))";
case ValidTextureOverload::kSampleDepth2dF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f)))";
+ return R"(texture.Sample(sampler, float2(1.0f, 2.0f)))";
case ValidTextureOverload::kSampleDepth2dOffsetF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float2(1.0f, 2.0f), int2(3, 4)))";
+ return R"(texture.Sample(sampler, float2(1.0f, 2.0f), int2(3, 4)))";
case ValidTextureOverload::kSampleDepth2dArrayF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3))))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, float(3))))";
case ValidTextureOverload::kSampleDepth2dArrayOffsetF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, float(3)), int2(4, 5)))";
case ValidTextureOverload::kSampleDepthCubeF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float3(1.0f, 2.0f, 3.0f)))";
+ return R"(texture.Sample(sampler, float3(1.0f, 2.0f, 3.0f)))";
case ValidTextureOverload::kSampleDepthCubeArrayF32:
- return R"(texture_tint_0.Sample(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4))))";
+ return R"(texture.Sample(sampler, float4(1.0f, 2.0f, 3.0f, float(4))))";
case ValidTextureOverload::kSampleBias2dF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float2(1.0f, 2.0f), 3.0f))";
+ return R"(texture.SampleBias(sampler, float2(1.0f, 2.0f), 3.0f))";
case ValidTextureOverload::kSampleBias2dOffsetF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
+ return R"(texture.SampleBias(sampler, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
case ValidTextureOverload::kSampleBias2dArrayF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, float(4)), 3.0f))";
+ return R"(texture.SampleBias(sampler, float3(1.0f, 2.0f, float(4)), 3.0f))";
case ValidTextureOverload::kSampleBias2dArrayOffsetF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
+ return R"(texture.SampleBias(sampler, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
case ValidTextureOverload::kSampleBias3dF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
+ return R"(texture.SampleBias(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
case ValidTextureOverload::kSampleBias3dOffsetF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
+ return R"(texture.SampleBias(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
case ValidTextureOverload::kSampleBiasCubeF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
+ return R"(texture.SampleBias(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
case ValidTextureOverload::kSampleBiasCubeArrayF32:
- return R"(texture_tint_0.SampleBias(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(3)), 4.0f))";
+ return R"(texture.SampleBias(sampler, float4(1.0f, 2.0f, 3.0f, float(3)), 4.0f))";
case ValidTextureOverload::kSampleLevel2dF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3.0f))";
+ return R"(texture.SampleLevel(sampler, float2(1.0f, 2.0f), 3.0f))";
case ValidTextureOverload::kSampleLevel2dOffsetF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
+ return R"(texture.SampleLevel(sampler, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
case ValidTextureOverload::kSampleLevel2dArrayF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4.0f))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, float(3)), 4.0f))";
case ValidTextureOverload::kSampleLevel2dArrayOffsetF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))";
case ValidTextureOverload::kSampleLevel3dF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
case ValidTextureOverload::kSampleLevel3dOffsetF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))";
case ValidTextureOverload::kSampleLevelCubeF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
case ValidTextureOverload::kSampleLevelCubeArrayF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
+ return R"(texture.SampleLevel(sampler, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
case ValidTextureOverload::kSampleLevelDepth2dF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3))";
+ return R"(texture.SampleLevel(sampler, float2(1.0f, 2.0f), 3))";
case ValidTextureOverload::kSampleLevelDepth2dOffsetF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float2(1.0f, 2.0f), 3, int2(4, 5)))";
+ return R"(texture.SampleLevel(sampler, float2(1.0f, 2.0f), 3, int2(4, 5)))";
case ValidTextureOverload::kSampleLevelDepth2dArrayF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, float(3)), 4))";
case ValidTextureOverload::kSampleLevelDepth2dArrayOffsetF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, float(3)), 4, int2(5, 6)))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, float(3)), 4, int2(5, 6)))";
case ValidTextureOverload::kSampleLevelDepthCubeF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4))";
+ return R"(texture.SampleLevel(sampler, float3(1.0f, 2.0f, 3.0f), 4))";
case ValidTextureOverload::kSampleLevelDepthCubeArrayF32:
- return R"(texture_tint_0.SampleLevel(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4)), 5))";
+ return R"(texture.SampleLevel(sampler, float4(1.0f, 2.0f, 3.0f, float(4)), 5))";
case ValidTextureOverload::kSampleGrad2dF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f)))";
+ return R"(texture.SampleGrad(sampler, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f)))";
case ValidTextureOverload::kSampleGrad2dOffsetF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), int2(7, 8)))";
+ return R"(texture.SampleGrad(sampler, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), int2(7, 8)))";
case ValidTextureOverload::kSampleGrad2dArrayF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f)))";
+ return R"(texture.SampleGrad(sampler, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f)))";
case ValidTextureOverload::kSampleGrad2dArrayOffsetF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f), int2(8, 9)))";
+ return R"(texture.SampleGrad(sampler, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f), int2(8, 9)))";
case ValidTextureOverload::kSampleGrad3dF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
+ return R"(texture.SampleGrad(sampler, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
case ValidTextureOverload::kSampleGrad3dOffsetF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), int3(10, 11, 12)))";
+ return R"(texture.SampleGrad(sampler, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), int3(10, 11, 12)))";
case ValidTextureOverload::kSampleGradCubeF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
+ return R"(texture.SampleGrad(sampler, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))";
case ValidTextureOverload::kSampleGradCubeArrayF32:
- return R"(texture_tint_0.SampleGrad(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4)), float3(5.0f, 6.0f, 7.0f), float3(8.0f, 9.0f, 10.0f)))";
+ return R"(texture.SampleGrad(sampler, float4(1.0f, 2.0f, 3.0f, float(4)), float3(5.0f, 6.0f, 7.0f), float3(8.0f, 9.0f, 10.0f)))";
case ValidTextureOverload::kSampleGradDepth2dF32:
- return R"(texture_tint_0.SampleCmp(sampler_tint_0, float2(1.0f, 2.0f), 3.0f))";
+ return R"(texture.SampleCmp(sampler, float2(1.0f, 2.0f), 3.0f))";
case ValidTextureOverload::kSampleGradDepth2dOffsetF32:
- return R"(texture_tint_0.SampleCmp(sampler_tint_0, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
+ return R"(texture.SampleCmp(sampler, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))";
case ValidTextureOverload::kSampleGradDepth2dArrayF32:
- return R"(texture_tint_0.SampleCmp(sampler_tint_0, float3(1.0f, 2.0f, float(4)), 3.0f))";
+ return R"(texture.SampleCmp(sampler, float3(1.0f, 2.0f, float(4)), 3.0f))";
case ValidTextureOverload::kSampleGradDepth2dArrayOffsetF32:
- return R"(texture_tint_0.SampleCmp(sampler_tint_0, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
+ return R"(texture.SampleCmp(sampler, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))";
case ValidTextureOverload::kSampleGradDepthCubeF32:
- return R"(texture_tint_0.SampleCmp(sampler_tint_0, float3(1.0f, 2.0f, 3.0f), 4.0f))";
+ return R"(texture.SampleCmp(sampler, float3(1.0f, 2.0f, 3.0f), 4.0f))";
case ValidTextureOverload::kSampleGradDepthCubeArrayF32:
- return R"(texture_tint_0.SampleCmp(sampler_tint_0, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
+ return R"(texture.SampleCmp(sampler, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))";
case ValidTextureOverload::kLoad1dF32:
- return R"(texture_tint_0.Load(int2(1, 0)))";
+ return R"(texture.Load(int2(1, 0)))";
case ValidTextureOverload::kLoad1dU32:
- return R"(texture_tint_0.Load(int2(1, 0)))";
+ return R"(texture.Load(int2(1, 0)))";
case ValidTextureOverload::kLoad1dI32:
- return R"(texture_tint_0.Load(int2(1, 0)))";
+ return R"(texture.Load(int2(1, 0)))";
case ValidTextureOverload::kLoad1dArrayF32:
- return R"(texture_tint_0.Load(int3(1, 2, 0)))";
+ return R"(texture.Load(int3(1, 2, 0)))";
case ValidTextureOverload::kLoad1dArrayU32:
- return R"(texture_tint_0.Load(int3(1, 2, 0)))";
+ return R"(texture.Load(int3(1, 2, 0)))";
case ValidTextureOverload::kLoad1dArrayI32:
- return R"(texture_tint_0.Load(int3(1, 2, 0)))";
+ return R"(texture.Load(int3(1, 2, 0)))";
case ValidTextureOverload::kLoad2dF32:
- return R"(texture_tint_0.Load(int3(1, 2, 0)))";
+ return R"(texture.Load(int3(1, 2, 0)))";
case ValidTextureOverload::kLoad2dU32:
- return R"(texture_tint_0.Load(int3(1, 2, 0)))";
+ return R"(texture.Load(int3(1, 2, 0)))";
case ValidTextureOverload::kLoad2dI32:
- return R"(texture_tint_0.Load(int3(1, 2, 0)))";
+ return R"(texture.Load(int3(1, 2, 0)))";
case ValidTextureOverload::kLoad2dLevelF32:
- return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
+ return R"(texture.Load(int3(1, 2, 0), 3))";
case ValidTextureOverload::kLoad2dLevelU32:
- return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
+ return R"(texture.Load(int3(1, 2, 0), 3))";
case ValidTextureOverload::kLoad2dLevelI32:
- return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
+ return R"(texture.Load(int3(1, 2, 0), 3))";
case ValidTextureOverload::kLoad2dArrayF32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0)))";
+ return R"(texture.Load(int4(1, 2, 3, 0)))";
case ValidTextureOverload::kLoad2dArrayU32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0)))";
+ return R"(texture.Load(int4(1, 2, 3, 0)))";
case ValidTextureOverload::kLoad2dArrayI32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0)))";
+ return R"(texture.Load(int4(1, 2, 3, 0)))";
case ValidTextureOverload::kLoad2dArrayLevelF32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoad2dArrayLevelU32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoad2dArrayLevelI32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoad3dF32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0)))";
+ return R"(texture.Load(int4(1, 2, 3, 0)))";
case ValidTextureOverload::kLoad3dU32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0)))";
+ return R"(texture.Load(int4(1, 2, 3, 0)))";
case ValidTextureOverload::kLoad3dI32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0)))";
+ return R"(texture.Load(int4(1, 2, 3, 0)))";
case ValidTextureOverload::kLoad3dLevelF32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoad3dLevelU32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoad3dLevelI32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoadMultisampled2dF32:
- return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
+ return R"(texture.Load(int3(1, 2, 0), 3))";
case ValidTextureOverload::kLoadMultisampled2dU32:
- return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
+ return R"(texture.Load(int3(1, 2, 0), 3))";
case ValidTextureOverload::kLoadMultisampled2dI32:
- return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
+ return R"(texture.Load(int3(1, 2, 0), 3))";
case ValidTextureOverload::kLoadMultisampled2dArrayF32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoadMultisampled2dArrayU32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoadMultisampled2dArrayI32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoadDepth2dF32:
- return R"(texture_tint_0.Load(int3(1, 2, 0)))";
+ return R"(texture.Load(int3(1, 2, 0)))";
case ValidTextureOverload::kLoadDepth2dLevelF32:
- return R"(texture_tint_0.Load(int3(1, 2, 0), 3))";
+ return R"(texture.Load(int3(1, 2, 0), 3))";
case ValidTextureOverload::kLoadDepth2dArrayF32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0)))";
+ return R"(texture.Load(int4(1, 2, 3, 0)))";
case ValidTextureOverload::kLoadDepth2dArrayLevelF32:
- return R"(texture_tint_0.Load(int4(1, 2, 3, 0), 4))";
+ return R"(texture.Load(int4(1, 2, 3, 0), 4))";
case ValidTextureOverload::kLoadStorageRO1dRgba32float:
- return R"(texture_tint_0.Load(1))";
+ return R"(texture.Load(1))";
case ValidTextureOverload::kLoadStorageRO1dArrayRgba32float:
- return R"(texture_tint_0.Load(int2(1, 2)))";
+ return R"(texture.Load(int2(1, 2)))";
case ValidTextureOverload::kLoadStorageRO2dRgba8unorm:
case ValidTextureOverload::kLoadStorageRO2dRgba8snorm:
case ValidTextureOverload::kLoadStorageRO2dRgba8uint:
@@ -224,21 +224,21 @@
case ValidTextureOverload::kLoadStorageRO2dRgba32uint:
case ValidTextureOverload::kLoadStorageRO2dRgba32sint:
case ValidTextureOverload::kLoadStorageRO2dRgba32float:
- return R"(texture_tint_0.Load(int2(1, 2)))";
+ return R"(texture.Load(int2(1, 2)))";
case ValidTextureOverload::kLoadStorageRO2dArrayRgba32float:
- return R"(texture_tint_0.Load(int3(1, 2, 3)))";
+ return R"(texture.Load(int3(1, 2, 3)))";
case ValidTextureOverload::kLoadStorageRO3dRgba32float:
- return R"(texture_tint_0.Load(int3(1, 2, 3)))";
+ return R"(texture.Load(int3(1, 2, 3)))";
case ValidTextureOverload::kStoreWO1dRgba32float:
- return R"(texture_tint_0[1] = float4(2.0f, 3.0f, 4.0f, 5.0f))";
+ return R"(texture[1] = float4(2.0f, 3.0f, 4.0f, 5.0f))";
case ValidTextureOverload::kStoreWO1dArrayRgba32float:
- return R"(texture_tint_0[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))";
+ return R"(texture[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))";
case ValidTextureOverload::kStoreWO2dRgba32float:
- return R"(texture_tint_0[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))";
+ return R"(texture[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))";
case ValidTextureOverload::kStoreWO2dArrayRgba32float:
- return R"(texture_tint_0[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
+ return R"(texture[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
case ValidTextureOverload::kStoreWO3dRgba32float:
- return R"(texture_tint_0[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
+ return R"(texture[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))";
}
return "<unmatched texture overload>";
} // NOLINT - Ignore the length of this function
diff --git a/src/writer/hlsl/generator_impl_test.cc b/src/writer/hlsl/generator_impl_test.cc
index 2a4f8ed..75980eb 100644
--- a/src/writer/hlsl/generator_impl_test.cc
+++ b/src/writer/hlsl/generator_impl_test.cc
@@ -39,25 +39,6 @@
)");
}
-TEST_F(HlslGeneratorImplTest, InputStructName) {
- ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
-}
-
-TEST_F(HlslGeneratorImplTest, InputStructName_ConflictWithExisting) {
- // Register the struct name as existing.
- auto* namer = gen.namer_for_testing();
- namer->NameFor("func_main_out");
-
- ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_0");
-}
-
-TEST_F(HlslGeneratorImplTest, NameConflictWith_InputStructName) {
- ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
-
- ASSERT_TRUE(gen.EmitIdentifier(pre, out, Expr("func_main_in")));
- EXPECT_EQ(result(), "func_main_in_0");
-}
-
struct HlslBuiltinData {
ast::Builtin builtin;
const char* attribute_name;
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index 644e75f..ef697cd 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -46,25 +46,20 @@
TEST_F(HlslGeneratorImplTest_Type, EmitType_Alias) {
auto* alias = ty.alias("alias", ty.f32);
- ASSERT_TRUE(gen.EmitType(out, alias, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, alias, Symbol())) << gen.error();
EXPECT_EQ(result(), "alias");
}
-TEST_F(HlslGeneratorImplTest_Type, EmitType_Alias_NameCollision) {
- auto* alias = ty.alias("bool", ty.f32);
-
- ASSERT_TRUE(gen.EmitType(out, alias, "")) << gen.error();
- EXPECT_EQ(result(), "bool_tint_0");
-}
-
TEST_F(HlslGeneratorImplTest_Type, EmitType_Array) {
- ASSERT_TRUE(gen.EmitType(out, ty.array<bool, 4>(), "ary")) << gen.error();
+ auto sym = mod->RegisterSymbol("ary");
+ ASSERT_TRUE(gen.EmitType(out, ty.array<bool, 4>(), sym)) << gen.error();
EXPECT_EQ(result(), "bool ary[4]");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_ArrayOfArray) {
auto* arr = ty.array(ty.array<bool, 4>(), 5);
- ASSERT_TRUE(gen.EmitType(out, arr, "ary")) << gen.error();
+ auto sym = mod->RegisterSymbol("ary");
+ ASSERT_TRUE(gen.EmitType(out, arr, sym)) << gen.error();
EXPECT_EQ(result(), "bool ary[5][4]");
}
@@ -72,54 +67,46 @@
TEST_F(HlslGeneratorImplTest_Type,
DISABLED_EmitType_ArrayOfArrayOfRuntimeArray) {
auto* arr = ty.array(ty.array(ty.array<bool, 4>(), 5), 0);
- ASSERT_TRUE(gen.EmitType(out, arr, "ary")) << gen.error();
+ auto sym = mod->RegisterSymbol("ary");
+ ASSERT_TRUE(gen.EmitType(out, arr, sym)) << gen.error();
EXPECT_EQ(result(), "bool ary[5][4][1]");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_ArrayOfArrayOfArray) {
auto* arr = ty.array(ty.array(ty.array<bool, 4>(), 5), 6);
- ASSERT_TRUE(gen.EmitType(out, arr, "ary")) << gen.error();
+ auto sym = mod->RegisterSymbol("ary");
+ ASSERT_TRUE(gen.EmitType(out, arr, sym)) << gen.error();
EXPECT_EQ(result(), "bool ary[6][5][4]");
}
-TEST_F(HlslGeneratorImplTest_Type, EmitType_Array_NameCollision) {
- ASSERT_TRUE(gen.EmitType(out, ty.array<bool, 4>(), "bool")) << gen.error();
- EXPECT_EQ(result(), "bool bool_tint_0[4]");
-}
-
TEST_F(HlslGeneratorImplTest_Type, EmitType_Array_WithoutName) {
- ASSERT_TRUE(gen.EmitType(out, ty.array<bool, 4>(), "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.array<bool, 4>(), Symbol())) << gen.error();
EXPECT_EQ(result(), "bool[4]");
}
TEST_F(HlslGeneratorImplTest_Type, DISABLED_EmitType_RuntimeArray) {
- ASSERT_TRUE(gen.EmitType(out, ty.array<bool>(), "ary")) << gen.error();
+ auto sym = mod->RegisterSymbol("ary");
+ ASSERT_TRUE(gen.EmitType(out, ty.array<bool>(), sym)) << gen.error();
EXPECT_EQ(result(), "bool ary[]");
}
-TEST_F(HlslGeneratorImplTest_Type,
- DISABLED_EmitType_RuntimeArray_NameCollision) {
- ASSERT_TRUE(gen.EmitType(out, ty.array<bool>(), "double")) << gen.error();
- EXPECT_EQ(result(), "bool double_tint_0[]");
-}
-
TEST_F(HlslGeneratorImplTest_Type, EmitType_Bool) {
- ASSERT_TRUE(gen.EmitType(out, ty.bool_, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.bool_, Symbol())) << gen.error();
EXPECT_EQ(result(), "bool");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_F32) {
- ASSERT_TRUE(gen.EmitType(out, ty.f32, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.f32, Symbol())) << gen.error();
EXPECT_EQ(result(), "float");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_I32) {
- ASSERT_TRUE(gen.EmitType(out, ty.i32, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.i32, Symbol())) << gen.error();
EXPECT_EQ(result(), "int");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_Matrix) {
- ASSERT_TRUE(gen.EmitType(out, ty.mat2x3<f32>(), "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.mat2x3<f32>(), Symbol())) << gen.error();
EXPECT_EQ(result(), "float3x2");
}
@@ -127,7 +114,7 @@
TEST_F(HlslGeneratorImplTest_Type, DISABLED_EmitType_Pointer) {
ast::type::Pointer p(ty.f32, ast::StorageClass::kWorkgroup);
- ASSERT_TRUE(gen.EmitType(out, &p, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, &p, Symbol())) << gen.error();
EXPECT_EQ(result(), "float*");
}
@@ -153,7 +140,7 @@
ast::StructDecorationList{});
auto* s = ty.struct_("S", str);
- ASSERT_TRUE(gen.EmitType(out, s, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, s, Symbol())) << gen.error();
EXPECT_EQ(result(), "S");
}
@@ -165,7 +152,7 @@
ast::StructDecorationList{});
auto* s = ty.struct_("S", str);
- ASSERT_TRUE(gen.EmitType(out, s, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, s, Symbol())) << gen.error();
EXPECT_EQ(result(), R"(struct {
int8_t pad_0[4];
int a;
@@ -184,8 +171,8 @@
auto* s = ty.struct_("S", str);
ASSERT_TRUE(gen.EmitStructType(out, s, "S")) << gen.error();
EXPECT_EQ(result(), R"(struct S {
- int double_tint_0;
- float float_tint_0;
+ int double;
+ float float;
};
)");
}
@@ -209,31 +196,31 @@
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_U32) {
- ASSERT_TRUE(gen.EmitType(out, ty.u32, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.u32, Symbol())) << gen.error();
EXPECT_EQ(result(), "uint");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_Vector) {
- ASSERT_TRUE(gen.EmitType(out, ty.vec3<f32>(), "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.vec3<f32>(), Symbol())) << gen.error();
EXPECT_EQ(result(), "float3");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_Void) {
- ASSERT_TRUE(gen.EmitType(out, ty.void_, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, ty.void_, Symbol())) << gen.error();
EXPECT_EQ(result(), "void");
}
TEST_F(HlslGeneratorImplTest_Type, EmitSampler) {
ast::type::Sampler sampler(ast::type::SamplerKind::kSampler);
- ASSERT_TRUE(gen.EmitType(out, &sampler, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, &sampler, Symbol())) << gen.error();
EXPECT_EQ(result(), "SamplerState");
}
TEST_F(HlslGeneratorImplTest_Type, EmitSamplerComparison) {
ast::type::Sampler sampler(ast::type::SamplerKind::kComparisonSampler);
- ASSERT_TRUE(gen.EmitType(out, &sampler, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, &sampler, Symbol())) << gen.error();
EXPECT_EQ(result(), "SamplerComparisonState");
}
@@ -251,7 +238,7 @@
ast::type::DepthTexture s(params.dim);
- ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, &s, Symbol())) << gen.error();
EXPECT_EQ(result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
@@ -279,7 +266,7 @@
ast::type::SampledTexture s(params.dim, ty.f32);
- ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, &s, Symbol())) << gen.error();
EXPECT_EQ(result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
@@ -300,7 +287,7 @@
TEST_F(HlslGeneratorImplTest_Type, EmitMultisampledTexture) {
ast::type::MultisampledTexture s(ast::type::TextureDimension::k2d, ty.f32);
- ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, &s, Symbol())) << gen.error();
EXPECT_EQ(result(), "Texture2D");
}
@@ -324,7 +311,7 @@
: ast::AccessControl::kWriteOnly,
params.imgfmt);
- ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
+ ASSERT_TRUE(gen.EmitType(out, &s, Symbol())) << gen.error();
EXPECT_EQ(result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
diff --git a/src/writer/hlsl/namer.cc b/src/writer/hlsl/namer.cc
deleted file mode 100644
index a577d63..0000000
--- a/src/writer/hlsl/namer.cc
+++ /dev/null
@@ -1,696 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/writer/hlsl/namer.h"
-
-#include <algorithm>
-
-namespace tint {
-namespace writer {
-namespace hlsl {
-namespace {
-
-// This list is used for a binary search and must be kept in sorted order.
-const char* kNames[] = {"AddressU",
- "AddressV",
- "AddressW",
- "AllMemoryBarrier",
- "AllMemoryBarrierWithGroupSync",
- "AppendStructuredBuffer",
- "BINORMAL",
- "BLENDINDICES",
- "BLENDWEIGHT",
- "BlendState",
- "BorderColor",
- "Buffer",
- "ByteAddressBuffer",
- "COLOR",
- "CheckAccessFullyMapped",
- "ComparisonFunc",
- "CompileShader",
- "ComputeShader",
- "ConsumeStructuredBuffer",
- "D3DCOLORtoUBYTE4",
- "DEPTH",
- "DepthStencilState",
- "DepthStencilView",
- "DeviceMemoryBarrier",
- "DeviceMemroyBarrierWithGroupSync",
- "DomainShader",
- "EvaluateAttributeAtCentroid",
- "EvaluateAttributeAtSample",
- "EvaluateAttributeSnapped",
- "FOG",
- "Filter",
- "GeometryShader",
- "GetRenderTargetSampleCount",
- "GetRenderTargetSamplePosition",
- "GroupMemoryBarrier",
- "GroupMemroyBarrierWithGroupSync",
- "Hullshader",
- "InputPatch",
- "InterlockedAdd",
- "InterlockedAnd",
- "InterlockedCompareExchange",
- "InterlockedCompareStore",
- "InterlockedExchange",
- "InterlockedMax",
- "InterlockedMin",
- "InterlockedOr",
- "InterlockedXor",
- "LineStream",
- "MaxAnisotropy",
- "MaxLOD",
- "MinLOD",
- "MipLODBias",
- "NORMAL",
- "NULL",
- "Normal",
- "OutputPatch",
- "POSITION",
- "POSITIONT",
- "PSIZE",
- "PixelShader",
- "PointStream",
- "Process2DQuadTessFactorsAvg",
- "Process2DQuadTessFactorsMax",
- "Process2DQuadTessFactorsMin",
- "ProcessIsolineTessFactors",
- "ProcessQuadTessFactorsAvg",
- "ProcessQuadTessFactorsMax",
- "ProcessQuadTessFactorsMin",
- "ProcessTriTessFactorsAvg",
- "ProcessTriTessFactorsMax",
- "ProcessTriTessFactorsMin",
- "RWBuffer",
- "RWByteAddressBuffer",
- "RWStructuredBuffer",
- "RWTexture1D",
- "RWTexture1DArray",
- "RWTexture2D",
- "RWTexture2DArray",
- "RWTexture3D",
- "RasterizerState",
- "RenderTargetView",
- "SV_ClipDistance",
- "SV_Coverage",
- "SV_CullDistance",
- "SV_Depth",
- "SV_DepthGreaterEqual",
- "SV_DepthLessEqual",
- "SV_DispatchThreadID",
- "SV_DomainLocation",
- "SV_GSInstanceID",
- "SV_GroupID",
- "SV_GroupIndex",
- "SV_GroupThreadID",
- "SV_InnerCoverage",
- "SV_InsideTessFactor",
- "SV_InstanceID",
- "SV_IsFrontFace",
- "SV_OutputControlPointID",
- "SV_Position",
- "SV_PrimitiveID",
- "SV_RenderTargetArrayIndex",
- "SV_SampleIndex",
- "SV_StencilRef",
- "SV_Target",
- "SV_TessFactor",
- "SV_VertexArrayIndex",
- "SV_VertexID",
- "Sampler",
- "Sampler1D",
- "Sampler2D",
- "Sampler3D",
- "SamplerCUBE",
- "StructuredBuffer",
- "TANGENT",
- "TESSFACTOR",
- "TEXCOORD",
- "Texcoord",
- "Texture",
- "Texture1D",
- "Texture1DArray",
- "Texture2D",
- "Texture2DArray",
- "Texture2DMS",
- "Texture2DMSArray",
- "Texture3D",
- "TextureCube",
- "TextureCubeArray",
- "TriangleStream",
- "VFACE",
- "VPOS",
- "VertexShader",
- "abort",
- "abs",
- "acos",
- "all",
- "allow_uav_condition",
- "any",
- "asdouble",
- "asfloat",
- "asin",
- "asint",
- "asm",
- "asm_fragment",
- "asuint",
- "atan",
- "atan2",
- "auto",
- "bool",
- "bool1",
- "bool1x1",
- "bool1x2",
- "bool1x3",
- "bool1x4",
- "bool2",
- "bool2x1",
- "bool2x2",
- "bool2x3",
- "bool2x4",
- "bool3",
- "bool3x1",
- "bool3x2",
- "bool3x3",
- "bool3x4",
- "bool4",
- "bool4x1",
- "bool4x2",
- "bool4x3",
- "bool4x4",
- "branch",
- "break",
- "call",
- "case",
- "catch",
- "cbuffer",
- "ceil",
- "centroid",
- "char",
- "clamp",
- "class",
- "clip",
- "column_major",
- "compile_fragment",
- "const",
- "const_cast",
- "continue",
- "cos",
- "cosh",
- "countbits",
- "cross",
- "ddx",
- "ddx_coarse",
- "ddx_fine",
- "ddy",
- "ddy_coarse",
- "ddy_fine",
- "degrees",
- "delete",
- "determinant",
- "discard",
- "distance",
- "do",
- "dot",
- "double",
- "double1",
- "double1x1",
- "double1x2",
- "double1x3",
- "double1x4",
- "double2",
- "double2x1",
- "double2x2",
- "double2x3",
- "double2x4",
- "double3",
- "double3x1",
- "double3x2",
- "double3x3",
- "double3x4",
- "double4",
- "double4x1",
- "double4x2",
- "double4x3",
- "double4x4",
- "dst",
- "dword",
- "dword1",
- "dword1x1",
- "dword1x2",
- "dword1x3",
- "dword1x4",
- "dword2",
- "dword2x1",
- "dword2x2",
- "dword2x3",
- "dword2x4",
- "dword3",
- "dword3x1",
- "dword3x2",
- "dword3x3",
- "dword3x4",
- "dword4",
- "dword4x1",
- "dword4x2",
- "dword4x3",
- "dword4x4",
- "dynamic_cast",
- "else",
- "enum",
- "errorf",
- "exp",
- "exp2",
- "explicit",
- "export",
- "extern",
- "f16to32",
- "f32tof16",
- "faceforward",
- "false",
- "fastopt",
- "firstbithigh",
- "firstbitlow",
- "flatten",
- "float",
- "float1",
- "float1x1",
- "float1x2",
- "float1x3",
- "float1x4",
- "float2",
- "float2x1",
- "float2x2",
- "float2x3",
- "float2x4",
- "float3",
- "float3x1",
- "float3x2",
- "float3x3",
- "float3x4",
- "float4",
- "float4x1",
- "float4x2",
- "float4x3",
- "float4x4",
- "floor",
- "fma",
- "fmod",
- "for",
- "forcecase",
- "frac",
- "frexp",
- "friend",
- "fwidth",
- "fxgroup",
- "goto",
- "groupshared",
- "half",
- "half1",
- "half1x1",
- "half1x2",
- "half1x3",
- "half1x4",
- "half2",
- "half2x1",
- "half2x2",
- "half2x3",
- "half2x4",
- "half3",
- "half3x1",
- "half3x2",
- "half3x3",
- "half3x4",
- "half4",
- "half4x1",
- "half4x2",
- "half4x3",
- "half4x4",
- "if",
- "in",
- "inline",
- "inout",
- "int",
- "int1",
- "int1x1",
- "int1x2",
- "int1x3",
- "int1x4",
- "int2",
- "int2x1",
- "int2x2",
- "int2x3",
- "int2x4",
- "int3",
- "int3x1",
- "int3x2",
- "int3x3",
- "int3x4",
- "int4",
- "int4x1",
- "int4x2",
- "int4x3",
- "int4x4",
- "interface",
- "isfinite",
- "isinf",
- "isnan",
- "ldexp",
- "length",
- "lerp",
- "lineadj",
- "linear",
- "lit",
- "log",
- "log10",
- "log2",
- "long",
- "loop",
- "mad",
- "matrix",
- "max",
- "min",
- "min10float",
- "min10float1",
- "min10float1x1",
- "min10float1x2",
- "min10float1x3",
- "min10float1x4",
- "min10float2",
- "min10float2x1",
- "min10float2x2",
- "min10float2x3",
- "min10float2x4",
- "min10float3",
- "min10float3x1",
- "min10float3x2",
- "min10float3x3",
- "min10float3x4",
- "min10float4",
- "min10float4x1",
- "min10float4x2",
- "min10float4x3",
- "min10float4x4",
- "min12int",
- "min12int1",
- "min12int1x1",
- "min12int1x2",
- "min12int1x3",
- "min12int1x4",
- "min12int2",
- "min12int2x1",
- "min12int2x2",
- "min12int2x3",
- "min12int2x4",
- "min12int3",
- "min12int3x1",
- "min12int3x2",
- "min12int3x3",
- "min12int3x4",
- "min12int4",
- "min12int4x1",
- "min12int4x2",
- "min12int4x3",
- "min12int4x4",
- "min16float",
- "min16float1",
- "min16float1x1",
- "min16float1x2",
- "min16float1x3",
- "min16float1x4",
- "min16float2",
- "min16float2x1",
- "min16float2x2",
- "min16float2x3",
- "min16float2x4",
- "min16float3",
- "min16float3x1",
- "min16float3x2",
- "min16float3x3",
- "min16float3x4",
- "min16float4",
- "min16float4x1",
- "min16float4x2",
- "min16float4x3",
- "min16float4x4",
- "min16int",
- "min16int1",
- "min16int1x1",
- "min16int1x2",
- "min16int1x3",
- "min16int1x4",
- "min16int2",
- "min16int2x1",
- "min16int2x2",
- "min16int2x3",
- "min16int2x4",
- "min16int3",
- "min16int3x1",
- "min16int3x2",
- "min16int3x3",
- "min16int3x4",
- "min16int4",
- "min16int4x1",
- "min16int4x2",
- "min16int4x3",
- "min16int4x4",
- "min16uint",
- "min16uint1",
- "min16uint1x1",
- "min16uint1x2",
- "min16uint1x3",
- "min16uint1x4",
- "min16uint2",
- "min16uint2x1",
- "min16uint2x2",
- "min16uint2x3",
- "min16uint2x4",
- "min16uint3",
- "min16uint3x1",
- "min16uint3x2",
- "min16uint3x3",
- "min16uint3x4",
- "min16uint4",
- "min16uint4x1",
- "min16uint4x2",
- "min16uint4x3",
- "min16uint4x4",
- "modf",
- "msad4",
- "mul",
- "mutable",
- "namespace",
- "new",
- "nointerpolation",
- "noise",
- "noperspective",
- "normalize",
- "numthreads",
- "operator",
- "out",
- "packoffset",
- "pass",
- "pixelfragment",
- "pixelshader",
- "point",
- "pow",
- "precise",
- "printf",
- "private",
- "protected",
- "public",
- "radians",
- "rcp",
- "reflect",
- "refract",
- "register",
- "reinterpret_cast",
- "return",
- "reversebits",
- "round",
- "row_major",
- "rsqrt",
- "sample",
- "sampler",
- "sampler1D",
- "sampler2D",
- "sampler3D",
- "samplerCUBE",
- "sampler_state",
- "saturate",
- "shared",
- "short",
- "sign",
- "signed",
- "sin",
- "sincos",
- "sinh",
- "sizeof",
- "smoothstep",
- "snorm",
- "sqrt",
- "stateblock",
- "stateblock_state",
- "static",
- "static_cast",
- "step",
- "string",
- "struct",
- "switch",
- "tan",
- "tanh",
- "tbuffer",
- "technique",
- "technique10",
- "technique11",
- "template",
- "tex1D",
- "tex1Dbias",
- "tex1Dgrad",
- "tex1Dlod",
- "tex1Dproj",
- "tex2D",
- "tex2Dbias",
- "tex2Dgrad",
- "tex2Dlod",
- "tex2Dproj",
- "tex3D",
- "tex3Dbias",
- "tex3Dgrad",
- "tex3Dlod",
- "tex3Dproj",
- "texCUBE",
- "texCUBEbias",
- "texCUBEgrad",
- "texCUBElod",
- "texCUBEproj",
- "texture",
- "texture1D",
- "texture1DArray",
- "texture2D",
- "texture2DArray",
- "texture2DMS",
- "texture2DMSArray",
- "texture3D",
- "textureCube",
- "textureCubeArray",
- "this",
- "throw",
- "transpose",
- "triangle",
- "triangleadj",
- "true",
- "trunc",
- "try",
- "typedef",
- "typename",
- "uint",
- "uint1",
- "uint1x1",
- "uint1x2",
- "uint1x3",
- "uint1x4",
- "uint2",
- "uint2x1",
- "uint2x2",
- "uint2x3",
- "uint2x4",
- "uint3",
- "uint3x1",
- "uint3x2",
- "uint3x3",
- "uint3x4",
- "uint4",
- "uint4x1",
- "uint4x2",
- "uint4x3",
- "uint4x4",
- "uniform",
- "union",
- "unorm",
- "unroll",
- "unsigned",
- "using",
- "vector",
- "vertexfragment",
- "vertexshader",
- "virtual",
- "void",
- "volatile",
- "while"};
-
-} // namespace
-
-Namer::Namer() = default;
-
-Namer::~Namer() = default;
-
-std::string Namer::NameFor(const std::string& name) {
- // If it's in the name map we can just return it. There are no shadow names
- // in WGSL so this has to be unique in the WGSL names, and we've already
- // checked the name collisions with HLSL.
- auto it = name_map_.find(name);
- if (it != name_map_.end()) {
- return it->second;
- }
-
- std::string ret_name = name;
- if (std::binary_search(std::begin(kNames), std::end(kNames), ret_name)) {
- uint32_t i = 0;
- // Make sure there wasn't already a tint variable with the new name we've
- // now created.
- while (true) {
- ret_name = name + "_tint_" + std::to_string(i);
- it = name_map_.find(ret_name);
- if (it == name_map_.end()) {
- break;
- }
- i++;
- }
- RegisterRemappedName(ret_name);
- } else {
- uint32_t i = 0;
- // Make sure the ident name wasn't assigned by a remapping.
- while (true) {
- if (!IsRemapped(ret_name)) {
- break;
- }
- ret_name = name + "_" + std::to_string(i);
- i++;
- }
- RegisterRemappedName(ret_name);
- }
-
- name_map_[name] = ret_name;
- return ret_name;
-}
-
-bool Namer::IsMapped(const std::string& name) {
- auto it = name_map_.find(name);
- return it != name_map_.end();
-}
-
-bool Namer::IsRemapped(const std::string& name) {
- auto it = remapped_names_.find(name);
- return it != remapped_names_.end();
-}
-
-void Namer::RegisterRemappedName(const std::string& name) {
- remapped_names_.insert(name);
-}
-
-} // namespace hlsl
-} // namespace writer
-} // namespace tint
diff --git a/src/writer/hlsl/namer.h b/src/writer/hlsl/namer.h
deleted file mode 100644
index c067e22..0000000
--- a/src/writer/hlsl/namer.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_WRITER_HLSL_NAMER_H_
-#define SRC_WRITER_HLSL_NAMER_H_
-
-#include <string>
-#include <unordered_map>
-#include <unordered_set>
-
-namespace tint {
-namespace writer {
-namespace hlsl {
-
-/// Remaps maps names to avoid reserved words and collisions for HLSL.
-class Namer {
- public:
- /// Constructor
- Namer();
- ~Namer();
-
- /// Returns a sanitized version of `name`
- /// @param name the name to sanitize
- /// @returns the sanitized version of `name`
- std::string NameFor(const std::string& name);
-
- /// Registers a remapped name.
- /// @param name the name to register
- void RegisterRemappedName(const std::string& name);
-
- /// Returns if the given name has been mapped already
- /// @param name the name to check
- /// @returns true if the name has been mapped
- bool IsMapped(const std::string& name);
-
- /// Returns if the given name has been remapped already
- /// @param name the name to check
- /// @returns true if the name has been remapped
- bool IsRemapped(const std::string& name);
-
- private:
- /// Map of original name to new name. The two names may be the same.
- std::unordered_map<std::string, std::string> name_map_;
- // The list of names taken by the remapper
- std::unordered_set<std::string> remapped_names_;
-};
-
-} // namespace hlsl
-} // namespace writer
-} // namespace tint
-
-#endif // SRC_WRITER_HLSL_NAMER_H_
diff --git a/src/writer/hlsl/namer_test.cc b/src/writer/hlsl/namer_test.cc
deleted file mode 100644
index adb2ee5..0000000
--- a/src/writer/hlsl/namer_test.cc
+++ /dev/null
@@ -1,667 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/writer/hlsl/namer.h"
-
-#include "gtest/gtest.h"
-
-namespace tint {
-namespace writer {
-namespace hlsl {
-namespace {
-
-using HlslNamerTest = testing::Test;
-
-TEST_F(HlslNamerTest, ReturnsName) {
- Namer n;
- EXPECT_EQ("my_name", n.NameFor("my_name"));
- EXPECT_EQ("my_name", n.NameFor("my_name"));
-}
-
-TEST_F(HlslNamerTest, HandlesConflictWithRenamedReservedWordAfterIdentSeen) {
- Namer n;
- EXPECT_EQ("float_tint_0", n.NameFor("float_tint_0"));
- EXPECT_EQ("float_tint_1", n.NameFor("float"));
- EXPECT_EQ("float_tint_0", n.NameFor("float_tint_0"));
-}
-
-TEST_F(HlslNamerTest, HandlesConflictWithRenamedReservedWordBeforeIdentSeen) {
- Namer n;
- EXPECT_EQ("float_tint_0", n.NameFor("float"));
- EXPECT_EQ("float_tint_0_0", n.NameFor("float_tint_0"));
- EXPECT_EQ("float_tint_0_0_0", n.NameFor("float_tint_0_0"));
- EXPECT_EQ("float_tint_0_0", n.NameFor("float_tint_0"));
-}
-
-using HlslReservedNameTest = testing::TestWithParam<std::string>;
-TEST_P(HlslReservedNameTest, Emit) {
- auto name = GetParam();
-
- Namer n;
- EXPECT_EQ(name + "_tint_0", n.NameFor(name));
-}
-INSTANTIATE_TEST_SUITE_P(HlslNamerTest,
- HlslReservedNameTest,
- testing::Values("AddressU",
- "AddressV",
- "AddressW",
- "AllMemoryBarrier",
- "AllMemoryBarrierWithGroupSync",
- "AppendStructuredBuffer",
- "BINORMAL",
- "BLENDINDICES",
- "BLENDWEIGHT",
- "BlendState",
- "BorderColor",
- "Buffer",
- "ByteAddressBuffer",
- "COLOR",
- "CheckAccessFullyMapped",
- "ComparisonFunc",
- "CompileShader",
- "ComputeShader",
- "ConsumeStructuredBuffer",
- "D3DCOLORtoUBYTE4",
- "DEPTH",
- "DepthStencilState",
- "DepthStencilView",
- "DeviceMemoryBarrier",
- "DeviceMemroyBarrierWithGroupSync",
- "DomainShader",
- "EvaluateAttributeAtCentroid",
- "EvaluateAttributeAtSample",
- "EvaluateAttributeSnapped",
- "FOG",
- "Filter",
- "GeometryShader",
- "GetRenderTargetSampleCount",
- "GetRenderTargetSamplePosition",
- "GroupMemoryBarrier",
- "GroupMemroyBarrierWithGroupSync",
- "Hullshader",
- "InputPatch",
- "InterlockedAdd",
- "InterlockedAnd",
- "InterlockedCompareExchange",
- "InterlockedCompareStore",
- "InterlockedExchange",
- "InterlockedMax",
- "InterlockedMin",
- "InterlockedOr",
- "InterlockedXor",
- "LineStream",
- "MaxAnisotropy",
- "MaxLOD",
- "MinLOD",
- "MipLODBias",
- "NORMAL",
- "NULL",
- "Normal",
- "OutputPatch",
- "POSITION",
- "POSITIONT",
- "PSIZE",
- "PixelShader",
- "PointStream",
- "Process2DQuadTessFactorsAvg",
- "Process2DQuadTessFactorsMax",
- "Process2DQuadTessFactorsMin",
- "ProcessIsolineTessFactors",
- "ProcessQuadTessFactorsAvg",
- "ProcessQuadTessFactorsMax",
- "ProcessQuadTessFactorsMin",
- "ProcessTriTessFactorsAvg",
- "ProcessTriTessFactorsMax",
- "ProcessTriTessFactorsMin",
- "RWBuffer",
- "RWByteAddressBuffer",
- "RWStructuredBuffer",
- "RWTexture1D",
- "RWTexture1DArray",
- "RWTexture2D",
- "RWTexture2DArray",
- "RWTexture3D",
- "RasterizerState",
- "RenderTargetView",
- "SV_ClipDistance",
- "SV_Coverage",
- "SV_CullDistance",
- "SV_Depth",
- "SV_DepthGreaterEqual",
- "SV_DepthLessEqual",
- "SV_DispatchThreadID",
- "SV_DomainLocation",
- "SV_GSInstanceID",
- "SV_GroupID",
- "SV_GroupIndex",
- "SV_GroupThreadID",
- "SV_InnerCoverage",
- "SV_InsideTessFactor",
- "SV_InstanceID",
- "SV_IsFrontFace",
- "SV_OutputControlPointID",
- "SV_Position",
- "SV_PrimitiveID",
- "SV_RenderTargetArrayIndex",
- "SV_SampleIndex",
- "SV_StencilRef",
- "SV_Target",
- "SV_TessFactor",
- "SV_VertexArrayIndex",
- "SV_VertexID",
- "Sampler",
- "Sampler1D",
- "Sampler2D",
- "Sampler3D",
- "SamplerCUBE",
- "StructuredBuffer",
- "TANGENT",
- "TESSFACTOR",
- "TEXCOORD",
- "Texcoord",
- "Texture",
- "Texture1D",
- "Texture1DArray",
- "Texture2D",
- "Texture2DArray",
- "Texture2DMS",
- "Texture2DMSArray",
- "Texture3D",
- "TextureCube",
- "TextureCubeArray",
- "TriangleStream",
- "VFACE",
- "VPOS",
- "VertexShader",
- "abort",
- "abs",
- "acos",
- "all",
- "allow_uav_condition",
- "any",
- "asdouble",
- "asfloat",
- "asin",
- "asint",
- "asm",
- "asm_fragment",
- "asuint",
- "atan",
- "atan2",
- "auto",
- "bool",
- "bool1",
- "bool1x1",
- "bool1x2",
- "bool1x3",
- "bool1x4",
- "bool2",
- "bool2x1",
- "bool2x2",
- "bool2x3",
- "bool2x4",
- "bool3",
- "bool3x1",
- "bool3x2",
- "bool3x3",
- "bool3x4",
- "bool4",
- "bool4x1",
- "bool4x2",
- "bool4x3",
- "bool4x4",
- "branch",
- "break",
- "call",
- "case",
- "catch",
- "cbuffer",
- "ceil",
- "centroid",
- "char",
- "clamp",
- "class",
- "clip",
- "column_major",
- "compile_fragment",
- "const",
- "const_cast",
- "continue",
- "cos",
- "cosh",
- "countbits",
- "cross",
- "ddx",
- "ddx_coarse",
- "ddx_fine",
- "ddy",
- "ddy_coarse",
- "ddy_fine",
- "degrees",
- "delete",
- "determinant",
- "discard",
- "distance",
- "do",
- "dot",
- "double",
- "double1",
- "double1x1",
- "double1x2",
- "double1x3",
- "double1x4",
- "double2",
- "double2x1",
- "double2x2",
- "double2x3",
- "double2x4",
- "double3",
- "double3x1",
- "double3x2",
- "double3x3",
- "double3x4",
- "double4",
- "double4x1",
- "double4x2",
- "double4x3",
- "double4x4",
- "dst",
- "dword",
- "dword1",
- "dword1x1",
- "dword1x2",
- "dword1x3",
- "dword1x4",
- "dword2",
- "dword2x1",
- "dword2x2",
- "dword2x3",
- "dword2x4",
- "dword3",
- "dword3x1",
- "dword3x2",
- "dword3x3",
- "dword3x4",
- "dword4",
- "dword4x1",
- "dword4x2",
- "dword4x3",
- "dword4x4",
- "dynamic_cast",
- "else",
- "enum",
- "errorf",
- "exp",
- "exp2",
- "explicit",
- "export",
- "extern",
- "f16to32",
- "f32tof16",
- "faceforward",
- "false",
- "fastopt",
- "firstbithigh",
- "firstbitlow",
- "flatten",
- "float",
- "float1",
- "float1x1",
- "float1x2",
- "float1x3",
- "float1x4",
- "float2",
- "float2x1",
- "float2x2",
- "float2x3",
- "float2x4",
- "float3",
- "float3x1",
- "float3x2",
- "float3x3",
- "float3x4",
- "float4",
- "float4x1",
- "float4x2",
- "float4x3",
- "float4x4",
- "floor",
- "fma",
- "fmod",
- "for",
- "forcecase",
- "frac",
- "frexp",
- "friend",
- "fwidth",
- "fxgroup",
- "goto",
- "groupshared",
- "half",
- "half1",
- "half1x1",
- "half1x2",
- "half1x3",
- "half1x4",
- "half2",
- "half2x1",
- "half2x2",
- "half2x3",
- "half2x4",
- "half3",
- "half3x1",
- "half3x2",
- "half3x3",
- "half3x4",
- "half4",
- "half4x1",
- "half4x2",
- "half4x3",
- "half4x4",
- "if",
- "in",
- "inline",
- "inout",
- "int",
- "int1",
- "int1x1",
- "int1x2",
- "int1x3",
- "int1x4",
- "int2",
- "int2x1",
- "int2x2",
- "int2x3",
- "int2x4",
- "int3",
- "int3x1",
- "int3x2",
- "int3x3",
- "int3x4",
- "int4",
- "int4x1",
- "int4x2",
- "int4x3",
- "int4x4",
- "interface",
- "isfinite",
- "isinf",
- "isnan",
- "ldexp",
- "length",
- "lerp",
- "lineadj",
- "linear",
- "lit",
- "log",
- "log10",
- "log2",
- "long",
- "loop",
- "mad",
- "matrix",
- "max",
- "min",
- "min10float",
- "min10float1",
- "min10float1x1",
- "min10float1x2",
- "min10float1x3",
- "min10float1x4",
- "min10float2",
- "min10float2x1",
- "min10float2x2",
- "min10float2x3",
- "min10float2x4",
- "min10float3",
- "min10float3x1",
- "min10float3x2",
- "min10float3x3",
- "min10float3x4",
- "min10float4",
- "min10float4x1",
- "min10float4x2",
- "min10float4x3",
- "min10float4x4",
- "min12int",
- "min12int1",
- "min12int1x1",
- "min12int1x2",
- "min12int1x3",
- "min12int1x4",
- "min12int2",
- "min12int2x1",
- "min12int2x2",
- "min12int2x3",
- "min12int2x4",
- "min12int3",
- "min12int3x1",
- "min12int3x2",
- "min12int3x3",
- "min12int3x4",
- "min12int4",
- "min12int4x1",
- "min12int4x2",
- "min12int4x3",
- "min12int4x4",
- "min16float",
- "min16float1",
- "min16float1x1",
- "min16float1x2",
- "min16float1x3",
- "min16float1x4",
- "min16float2",
- "min16float2x1",
- "min16float2x2",
- "min16float2x3",
- "min16float2x4",
- "min16float3",
- "min16float3x1",
- "min16float3x2",
- "min16float3x3",
- "min16float3x4",
- "min16float4",
- "min16float4x1",
- "min16float4x2",
- "min16float4x3",
- "min16float4x4",
- "min16int",
- "min16int1",
- "min16int1x1",
- "min16int1x2",
- "min16int1x3",
- "min16int1x4",
- "min16int2",
- "min16int2x1",
- "min16int2x2",
- "min16int2x3",
- "min16int2x4",
- "min16int3",
- "min16int3x1",
- "min16int3x2",
- "min16int3x3",
- "min16int3x4",
- "min16int4",
- "min16int4x1",
- "min16int4x2",
- "min16int4x3",
- "min16int4x4",
- "min16uint",
- "min16uint1",
- "min16uint1x1",
- "min16uint1x2",
- "min16uint1x3",
- "min16uint1x4",
- "min16uint2",
- "min16uint2x1",
- "min16uint2x2",
- "min16uint2x3",
- "min16uint2x4",
- "min16uint3",
- "min16uint3x1",
- "min16uint3x2",
- "min16uint3x3",
- "min16uint3x4",
- "min16uint4",
- "min16uint4x1",
- "min16uint4x2",
- "min16uint4x3",
- "min16uint4x4",
- "modf",
- "msad4",
- "mul",
- "mutable",
- "namespace",
- "new",
- "nointerpolation",
- "noise",
- "noperspective",
- "normalize",
- "numthreads",
- "operator",
- "out",
- "packoffset",
- "pass",
- "pixelfragment",
- "pixelshader",
- "point",
- "pow",
- "precise",
- "printf",
- "private",
- "protected",
- "public",
- "radians",
- "rcp",
- "reflect",
- "refract",
- "register",
- "reinterpret_cast",
- "return",
- "reversebits",
- "round",
- "row_major",
- "rsqrt",
- "sample",
- "sampler1D",
- "sampler2D",
- "sampler3D",
- "samplerCUBE",
- "sampler_state",
- "saturate",
- "shared",
- "short",
- "sign",
- "signed",
- "sin",
- "sincos",
- "sinh",
- "sizeof",
- "smoothstep",
- "snorm",
- "sqrt",
- "stateblock",
- "stateblock_state",
- "static",
- "static_cast",
- "step",
- "string",
- "struct",
- "switch",
- "tan",
- "tanh",
- "tbuffer",
- "technique",
- "technique10",
- "technique11",
- "template",
- "tex1D",
- "tex1Dbias",
- "tex1Dgrad",
- "tex1Dlod",
- "tex1Dproj",
- "tex2D",
- "tex2Dbias",
- "tex2Dgrad",
- "tex2Dlod",
- "tex2Dproj",
- "tex3D",
- "tex3Dbias",
- "tex3Dgrad",
- "tex3Dlod",
- "tex3Dproj",
- "texCUBE",
- "texCUBEbias",
- "texCUBEgrad",
- "texCUBElod",
- "texCUBEproj",
- "texture",
- "texture1D",
- "texture1DArray",
- "texture2D",
- "texture2DArray",
- "texture2DMS",
- "texture2DMSArray",
- "texture3D",
- "textureCube",
- "textureCubeArray",
- "this",
- "throw",
- "transpose",
- "triangle",
- "triangleadj",
- "true",
- "trunc",
- "try",
- "typedef",
- "typename",
- "uint",
- "uint1",
- "uint1x1",
- "uint1x2",
- "uint1x3",
- "uint1x4",
- "uint2",
- "uint2x1",
- "uint2x2",
- "uint2x3",
- "uint2x4",
- "uint3",
- "uint3x1",
- "uint3x2",
- "uint3x3",
- "uint3x4",
- "uint4",
- "uint4x1",
- "uint4x2",
- "uint4x3",
- "uint4x4",
- "uniform",
- "union",
- "unorm",
- "unroll",
- "unsigned",
- "using",
- "vector",
- "vertexfragment",
- "vertexshader",
- "virtual",
- "void",
- "volatile",
- "while"));
-
-} // namespace
-} // namespace hlsl
-} // namespace writer
-} // namespace tint
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
index b04e2a2..68aa2bd 100644
--- a/src/writer/msl/generator_impl.h
+++ b/src/writer/msl/generator_impl.h
@@ -264,9 +264,6 @@
/// @returns the string name of the builtin or blank on error
std::string builtin_to_attribute(ast::Builtin builtin) const;
- /// @returns the namer for testing purposes
- Namer* namer_for_testing() { return namer_.get(); }
-
private:
enum class VarType { kIn, kOut };