From e9a0fec5b3f03c460a8945a6599c99374d6ea614 Mon Sep 17 00:00:00 2001 From: Robin Kertels Date: Mon, 5 Feb 2024 18:08:28 +0100 Subject: [PATCH] [dxso] Clamp Exp when fast float emulation is enabled --- src/dxso/dxso_compiler.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/dxso/dxso_compiler.cpp b/src/dxso/dxso_compiler.cpp index 905a9513..abc55de8 100644 --- a/src/dxso/dxso_compiler.cpp +++ b/src/dxso/dxso_compiler.cpp @@ -2029,12 +2029,22 @@ namespace dxvk { result.id = resultIndices[0]; else result.id = m_module.opCompositeConstruct(typeId, result.type.ccount, resultIndices.data()); + + if (m_moduleInfo.options.d3d9FloatEmulation == D3D9FloatEmulation::Enabled) { + result.id = m_module.opNMin(typeId, result.id, + m_module.constfReplicant(FLT_MAX, result.type.ccount)); + } break; } [[fallthrough]]; case DxsoOpcode::Exp: result.id = m_module.opExp2(typeId, emitRegisterLoad(src[0], mask).id); + + if (m_moduleInfo.options.d3d9FloatEmulation == D3D9FloatEmulation::Enabled) { + result.id = m_module.opNMin(typeId, result.id, + m_module.constfReplicant(FLT_MAX, result.type.ccount)); + } break; case DxsoOpcode::Pow: { uint32_t base = emitRegisterLoad(src[0], mask).id;