mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-26 23:10:38 +00:00
check for duplicated stack addresses
Based on https://code.google.com/p/jpcsp/source/detail?r=3569 Fix WWE SmackDown! vs. RAW 2006
This commit is contained in:
parent
3c19eda851
commit
8099281928
@ -43,7 +43,7 @@ struct PspGeListArgs
|
||||
SceSize_le size;
|
||||
PSPPointer<u32_le> context;
|
||||
u32_le numStacks;
|
||||
u32_le unknown1;
|
||||
u32_le stackAddr;
|
||||
};
|
||||
|
||||
void Register_sceGe_user();
|
||||
|
@ -210,6 +210,7 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, PSPPointer<Ps
|
||||
|
||||
int id = -1;
|
||||
u64 currentTicks = CoreTiming::GetTicks();
|
||||
u32_le stackAddr = args.IsValid() ? args->stackAddr : 0;
|
||||
// Check compatibility
|
||||
if (sceKernelGetCompiledSdkVersion() > 0x01FFFFFF) {
|
||||
//numStacks = 0;
|
||||
@ -222,6 +223,10 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, PSPPointer<Ps
|
||||
ERROR_LOG(G3D, "sceGeListEnqueue: can't enqueue, list address %08X already used", listpc);
|
||||
return 0x80000021;
|
||||
}
|
||||
else if (stackAddr != 0 && dls[i].stackAddr == stackAddr && !dls[i].pendingInterrupt) {
|
||||
ERROR_LOG(G3D, "sceGeListEnqueue: can't enqueue, stack address %08X already used", stackAddr);
|
||||
return 0x80000021;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -266,6 +271,7 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, PSPPointer<Ps
|
||||
dl.started = false;
|
||||
dl.offsetAddr = 0;
|
||||
dl.bboxResult = false;
|
||||
dl.stackAddr = stackAddr;
|
||||
|
||||
if (args.IsValid() && args->context.IsValid())
|
||||
dl.context = args->context;
|
||||
|
@ -142,6 +142,7 @@ struct DisplayList
|
||||
PSPPointer<u32_le> context;
|
||||
u32 offsetAddr;
|
||||
bool bboxResult;
|
||||
u32_le stackAddr;
|
||||
};
|
||||
|
||||
enum GPUInvalidationType {
|
||||
|
Loading…
Reference in New Issue
Block a user