From 63e299e1a1b889e65eb0438cac16b43fb691416e Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Thu, 24 Feb 2022 17:10:17 -0800 Subject: [PATCH] Stop normalizing light directions This normalization was added in 02ac5e95c84a1d9a46df1dc4102342fb653e36ee (and changed to use floats in 4bf031c0646e91b35777f1ba4e2b0328063bb666). However, this normalization introduces NaN values in some cases, which is causing problems for the version of Mesa in use on FifoCI (currently 20.3.5). Although Mesa's NaN behavior is corrected by https://gitlab.freedesktop.org/mesa/mesa/-/commit/b3f3287eac066eae16dce0e47aad3229dcff8257 (21.2.0), FifoCI is currently stuck with the older version. --- .../Core/VideoCommon/VertexShaderManager.cpp | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/Source/Core/VideoCommon/VertexShaderManager.cpp b/Source/Core/VideoCommon/VertexShaderManager.cpp index ce43235977..37cad02c41 100644 --- a/Source/Core/VideoCommon/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/VertexShaderManager.cpp @@ -172,22 +172,9 @@ void VertexShaderManager::SetConstants(const std::vector& textures) dstlight.pos[1] = light.dpos[1]; dstlight.pos[2] = light.dpos[2]; - // TODO: Hardware testing is needed to confirm that this normalization is correct - auto sanitize = [](float f) { - if (std::isnan(f)) - return 0.0f; - else if (std::isinf(f)) - return f > 0.0f ? 1.0f : -1.0f; - else - return f; - }; - double norm = double(light.ddir[0]) * double(light.ddir[0]) + - double(light.ddir[1]) * double(light.ddir[1]) + - double(light.ddir[2]) * double(light.ddir[2]); - norm = 1.0 / sqrt(norm); - dstlight.dir[0] = sanitize(static_cast(light.ddir[0] * norm)); - dstlight.dir[1] = sanitize(static_cast(light.ddir[1] * norm)); - dstlight.dir[2] = sanitize(static_cast(light.ddir[2] * norm)); + dstlight.dir[0] = light.ddir[0]; + dstlight.dir[1] = light.ddir[1]; + dstlight.dir[2] = light.ddir[2]; } dirty = true;