Skip to content

Commit 32fecb7

Browse files
committed
Feature: New hint - More #define GOLF suggestions.
1 parent eb50ed5 commit 32fecb7

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

ShaderShrinker/Shrinker.Parser/Hinter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ private static IEnumerable<CodeHint> DetectUnusedFunctionParam(SyntaxNode rootNo
7676

7777
private static IEnumerable<CodeHint> DetectDefinableReferences(SyntaxNode rootNode)
7878
{
79-
var candidates = new[] { "smoothstep", "iResolution", "normalize" };
80-
var replacement = new[] { "S smoothstep", "R iResolution", "N normalize" };
79+
var candidates = new[] { "smoothstep", "iResolution", "normalize", "iTime", "iMouse" };
80+
var replacement = new[] { "S smoothstep", "R iResolution", "N normalize", "T time", "M iMouse" };
8181
var usages = rootNode.TheTree
8282
.Select(o => o.Token?.Content ?? (o as FunctionCallSyntaxNode)?.Name)
8383
.Where(o => candidates.Any(o.StartsWithVarName))
@@ -86,7 +86,7 @@ private static IEnumerable<CodeHint> DetectDefinableReferences(SyntaxNode rootNo
8686
{
8787
var usageCount = usages.Count(o => o.StartsWithVarName(candidate));
8888
var oldSize = candidate.Length * usageCount;
89-
var newSize = 8 + candidate.Length + usageCount + usageCount;
89+
var newSize = 8 + candidate.Length + usageCount;
9090

9191
if (newSize < oldSize)
9292
yield return new IntroduceDefine(candidate, replacement[candidates.ToList().IndexOf(candidate)]);

ShaderShrinker/UnitTests/HinterTests.cs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void CheckSingleUseResolutionDoesNotTriggerHint()
7272
}
7373

7474
[Test]
75-
public void CheckMultiUseResolutionDoesNotTriggerHint()
75+
public void CheckMultiUseResolutionTriggersHint()
7676
{
7777
var lexer = new Lexer();
7878
lexer.Load("float main() { return iResolution.x + iResolution.y + iResolution.y; }");
@@ -94,7 +94,7 @@ public void CheckSingleUseSmoothstepDoesNotTriggerHint()
9494
}
9595

9696
[Test]
97-
public void CheckMultiUseSmoothstepDoesNotTriggerHint()
97+
public void CheckMultiUseSmoothstepTriggersHint()
9898
{
9999
var lexer = new Lexer();
100100
lexer.Load("float main() { return smoothstep(0.0, 1.0, smoothstep(0.0, 1.0, smoothstep(0.0, 1.0, 0.5))); }");
@@ -103,5 +103,27 @@ public void CheckMultiUseSmoothstepDoesNotTriggerHint()
103103

104104
Assert.That(() => rootNode.GetHints().OfType<Hinter.IntroduceDefine>().ToList(), Has.Count.EqualTo(1));
105105
}
106+
107+
[Test]
108+
public void CheckSingleUseMouseDoesNotTriggerHint()
109+
{
110+
var lexer = new Lexer();
111+
lexer.Load("float main() { return iMouse.x; }");
112+
113+
var rootNode = new Parser(lexer).Parse();
114+
115+
Assert.That(() => rootNode.GetHints(), Is.Empty);
116+
}
117+
118+
[Test]
119+
public void CheckMultiUseMouseTriggersHint()
120+
{
121+
var lexer = new Lexer();
122+
lexer.Load("float main() { return iMouse.x + iMouse.y * iMouse.z; }");
123+
124+
var rootNode = new Parser(lexer).Parse();
125+
126+
Assert.That(() => rootNode.GetHints().OfType<Hinter.IntroduceDefine>().ToList(), Has.Count.EqualTo(1));
127+
}
106128
}
107129
}

0 commit comments

Comments
 (0)