Преглед изворни кода

fixup! Shaders: Fix multiplications between 0.0 and inf

Yuri Kunde Schlesner пре 11 година
родитељ
комит
eff10959de
1 измењених фајлова са 4 додато и 4 уклоњено
  1. 4 4
      src/video_core/pica.h

+ 4 - 4
src/video_core/pica.h

@@ -1031,8 +1031,8 @@ struct float24 {
     }
     }
 
 
     float24 operator * (const float24& flt) const {
     float24 operator * (const float24& flt) const {
-        if ((this->value == 0.f && flt.value == flt.value) ||
-            (flt.value == 0.f && this->value == this->value))
+        if ((this->value == 0.f && !std::isnan(flt.value)) ||
+            (flt.value == 0.f && !std::isnan(this->value)))
             // PICA gives 0 instead of NaN when multiplying by inf
             // PICA gives 0 instead of NaN when multiplying by inf
             return Zero();
             return Zero();
         return float24::FromFloat32(ToFloat32() * flt.ToFloat32());
         return float24::FromFloat32(ToFloat32() * flt.ToFloat32());
@@ -1051,8 +1051,8 @@ struct float24 {
     }
     }
 
 
     float24& operator *= (const float24& flt) {
     float24& operator *= (const float24& flt) {
-        if ((this->value == 0.f && flt.value == flt.value) ||
-            (flt.value == 0.f && this->value == this->value))
+        if ((this->value == 0.f && !std::isnan(flt.value)) ||
+            (flt.value == 0.f && !std::isnan(this->value)))
             // PICA gives 0 instead of NaN when multiplying by inf
             // PICA gives 0 instead of NaN when multiplying by inf
             *this = Zero();
             *this = Zero();
         else value *= flt.ToFloat32();
         else value *= flt.ToFloat32();