remove fifowait flag, is not needed now as we execute all events that need to be executed even if the cpu is waiting for the fifo.

this way fifo will not avid other thread events to bi executed.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6514 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Rodolfo Osvaldo Bogado 2010-12-04 03:44:56 +00:00
parent f5a28aecb7
commit 97e3a3ea6f
7 changed files with 14 additions and 19 deletions

View File

@ -42,7 +42,6 @@ struct BaseEvent
s64 time; s64 time;
u64 userdata; u64 userdata;
int type; int type;
bool fifoWait;
// Event *next; // Event *next;
}; };
@ -177,8 +176,7 @@ void DoState(PointerWrap &p)
prev->next = ev; prev->next = ev;
p.Do(ev->time); p.Do(ev->time);
p.Do(ev->type); p.Do(ev->type);
p.Do(ev->userdata); p.Do(ev->userdata);
p.Do(ev->fifoWait);
ev->next = 0; ev->next = 0;
prev = ev; prev = ev;
ev = ev->next; ev = ev->next;
@ -195,8 +193,7 @@ void DoState(PointerWrap &p)
p.Do(more_events); p.Do(more_events);
p.Do(ev->time); p.Do(ev->time);
p.Do(ev->type); p.Do(ev->type);
p.Do(ev->userdata); p.Do(ev->userdata);
p.Do(ev->fifoWait);
ev = ev->next; ev = ev->next;
} }
more_events = 0; more_events = 0;
@ -219,7 +216,7 @@ u64 GetIdleTicks()
// This is to be called when outside threads, such as the graphics thread, wants to // This is to be called when outside threads, such as the graphics thread, wants to
// schedule things to be executed on the main thread. // schedule things to be executed on the main thread.
void ScheduleEvent_Threadsafe(int cyclesIntoFuture, int event_type, u64 userdata, bool fifoWait) void ScheduleEvent_Threadsafe(int cyclesIntoFuture, int event_type, u64 userdata)
{ {
externalEventSection.Enter(); externalEventSection.Enter();
Event *ne = GetNewTsEvent(); Event *ne = GetNewTsEvent();
@ -227,7 +224,6 @@ void ScheduleEvent_Threadsafe(int cyclesIntoFuture, int event_type, u64 userdata
ne->type = event_type; ne->type = event_type;
ne->next = 0; ne->next = 0;
ne->userdata = userdata; ne->userdata = userdata;
ne->fifoWait = fifoWait;
if(!tsFirst) if(!tsFirst)
tsFirst = ne; tsFirst = ne;
if(tsLast) if(tsLast)
@ -247,7 +243,7 @@ void ScheduleEvent_Threadsafe_Immediate(int event_type, u64 userdata)
externalEventSection.Leave(); externalEventSection.Leave();
} }
else else
ScheduleEvent_Threadsafe(0, event_type, userdata, false); ScheduleEvent_Threadsafe(0, event_type, userdata);
} }
void ClearPendingEvents() void ClearPendingEvents()
@ -287,7 +283,6 @@ void ScheduleEvent(int cyclesIntoFuture, int event_type, u64 userdata)
ne->userdata = userdata; ne->userdata = userdata;
ne->type = event_type; ne->type = event_type;
ne->time = globalTimer + cyclesIntoFuture; ne->time = globalTimer + cyclesIntoFuture;
ne->fifoWait = false;
AddEventToQueue(ne); AddEventToQueue(ne);
} }
@ -403,7 +398,7 @@ void ProcessFifoWaitEvents()
if (!first) if (!first)
return; return;
if (first->time <= globalTimer && first->fifoWait) if (first->time <= globalTimer)
{ {
Event *next = first->next; Event *next = first->next;
event_types[first->type].callback(first->userdata, (int)(globalTimer - first->time)); event_types[first->type].callback(first->userdata, (int)(globalTimer - first->time));
@ -418,7 +413,7 @@ void ProcessFifoWaitEvents()
Event *ptr = prev->next; Event *ptr = prev->next;
while (ptr) while (ptr)
{ {
if (ptr->time <= globalTimer && ptr->fifoWait) if (ptr->time <= globalTimer)
{ {
prev->next = ptr->next; prev->next = ptr->next;
event_types[ptr->type].callback(ptr->userdata, (int)(globalTimer - ptr->time)); event_types[ptr->type].callback(ptr->userdata, (int)(globalTimer - ptr->time));

View File

@ -57,7 +57,7 @@ void UnregisterAllEvents();
// userdata MAY NOT CONTAIN POINTERS. userdata might get written and reloaded from disk, // userdata MAY NOT CONTAIN POINTERS. userdata might get written and reloaded from disk,
// when we implement state saves. // when we implement state saves.
void ScheduleEvent(int cyclesIntoFuture, int event_type, u64 userdata=0); void ScheduleEvent(int cyclesIntoFuture, int event_type, u64 userdata=0);
void ScheduleEvent_Threadsafe(int cyclesIntoFuture, int event_type, u64 userdata=0, bool fifoWait=true); void ScheduleEvent_Threadsafe(int cyclesIntoFuture, int event_type, u64 userdata=0);
void ScheduleEvent_Threadsafe_Immediate(int event_type, u64 userdata=0); void ScheduleEvent_Threadsafe_Immediate(int event_type, u64 userdata=0);
// We only permit one event of each type in the queue at a time. // We only permit one event of each type in the queue at a time.

View File

@ -717,7 +717,7 @@ void UpdateInterrupts()
void UpdateInterruptsFromVideoPlugin() void UpdateInterruptsFromVideoPlugin()
{ {
g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, 0, true); g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, 0);
} }
void SetFifoIdleFromVideoPlugin() void SetFifoIdleFromVideoPlugin()

View File

@ -343,7 +343,7 @@ void SetToken(const u16 _token, const int _bSetTokenAcknowledge)
// This seems smelly... // This seems smelly...
CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack since PEToken seems to be a frame-finish too CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack since PEToken seems to be a frame-finish too
g_VideoInitialize.pScheduleEvent_Threadsafe( g_VideoInitialize.pScheduleEvent_Threadsafe(
0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16), true); 0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16));
} }
else // set token value else // set token value
{ {
@ -362,7 +362,7 @@ void SetFinish()
{ {
CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack CommandProcessor::IncrementGPWDToken(); // for DC watchdog hack
g_VideoInitialize.pScheduleEvent_Threadsafe( g_VideoInitialize.pScheduleEvent_Threadsafe(
0, et_SetFinishOnMainThread, 0, true); 0, et_SetFinishOnMainThread, 0);
INFO_LOG(PIXELENGINE, "VIDEO Set Finish"); INFO_LOG(PIXELENGINE, "VIDEO Set Finish");
} }

View File

@ -13,7 +13,7 @@ typedef void (*TimedCallback)(u64 userdata, int cyclesLate);
typedef void (*TSetInterrupt)(u32 _causemask, bool _bSet); typedef void (*TSetInterrupt)(u32 _causemask, bool _bSet);
typedef int (*TRegisterEvent)(const char *name, TimedCallback callback); typedef int (*TRegisterEvent)(const char *name, TimedCallback callback);
typedef void (*TScheduleEvent_Threadsafe)(int cyclesIntoFuture, int event_type, u64 userdata, bool fifoWait); typedef void (*TScheduleEvent_Threadsafe)(int cyclesIntoFuture, int event_type, u64 userdata);
typedef void (*TRemoveEvent)(int event_type); typedef void (*TRemoveEvent)(int event_type);
typedef unsigned char* (*TGetMemoryPointer)(const unsigned int _iAddress); typedef unsigned char* (*TGetMemoryPointer)(const unsigned int _iAddress);
typedef void (*TVideoLog)(const char* _pMessage, int _bBreak); typedef void (*TVideoLog)(const char* _pMessage, int _bBreak);

View File

@ -322,7 +322,7 @@ void UpdateInterrupts(u64 userdata)
void UpdateInterruptsFromVideoPlugin(u64 userdata) void UpdateInterruptsFromVideoPlugin(u64 userdata)
{ {
g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, userdata, true); g_VideoInitialize.pScheduleEvent_Threadsafe(0, et_UpdateInterrupts, userdata);
} }
void ReadFifo() void ReadFifo()

View File

@ -155,7 +155,7 @@ void SetToken(const u16 _token, const int _bSetTokenAcknowledge)
if (_bSetTokenAcknowledge) // set token INT if (_bSetTokenAcknowledge) // set token INT
{ {
g_VideoInitialize.pScheduleEvent_Threadsafe( g_VideoInitialize.pScheduleEvent_Threadsafe(
0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16), true); 0, et_SetTokenOnMainThread, _token | (_bSetTokenAcknowledge << 16));
} }
} }
@ -164,7 +164,7 @@ void SetToken(const u16 _token, const int _bSetTokenAcknowledge)
void SetFinish() void SetFinish()
{ {
g_VideoInitialize.pScheduleEvent_Threadsafe( g_VideoInitialize.pScheduleEvent_Threadsafe(
0, et_SetFinishOnMainThread, 0, true); 0, et_SetFinishOnMainThread, 0);
INFO_LOG(PIXELENGINE, "VIDEO Set Finish"); INFO_LOG(PIXELENGINE, "VIDEO Set Finish");
} }