Add FogParam0::FloatValue and FogParam3::FloatValue

This value will be used in the register description; so expose it in a way that can be re-used instead of calculating it in 2 places later.
This commit is contained in:
Pokechu22 2021-02-11 22:38:07 -08:00
parent f2bea67709
commit db8ced7e4e
2 changed files with 18 additions and 10 deletions

View File

@ -47,16 +47,26 @@ bool FogParams::IsNaNCase() const
return a.exp == 255 && c_proj_fsel.c_exp == 255;
}
float FogParam0::FloatValue() const
{
// scale mantissa from 11 to 23 bits
const u32 integral = (sign << 31) | (exp << 23) | (mant << 12);
return Common::BitCast<float>(integral);
}
float FogParam3::FloatValue() const
{
// scale mantissa from 11 to 23 bits
const u32 integral = (c_sign << 31) | (c_exp << 23) | (c_mant << 12);
return Common::BitCast<float>(integral);
}
float FogParams::GetA() const
{
if (IsNaNCase())
return 0.0f;
// scale mantissa from 11 to 23 bits
const u32 integral = (static_cast<u32>(a.sign) << 31) | (static_cast<u32>(a.exp) << 23) |
(static_cast<u32>(a.mant) << 12);
return Common::BitCast<float>(integral);
return a.FloatValue();
}
float FogParams::GetC() const
@ -67,9 +77,5 @@ float FogParams::GetC() const
return !a.sign && !c_proj_fsel.c_sign ? -inf : inf;
}
// scale mantissa from 11 to 23 bits
const u32 integral = (c_proj_fsel.c_sign.Value() << 31) | (c_proj_fsel.c_exp.Value() << 23) |
(c_proj_fsel.c_mant.Value() << 12);
return Common::BitCast<float>(integral);
return c_proj_fsel.FloatValue();
}

View File

@ -661,6 +661,7 @@ union FogParam0
BitField<19, 1, u32> sign;
u32 hex;
float FloatValue() const;
};
union FogParam3
@ -673,6 +674,7 @@ union FogParam3
// backward exp, 7 - backward exp2
u32 hex;
float FloatValue() const;
};
union FogRangeKElement