Browse Source

Revert forced warp shuffle to fix some games

Metroid Prime Remastered, Prince of Persia The Lost Crown, and maybe
some others.
pull/385/head
Calchan 6 months ago
committed by Denis Dupeyron
parent
commit
c82212085c
  1. 17
      src/shader_recompiler/frontend/maxwell/translate/impl/warp_shuffle.cpp

17
src/shader_recompiler/frontend/maxwell/translate/impl/warp_shuffle.cpp

@ -7,7 +7,6 @@
#include "common/bit_field.h" #include "common/bit_field.h"
#include "common/common_types.h" #include "common/common_types.h"
#include "shader_recompiler/frontend/maxwell/translate/impl/impl.h" #include "shader_recompiler/frontend/maxwell/translate/impl/impl.h"
#include <fstream>
namespace Shader::Maxwell { namespace Shader::Maxwell {
namespace { namespace {
@ -37,17 +36,6 @@ enum class ShuffleMode : u64 {
} }
} }
bool IsKONA() {
std::ifstream machineFile("/sys/devices/soc0/machine");
if (machineFile.is_open()) {
std::string line;
std::getline(machineFile, line);
if (line == "KONA")
return true;
}
return false;
}
void Shuffle(TranslatorVisitor& v, u64 insn, const IR::U32& index, const IR::U32& mask) { void Shuffle(TranslatorVisitor& v, u64 insn, const IR::U32& index, const IR::U32& mask) {
union { union {
u64 insn; u64 insn;
@ -59,10 +47,7 @@ void Shuffle(TranslatorVisitor& v, u64 insn, const IR::U32& index, const IR::U32
const IR::U32 result{ShuffleOperation(v.ir, v.X(shfl.src_reg), index, mask, shfl.mode)}; const IR::U32 result{ShuffleOperation(v.ir, v.X(shfl.src_reg), index, mask, shfl.mode)};
v.ir.SetPred(shfl.pred, v.ir.GetInBoundsFromOp(result)); v.ir.SetPred(shfl.pred, v.ir.GetInBoundsFromOp(result));
if (IsKONA())
v.X(shfl.dest_reg, v.ir.Imm32(0xffffffff)); // This fixes the freeze for Retroid / Snapdragon SD865
else
v.X(shfl.dest_reg, result);
v.X(shfl.dest_reg, result);
} }
} // Anonymous namespace } // Anonymous namespace

Loading…
Cancel
Save