Merge pull request #11603 from Dentomologist/fix_d3d_nan_regression
D3D: Restore workaround for erroneous NaN optimization
This commit is contained in:
commit
c0d0a04b8f
|
@ -100,7 +100,20 @@ std::string GetDiskShaderCacheFileName(APIType api_type, const char* type, bool
|
|||
|
||||
void WriteIsNanHeader(ShaderCode& out, APIType api_type)
|
||||
{
|
||||
out.Write("#define dolphin_isnan(f) isnan(f)\n");
|
||||
if (api_type == APIType::D3D)
|
||||
{
|
||||
out.Write("bool dolphin_isnan(float f) {{\n"
|
||||
" // Workaround for the HLSL compiler deciding that isnan can never be true and\n"
|
||||
" // optimising away the call, even though the value can actually be NaN\n"
|
||||
" // Just look for the bit pattern that indicates NaN instead\n"
|
||||
" return (floatBitsToInt(f) & 0x7FFFFFFF) > 0x7F800000;\n"
|
||||
"}}\n\n");
|
||||
// If isfinite is needed, (floatBitsToInt(f) & 0x7F800000) != 0x7F800000 can be used
|
||||
}
|
||||
else
|
||||
{
|
||||
out.Write("#define dolphin_isnan(f) isnan(f)\n");
|
||||
}
|
||||
}
|
||||
|
||||
void WriteBitfieldExtractHeader(ShaderCode& out, APIType api_type,
|
||||
|
|
Loading…
Reference in New Issue