From a3897ab3195cfb9efdc97fc21d9b7f6d9c989819 Mon Sep 17 00:00:00 2001 From: steam-test1 <34393637+steam-test1@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:43:26 +0000 Subject: [PATCH] Fixed shaders with the abs source modifier from crashing --- Hlsl/HlslSimpleWriter.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Hlsl/HlslSimpleWriter.cs b/Hlsl/HlslSimpleWriter.cs index d06eb8d..2ddb685 100644 --- a/Hlsl/HlslSimpleWriter.cs +++ b/Hlsl/HlslSimpleWriter.cs @@ -522,6 +522,8 @@ private string GetSourceConstantValue(D3D9Instruction instruction, int srcIndex, .Take(destinationLength.Value) .Select(s => constantRegister[s]).ToArray(); + string size = constant.Length == 1 ? "" : constant.Length.ToString(); + switch (instruction.GetSourceModifier(srcIndex)) { case SourceModifier.None: @@ -532,6 +534,18 @@ private string GetSourceConstantValue(D3D9Instruction instruction, int srcIndex, constant[i] = -constant[i]; } break; + case SourceModifier.Abs: + for (int i = 0; i < constant.Length; i++) + { + return $"abs(float{size}({string.Join(", ", constant.Select(c => c.ToString(_culture)))}))"; + } + break; + case SourceModifier.AbsAndNegate: + for (int i = 0; i < constant.Length; i++) + { + return $"-abs(float{size}({string.Join(", ", constant.Select(c => c.ToString(_culture)))}))"; + } + break; default: throw new NotImplementedException(); } @@ -540,7 +554,6 @@ private string GetSourceConstantValue(D3D9Instruction instruction, int srcIndex, { return constant[0].ToString(_culture); } - string size = constant.Length == 1 ? "" : constant.Length.ToString(); return $"float{size}({string.Join(", ", constant.Select(c => c.ToString(_culture)))})"; } default: