Skip to content

Commit

Permalink
Rename skip swizzle
Browse files Browse the repository at this point in the history
  • Loading branch information
seven332 committed Oct 10, 2024
1 parent 383d1ae commit ed090a0
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 11 deletions.
42 changes: 32 additions & 10 deletions minifier/src/minifier_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ fn average(a: f32, b: f32) -> f32 {
EXPECT_FALSE(result.failed);
EXPECT_EQ(
Write(result.program),
"fn a(b : f32, c : f32) -> f32 {\n return ((b + c) / 2.0f);\n}\n"
"\n@vertex\nfn d() -> @builtin(position) vec4f {\n return vec4f(a(0.0f, 1.0f));\n}\n"
"fn c(d : f32, e : f32) -> f32 {\n return ((d + e) / 2.0f);\n}\n"
"\n@vertex\nfn f() -> @builtin(position) vec4f {\n return vec4f(c(0.0f, 1.0f));\n}\n"
);
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "d")));
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "f")));
}

TEST(minifier, MinifyFailed) {
Expand Down Expand Up @@ -67,11 +67,33 @@ TEST(minifier, RenameSkipKeywords) {
}
);
EXPECT_FALSE(result.failed);
EXPECT_NE(Write(result.program).find("let ar = 0;"), std::string::npos);
EXPECT_NE(Write(result.program).find("let aq = 0;"), std::string::npos);
EXPECT_EQ(Write(result.program).find("let ar = 0;"), std::string::npos);
EXPECT_EQ(Write(result.program).find("let as = 0;"), std::string::npos);
EXPECT_NE(Write(result.program).find("let at = 0;"), std::string::npos);
}

TEST(minifier, RenameSkipSwizzle) {
auto result = Minify(
R"(
fn getA(color: vec4f) -> f32 {
return color.a;
}
@vertex fn vs1() -> @builtin(position) vec4f {
return vec4f(getA(vec4f(1)), 1, 1, 1);
}
)",
{}
);
EXPECT_FALSE(result.failed);
EXPECT_EQ(
Write(result.program),
"fn c(d : vec4f) -> f32 {\n return d.a;\n}\n\n@vertex\nfn e() -> @builtin(position) vec4f {\n return vec4f(c(vec4<f32>(1.0f)), 1.0f, 1.0f, 1.0f);\n}\n"
);
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "e")));
}

TEST(minifier, RemoveUnreachable) {
auto result = Minify(
R"(
Expand All @@ -84,8 +106,8 @@ TEST(minifier, RemoveUnreachable) {
{}
);
EXPECT_FALSE(result.failed);
EXPECT_EQ(Write(result.program), "@vertex\nfn a() -> @builtin(position) vec4f {\n return vec4<f32>(2.0f);\n}\n");
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "a")));
EXPECT_EQ(Write(result.program), "@vertex\nfn c() -> @builtin(position) vec4f {\n return vec4<f32>(2.0f);\n}\n");
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "c")));
}

TEST(minifier, RemoveUselessFunctions) {
Expand All @@ -102,8 +124,8 @@ fn average(a: f32, b: f32) -> f32 {
{}
);
EXPECT_FALSE(result.failed);
EXPECT_EQ(Write(result.program), "@vertex\nfn a() -> @builtin(position) vec4f {\n return vec4<f32>(1.0f);\n}\n");
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "a")));
EXPECT_EQ(Write(result.program), "@vertex\nfn c() -> @builtin(position) vec4f {\n return vec4<f32>(1.0f);\n}\n");
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "c")));
}

TEST(minifier, RemoveUselessConst) {
Expand All @@ -119,8 +141,8 @@ const j = 2;
{}
);
EXPECT_FALSE(result.failed);
EXPECT_EQ(Write(result.program), "@vertex\nfn a() -> @builtin(position) vec4f {\n return vec4<f32>(0.5f);\n}\n");
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "a")));
EXPECT_EQ(Write(result.program), "@vertex\nfn c() -> @builtin(position) vec4f {\n return vec4<f32>(0.5f);\n}\n");
EXPECT_THAT(result.remappings, testing::UnorderedElementsAre(testing::Pair("vs1", "c")));
}

} // namespace wgslx::minifier
12 changes: 11 additions & 1 deletion minifier/src/rename_identifiers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <cassert>
#include <cstddef>
#include <cstring>
#include <iostream>
#include <range/v3/range/conversion.hpp>
#include <range/v3/view/filter.hpp>
#include <range/v3/view/transform.hpp>
Expand Down Expand Up @@ -227,6 +228,15 @@ static bool IsKeyword(const char* str) {
return std::binary_search(SortedKeywords.begin(), SortedKeywords.end(), str, Compare);
}

static bool IsSwizzle(const std::string& str) {
if (str.empty() || str.size() > 4) {
return false;
}

return std::all_of(str.begin(), str.end(), [](char c) { return c == 'r' || c == 'g' || c == 'b' || c == 'a'; }) ||
std::all_of(str.begin(), str.end(), [](char c) { return c == 'x' || c == 'y' || c == 'z' || c == 'w'; });
}

static std::string ToName(int index) {
static constexpr int HalfLowBase = ('z' - 'a' + 1);
static_assert('Z' - 'A' + 1 == HalfLowBase);
Expand Down Expand Up @@ -269,7 +279,7 @@ static std::string NextValidName(int& index) {
do {
name = ToName(index);
++index;
} while (IsKeyword(name.c_str()));
} while (IsKeyword(name.c_str()) || IsSwizzle(name));
return name;
}

Expand Down

0 comments on commit ed090a0

Please sign in to comment.