Skip to content

Commit 4116781

Browse files
committed
Fix: Vector arithmetic with multi-token elements was causing a crash.
1 parent 9299cd7 commit 4116781

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

ShaderShrinker/Shrinker.Parser/Optimizations/PerformArithmeticExtension.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,8 @@ public static bool PerformArithmetic(this SyntaxNode rootNode)
388388
// Ensure both brackets have the same number of elements.
389389
var lhsCsv = brackets.GetCsv().ToList();
390390
var rhsCsv = rhsVectorBrackets.GetCsv().ToList();
391+
if (lhsCsv.First().Count != 1 || rhsCsv.First().Count != 1)
392+
continue; // The element being cloned is complete (multiple tokens) - Duplicating will add complexity.
391393
while (lhsCsv.Count < rhsCsv.Count)
392394
lhsCsv.Add(new[] { lhsCsv.First().Single().Clone() });
393395
while (rhsCsv.Count < lhsCsv.Count)

ShaderShrinker/UnitTests/VectorArithmeticTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,8 @@ public void CheckArithmeticWithVectorAndVector(
463463
"vec2 f = vec2(3) + vec2(4, 5);",
464464
"vec2 v = vec2(1, 2), f = v * vec2(1.1, 2.2) + vec2(6, 7);",
465465
"vec2 v = vec2(1, 2), f = vec2(1.1, 2.2) + vec2(6, 7) * v;",
466-
"vec2 f = vec2(3, 4) + vec2(1. * 2., 3);")] string code,
466+
"vec2 f = vec2(3, 4) + vec2(1. * 2., 3);",
467+
"vec3 v = vec3(.6, .3, .1) - vec3(.25 * f(2.));")] string code,
467468
[Values("vec2 f = vec2(2.1, 4.2);",
468469
"vec2 f = vec2(8.1, 11.2);",
469470
"vec2 f = vec2(7.1, 9.2);",
@@ -483,7 +484,8 @@ public void CheckArithmeticWithVectorAndVector(
483484
"vec2 f = vec2(7, 8);",
484485
"vec2 v = vec2(1, 2), f = v * vec2(1.1, 2.2) + vec2(6, 7);",
485486
"vec2 v = vec2(1, 2), f = vec2(1.1, 2.2) + vec2(6, 7) * v;",
486-
"vec2 f = vec2(5, 7);")] string expected)
487+
"vec2 f = vec2(5, 7);",
488+
"vec3 v = vec3(.6, .3, .1) - vec3(.25 * f(2.));")] string expected)
487489
{
488490
var lexer = new Lexer();
489491
lexer.Load(code);
@@ -496,7 +498,5 @@ public void CheckArithmeticWithVectorAndVector(
496498

497499
Assert.That(rootNode.ToCode().ToSimple(), Is.EqualTo(expected));
498500
}
499-
500-
// todo - normalize(vec3(-20, -10.5, 25))
501501
}
502502
}

0 commit comments

Comments
 (0)