From 8887930fd55be3d9422d56ad2747125ac49a192e Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Tue, 14 May 2024 10:53:57 +0100 Subject: [PATCH] GS/SW: Don't use fast reciprocal stq calculation, it's too inaccurate --- .../Renderers/SW/GSDrawScanlineCodeGenerator.all.cpp | 12 ++++-------- pcsx2/GS/Renderers/SW/GSNewCodeGenerator.h | 1 + 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/pcsx2/GS/Renderers/SW/GSDrawScanlineCodeGenerator.all.cpp b/pcsx2/GS/Renderers/SW/GSDrawScanlineCodeGenerator.all.cpp index 61769ae2ee..3f579128dc 100644 --- a/pcsx2/GS/Renderers/SW/GSDrawScanlineCodeGenerator.all.cpp +++ b/pcsx2/GS/Renderers/SW/GSDrawScanlineCodeGenerator.all.cpp @@ -1173,10 +1173,8 @@ void GSDrawScanlineCodeGenerator::SampleTexture() if (!m_sel.fst) { - rcpps(xym0, _q); - - MOVE_IF_64(mulps, xym2, _s, xym0); - MOVE_IF_64(mulps, xym3, _t, xym0); + MOVE_IF_64(divps, xym2, _s, _q); + MOVE_IF_64(divps, xym3, _t, _q); cvttps2dq(xym2, xym2); cvttps2dq(xym3, xym3); @@ -1576,10 +1574,8 @@ void GSDrawScanlineCodeGenerator::SampleTextureLOD() if (!m_sel.fst) { - rcpps(xym0, xym4); - - MOVE_IF_64(mulps, xym2, _s, xym0); - MOVE_IF_64(mulps, xym3, _t, xym0); + MOVE_IF_64(divps, xym2, _s, xym4); + MOVE_IF_64(divps, xym3, _t, xym4); cvttps2dq(xym2, xym2); cvttps2dq(xym3, xym3); diff --git a/pcsx2/GS/Renderers/SW/GSNewCodeGenerator.h b/pcsx2/GS/Renderers/SW/GSNewCodeGenerator.h index 1ff7563871..981bb02d81 100644 --- a/pcsx2/GS/Renderers/SW/GSNewCodeGenerator.h +++ b/pcsx2/GS/Renderers/SW/GSNewCodeGenerator.h @@ -256,6 +256,7 @@ public: AFORWARD(2, cvtss2sd, ARGS_XO) SFORWARD(2, cvttps2dq, ARGS_XO) SFORWARD(2, cvttsd2si, const AddressReg&, const Operand&); + AFORWARD(2, divps, ARGS_XO) SFORWARD(3, extractps, const Operand&, const Xmm&, u8) AFORWARD(2, maxps, ARGS_XO) AFORWARD(2, minps, ARGS_XO)