[inspector] Add better support for remapped entry point names
Add remapped_name to entry point structure, also supply method to find
the remapped name for individual entry points.
BUG=tint:312
Change-Id: I5f2cc02bc37c17e99c453b16108bc8e10c602fba
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/32383
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
diff --git a/src/inspector/entry_point.h b/src/inspector/entry_point.h
index 137f41a..13e0234 100644
--- a/src/inspector/entry_point.h
+++ b/src/inspector/entry_point.h
@@ -36,6 +36,8 @@
/// The entry point name
std::string name;
+ /// Remapped entry point name in the backend
+ std::string remapped_name;
/// The entry point stage
ast::PipelineStage stage = ast::PipelineStage::kNone;
/// The workgroup x size
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index b170d87..61016fb 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -48,9 +48,9 @@
continue;
}
- Namer namer;
EntryPoint entry_point;
- entry_point.name = namer.NameFor(func->name());
+ entry_point.name = func->name();
+ entry_point.remapped_name = namer_.NameFor(func->name());
entry_point.stage = func->pipeline_stage();
std::tie(entry_point.workgroup_size_x, entry_point.workgroup_size_y,
entry_point.workgroup_size_z) = func->workgroup_size();
@@ -68,6 +68,15 @@
return result;
}
+std::string Inspector::GetRemappedNamedForEntryPoint(
+ const std::string& entry_point) {
+ auto* func = FindEntryPointByName(entry_point);
+ if (!func) {
+ return {};
+ }
+ return namer_.NameFor(entry_point);
+}
+
std::map<uint32_t, Scalar> Inspector::GetConstantIDs() {
std::map<uint32_t, Scalar> result;
for (auto& var : module_.global_variables()) {
diff --git a/src/inspector/inspector.h b/src/inspector/inspector.h
index da49ff1..f3c9b11 100644
--- a/src/inspector/inspector.h
+++ b/src/inspector/inspector.h
@@ -25,6 +25,7 @@
#include "src/ast/pipeline_stage.h"
#include "src/inspector/entry_point.h"
#include "src/inspector/scalar.h"
+#include "src/namer.h"
namespace tint {
namespace inspector {
@@ -77,6 +78,11 @@
/// @returns vector of entry point information
std::vector<EntryPoint> GetEntryPoints();
+ /// @param entry_point name of the entry point to get the remapped version of
+ /// @returns the remapped name of the entry point, or the empty string if it
+ /// isn't a known entry point.
+ std::string GetRemappedNamedForEntryPoint(const std::string& entry_point);
+
/// @returns map of const_id to initial value
std::map<uint32_t, Scalar> GetConstantIDs();
@@ -113,6 +119,7 @@
private:
const ast::Module& module_;
std::string error_;
+ tint::Namer namer_;
/// @param name name of the entry point to find
/// @returns a pointer to the entry point if it exists, otherwise returns
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index d4803a5..f15b058 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -643,6 +643,8 @@
class InspectorGetEntryPointTest : public InspectorHelper,
public testing::Test {};
+class InspectorGetRemappedNamedForEntryPointTest : public InspectorHelper,
+ public testing::Test {};
class InspectorGetConstantIDsTest : public InspectorHelper,
public testing::Test {};
class InspectorGetUniformBufferResourceBindingsTest : public InspectorHelper,
@@ -694,7 +696,8 @@
ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
ASSERT_EQ(1u, result.size());
- EXPECT_EQ("tint_666f6f", result[0].name);
+ EXPECT_EQ("foo", result[0].name);
+ EXPECT_EQ("tint_666f6f", result[0].remapped_name);
EXPECT_EQ(ast::PipelineStage::kVertex, result[0].stage);
}
@@ -713,9 +716,11 @@
ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
ASSERT_EQ(2u, result.size());
- EXPECT_EQ("tint_666f6f", result[0].name);
+ EXPECT_EQ("foo", result[0].name);
+ EXPECT_EQ("tint_666f6f", result[0].remapped_name);
EXPECT_EQ(ast::PipelineStage::kVertex, result[0].stage);
- EXPECT_EQ("tint_626172", result[1].name);
+ EXPECT_EQ("bar", result[1].name);
+ EXPECT_EQ("tint_626172", result[1].remapped_name);
EXPECT_EQ(ast::PipelineStage::kCompute, result[1].stage);
}
@@ -737,9 +742,11 @@
EXPECT_FALSE(inspector()->has_error());
ASSERT_EQ(2u, result.size());
- EXPECT_EQ("tint_666f6f", result[0].name);
+ EXPECT_EQ("foo", result[0].name);
+ EXPECT_EQ("tint_666f6f", result[0].remapped_name);
EXPECT_EQ(ast::PipelineStage::kVertex, result[0].stage);
- EXPECT_EQ("tint_626172", result[1].name);
+ EXPECT_EQ("bar", result[1].name);
+ EXPECT_EQ("tint_626172", result[1].remapped_name);
EXPECT_EQ(ast::PipelineStage::kFragment, result[1].stage);
}
@@ -937,13 +944,15 @@
ASSERT_EQ(2u, result.size());
- ASSERT_EQ("tint_666f6f", result[0].name);
+ ASSERT_EQ("foo", result[0].name);
+ ASSERT_EQ("tint_666f6f", result[0].remapped_name);
ASSERT_EQ(1u, result[0].input_variables.size());
EXPECT_EQ("in_var", result[0].input_variables[0]);
ASSERT_EQ(1u, result[0].output_variables.size());
EXPECT_EQ("out2_var", result[0].output_variables[0]);
- ASSERT_EQ("tint_626172", result[1].name);
+ ASSERT_EQ("bar", result[1].name);
+ ASSERT_EQ("tint_626172", result[1].remapped_name);
ASSERT_EQ(1u, result[1].input_variables.size());
EXPECT_EQ("in2_var", result[1].input_variables[0]);
ASSERT_EQ(1u, result[1].output_variables.size());
@@ -974,7 +983,8 @@
ASSERT_EQ(2u, result.size());
- ASSERT_EQ("tint_666f6f", result[0].name);
+ ASSERT_EQ("foo", result[0].name);
+ ASSERT_EQ("tint_666f6f", result[0].remapped_name);
EXPECT_EQ(2u, result[0].input_variables.size());
EXPECT_TRUE(ContainsString(result[0].input_variables, "in_var"));
EXPECT_TRUE(ContainsString(result[0].input_variables, "in2_var"));
@@ -982,13 +992,65 @@
EXPECT_TRUE(ContainsString(result[0].output_variables, "out_var"));
EXPECT_TRUE(ContainsString(result[0].output_variables, "out2_var"));
- ASSERT_EQ("tint_626172", result[1].name);
+ ASSERT_EQ("bar", result[1].name);
+ ASSERT_EQ("tint_626172", result[1].remapped_name);
EXPECT_EQ(1u, result[1].input_variables.size());
EXPECT_EQ("in2_var", result[1].input_variables[0]);
EXPECT_EQ(1u, result[1].output_variables.size());
EXPECT_EQ("out2_var", result[1].output_variables[0]);
}
+TEST_F(InspectorGetRemappedNamedForEntryPointTest, NoFunctions) {
+ auto result = inspector()->GetRemappedNamedForEntryPoint("foo");
+ ASSERT_TRUE(inspector()->has_error());
+
+ EXPECT_EQ("", result);
+}
+
+TEST_F(InspectorGetRemappedNamedForEntryPointTest, NoEntryPoints) {
+ mod()->AddFunction(MakeEmptyBodyFunction("foo"));
+
+ auto result = inspector()->GetRemappedNamedForEntryPoint("foo");
+ ASSERT_TRUE(inspector()->has_error());
+
+ EXPECT_EQ("", result);
+}
+
+TEST_F(InspectorGetRemappedNamedForEntryPointTest, OneEntryPoint) {
+ auto foo = MakeEmptyBodyFunction("foo");
+ foo->add_decoration(std::make_unique<ast::StageDecoration>(
+ ast::PipelineStage::kVertex, Source{}));
+ mod()->AddFunction(std::move(foo));
+
+ auto result = inspector()->GetRemappedNamedForEntryPoint("foo");
+ ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
+
+ EXPECT_EQ("tint_666f6f", result);
+}
+
+TEST_F(InspectorGetRemappedNamedForEntryPointTest, MultipleEntryPoints) {
+ auto foo = MakeEmptyBodyFunction("foo");
+ foo->add_decoration(std::make_unique<ast::StageDecoration>(
+ ast::PipelineStage::kVertex, Source{}));
+ mod()->AddFunction(std::move(foo));
+
+ auto bar = MakeEmptyBodyFunction("bar");
+ bar->add_decoration(std::make_unique<ast::StageDecoration>(
+ ast::PipelineStage::kCompute, Source{}));
+ mod()->AddFunction(std::move(bar));
+
+ {
+ auto result = inspector()->GetRemappedNamedForEntryPoint("foo");
+ ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
+ EXPECT_EQ("tint_666f6f", result);
+ }
+ {
+ auto result = inspector()->GetRemappedNamedForEntryPoint("bar");
+ ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
+ EXPECT_EQ("tint_626172", result);
+ }
+}
+
TEST_F(InspectorGetConstantIDsTest, Bool) {
bool val_true = true;
bool val_false = false;