From e0a054a7b4c5d15d19614c969fbec09142e4ac43 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 14 Sep 2026 14:09:49 +0200 Subject: [PATCH] =?UTF-8?q?=EF=BB=BFMatch=20step's=20NaN=20result=20to=20w?= =?UTF-8?q?hat=20dxc=20emits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dxc 1.9.0.5402 (dxc_2026_07_29, lib_6_3, -HV 2021, -Od) lowers step(e, x) to fcmp olt x, e; select 0 : 1, so NaN on either side gives 1. The previous x >= e ? 1 : 0 rule came from prose, not the compiler. math.step and cultmath_step now use x < e ? 0 : 1 for every overload; the mirror's cultmath_step compiles to the same fcmp/select as the intrinsic. Unity shader copy synced; DLL rebuilt and byte-checked by build-unity-package.ps1. Co-Authored-By: Claude Opus 5 --- packages/cultmath/docs/design.md | 4 ++-- packages/cultmath/shaders/CultMath.hlsl | 2 +- packages/cultmath/src/CultMath/math.cs | 4 ++-- .../CultMath.Tests/HlslSemanticsTests.cs | 4 ++-- .../Runtime/Plugins/CultMath.dll | Bin 297472 -> 297472 bytes .../Runtime/Plugins/CultMath.pdb | Bin 141072 -> 141076 bytes .../Shaders/CultMath.hlsl | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/cultmath/docs/design.md b/packages/cultmath/docs/design.md index a2ce5e33..863b5efe 100644 --- a/packages/cultmath/docs/design.md +++ b/packages/cultmath/docs/design.md @@ -40,8 +40,8 @@ That makes these HLSL rules, not options: - Scalar/vector arithmetic and comparisons have explicit overloads on both sides rather than leaning on implicit scalar splat. - Intrinsics return HLSL's types and edge cases: `sign` returns `int`/`intN` - (NaN gives 0); `step(y, x)` is `x >= y ? 1 : 0` (NaN gives 0), in C# and in the - HLSL mirror; `any`/`all` accept numeric vectors (a component is true when it is + (NaN gives 0); `step(y, x)` is `x < y ? 0 : 1` (NaN gives 1), which is how dxc + lowers it, in C# and in the HLSL mirror; `any`/`all` accept numeric vectors (a component is true when it is not 0); `min`, `max`, and `abs` on int vectors return int vectors. Deferred until a consumer needs them: `float4x4`, `transpose`, `determinant`, diff --git a/packages/cultmath/shaders/CultMath.hlsl b/packages/cultmath/shaders/CultMath.hlsl index 632bb94f..15137c4d 100644 --- a/packages/cultmath/shaders/CultMath.hlsl +++ b/packages/cultmath/shaders/CultMath.hlsl @@ -36,7 +36,7 @@ float2 cultmath_lerp(float2 start, float2 end, float2 amount) { return start + ( float3 cultmath_lerp(float3 start, float3 end, float3 amount) { return start + (end - start) * amount; } float4 cultmath_lerp(float4 start, float4 end, float4 amount) { return start + (end - start) * amount; } -float cultmath_step(float edge, float value) { return value >= edge ? 1.0 : 0.0; } +float cultmath_step(float edge, float value) { return value < edge ? 0.0 : 1.0; } float2 cultmath_step(float2 edge, float2 value) { return float2(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y)); } float3 cultmath_step(float3 edge, float3 value) { return float3(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y), cultmath_step(edge.z, value.z)); } float4 cultmath_step(float4 edge, float4 value) { return float4(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y), cultmath_step(edge.z, value.z), cultmath_step(edge.w, value.w)); } diff --git a/packages/cultmath/src/CultMath/math.cs b/packages/cultmath/src/CultMath/math.cs index c51a2758..4414cd3a 100644 --- a/packages/cultmath/src/CultMath/math.cs +++ b/packages/cultmath/src/CultMath/math.cs @@ -150,8 +150,8 @@ public static partial class math public static double2 unlerp(double2 start, double2 end, double2 value) => (value - start) / (end - start); public static double3 unlerp(double3 start, double3 end, double3 value) => (value - start) / (end - start); - // HLSL: step(y, x) = x >= y ? 1 : 0, so a NaN on either side yields 0. - public static float step(float edge, float value) => value >= edge ? 1.0f : 0.0f; + // dxc lowers step(y, x) to x < y ? 0 : 1 (fcmp olt, then select), so a NaN on either side yields 1. + public static float step(float edge, float value) => value < edge ? 0.0f : 1.0f; public static float2 step(float2 edge, float2 value) => new(step(edge.x, value.x), step(edge.y, value.y)); public static float3 step(float3 edge, float3 value) => new(step(edge.x, value.x), step(edge.y, value.y), step(edge.z, value.z)); public static float4 step(float4 edge, float4 value) => new(step(edge.x, value.x), step(edge.y, value.y), step(edge.z, value.z), step(edge.w, value.w)); diff --git a/packages/cultmath/tests/CultMath.Tests/HlslSemanticsTests.cs b/packages/cultmath/tests/CultMath.Tests/HlslSemanticsTests.cs index 908f80b3..03e729a5 100644 --- a/packages/cultmath/tests/CultMath.Tests/HlslSemanticsTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/HlslSemanticsTests.cs @@ -161,8 +161,8 @@ public sealed class HlslSemanticsTests Assert.Equal(new int4(1, 2, 0, 3), math.abs(new int4(-1, 2, 0, -3))); Assert.Equal(7, math.abs(-7)); - Assert.Equal(0.0f, math.step(1.0f, float.NaN)); - Assert.Equal(0.0f, math.step(float.NaN, 1.0f)); + Assert.Equal(1.0f, math.step(1.0f, float.NaN)); + Assert.Equal(1.0f, math.step(float.NaN, 1.0f)); Assert.Equal(1.0f, math.step(1.0f, 1.0f)); Assert.Equal(0, math.sign(float.NaN)); diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Runtime/Plugins/CultMath.dll b/packages/cultmath/unity/org.gamecult.cultmath/Runtime/Plugins/CultMath.dll index 584d9b72efe2391777a62a6256e646894c4c0074..1b4d8b07aa217b59726799c5ab9d5767bf66408e 100644 GIT binary patch delta 275 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 delta 17963 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 ZZb-Va&Jzv)KY#7h<{Q3>uG6*7{{hR8F}nZ& diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl index 632bb94f..15137c4d 100644 --- a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl +++ b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl @@ -36,7 +36,7 @@ float2 cultmath_lerp(float2 start, float2 end, float2 amount) { return start + ( float3 cultmath_lerp(float3 start, float3 end, float3 amount) { return start + (end - start) * amount; } float4 cultmath_lerp(float4 start, float4 end, float4 amount) { return start + (end - start) * amount; } -float cultmath_step(float edge, float value) { return value >= edge ? 1.0 : 0.0; } +float cultmath_step(float edge, float value) { return value < edge ? 0.0 : 1.0; } float2 cultmath_step(float2 edge, float2 value) { return float2(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y)); } float3 cultmath_step(float3 edge, float3 value) { return float3(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y), cultmath_step(edge.z, value.z)); } float4 cultmath_step(float4 edge, float4 value) { return float4(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y), cultmath_step(edge.z, value.z), cultmath_step(edge.w, value.w)); }