mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-03-03 19:47:59 +00:00
If the interrupt is not run, don't flip gpuState.
Technically this is a hack, hopefully can remove it soon.
This commit is contained in:
parent
c57954a72e
commit
c0f20c2fdd
@ -134,19 +134,20 @@ void __GeShutdown()
|
||||
|
||||
}
|
||||
|
||||
void __GeTriggerInterrupt(int listid, u32 pc)
|
||||
bool __GeTriggerInterrupt(int listid, u32 pc)
|
||||
{
|
||||
// ClaDun X2 does not expect sceGeListEnqueue to reschedule (which it does not on the PSP.)
|
||||
// Once PPSSPP's GPU uses cycles, we can remove this check.
|
||||
DisplayList* dl = gpu->getList(listid);
|
||||
if (dl != NULL && dl->subIntrBase < 0)
|
||||
return;
|
||||
return false;
|
||||
|
||||
GeInterruptData intrdata;
|
||||
intrdata.listid = listid;
|
||||
intrdata.pc = pc;
|
||||
ge_pending_cb.push_back(intrdata);
|
||||
__TriggerInterrupt(PSP_INTR_HLE, PSP_GE_INTR, PSP_INTR_SUB_NONE);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool __GeHasPendingInterrupt()
|
||||
|
@ -39,7 +39,7 @@ void Register_sceGe_user();
|
||||
void __GeInit();
|
||||
void __GeDoState(PointerWrap &p);
|
||||
void __GeShutdown();
|
||||
void __GeTriggerInterrupt(int listid, u32 pc);
|
||||
bool __GeTriggerInterrupt(int listid, u32 pc);
|
||||
bool __GeHasPendingInterrupt();
|
||||
|
||||
|
||||
|
@ -572,8 +572,8 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) {
|
||||
break;
|
||||
}
|
||||
if (interruptsEnabled_) {
|
||||
gpuState = GPUSTATE_INTERRUPT;
|
||||
__GeTriggerInterrupt(currentList->id, currentList->pc);
|
||||
if (__GeTriggerInterrupt(currentList->id, currentList->pc))
|
||||
gpuState = GPUSTATE_INTERRUPT;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user