Merge pull request #1818 from LukeUsher/fix-lrp-shader-hang

Fix hang in WWE Raw 2 after previous PR
This commit is contained in:
RadWolfie 2020-01-16 17:02:15 -06:00 committed by GitHub
commit 08691c24e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 5 deletions

View File

@ -5613,6 +5613,12 @@ bool PSH_XBOX_SHADER::FixOverusedRegisters()
int InsertPos = i;
// Skip this operation on LRP instructions
// This prevents "error X5765: Dest register for LRP cannot be the same as first or third source register" in WWE RAW2
if (Intermediate[i].Opcode == PO_LRP) {
continue;
}
// Handle PARAM_C, PARAM_V and PARAM_T (in that order) :
for (int t = PARAM_C; t >= PARAM_T; t--) {
enum PSH_ARGUMENT_TYPE param_t = (enum PSH_ARGUMENT_TYPE)t;
@ -5627,11 +5633,6 @@ bool PSH_XBOX_SHADER::FixOverusedRegisters()
{
int output = NextFreeRegisterFromIndexUntil(i, PARAM_R, i);
// This prevents "error X5765: Dest register for LRP cannot be the same as first or third source register" in WWE RAW2
if (Intermediate[i].Opcode == PO_LRP)
if (Intermediate[i].Output[0].IsRegister(PARAM_R, output, 0))
continue; // for
// This inserts a MOV opcode that writes to R, reading from a C, V or T register
Ins.Output[0].SetRegister(PARAM_R, output, 0);
Ins.Parameters[0].SetRegister(Intermediate[i].Parameters[p].Type, Intermediate[i].Parameters[p].Address, 0);