From e6843b376f5df66b8744eec0a41ce2ab27cabbfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Fri, 2 Oct 2026 15:20:00 -0600 Subject: [PATCH] Splines: Skip the float U-line pre-tessellation on the exact Bezier path The exact path evaluates its own columns, so the float SampleU results went unused. Pursuit Force's frame dump replays 16% faster in the software renderer. Co-Authored-By: Claude Opus 5.5 (1M context) --- GPU/Common/SplineCommon.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/GPU/Common/SplineCommon.cpp b/GPU/Common/SplineCommon.cpp index 5b46239a5d..6cc4a40387 100644 --- a/GPU/Common/SplineCommon.cpp +++ b/GPU/Common/SplineCommon.cpp @@ -633,14 +633,16 @@ public: const int index_u = surface.GetIndexU(patch_u, tile_u); const Weight &wu = weights.u[index_u]; - // Pre-tessellate U lines - tess_pos.SampleU(wu.basis); - if constexpr (sampleCol) - tess_col.SampleU(wu.basis); - if constexpr (sampleTex) - tess_tex.SampleU(wu.basis); - if constexpr (sampleNrm) - tess_nrm.SampleU(wu.deriv); + // Pre-tessellate U lines (the exact path evaluates its own columns). + if (!exactBezier) { + tess_pos.SampleU(wu.basis); + if constexpr (sampleCol) + tess_col.SampleU(wu.basis); + if constexpr (sampleTex) + tess_tex.SampleU(wu.basis); + if constexpr (sampleNrm) + tess_nrm.SampleU(wu.deriv); + } for (int tile_v = start_v; tile_v <= surface.tess_v; ++tile_v) { const int index_v = surface.GetIndexV(patch_v, tile_v);