Merge pull request #11603 from Dentomologist/fix_d3d_nan_regression
D3D: Restore workaround for erroneous NaN optimization
This commit is contained in:
commit
c0d0a04b8f
Source/Core/VideoCommon
|
@ -100,7 +100,20 @@ std::string GetDiskShaderCacheFileName(APIType api_type, const char* type, bool
|
||||||
|
|
||||||
void WriteIsNanHeader(ShaderCode& out, APIType api_type)
|
void WriteIsNanHeader(ShaderCode& out, APIType api_type)
|
||||||
{
|
{
|
||||||
|
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");
|
out.Write("#define dolphin_isnan(f) isnan(f)\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteBitfieldExtractHeader(ShaderCode& out, APIType api_type,
|
void WriteBitfieldExtractHeader(ShaderCode& out, APIType api_type,
|
||||||
|
|
Loading…
Reference in New Issue