Refactor some GPU methods to return errors.

This commit is contained in:
Unknown W. Brackets 2013-03-31 23:23:03 -07:00
parent 0f15a5eae6
commit affe91cb3b
8 changed files with 57 additions and 50 deletions

View File

@ -188,48 +188,39 @@ u32 sceGeListEnQueueHead(u32 listAddress, u32 stallAddress, int callbackId,
int sceGeListDeQueue(u32 listID) int sceGeListDeQueue(u32 listID)
{ {
ERROR_LOG(HLE, "UNIMPL sceGeListDeQueue(%08x)", listID); ERROR_LOG(HLE, "UNIMPL sceGeListDeQueue(%08x)", listID);
return 0; return gpu->DequeueList(listID);
} }
int sceGeListUpdateStallAddr(u32 displayListID, u32 stallAddress) int sceGeListUpdateStallAddr(u32 displayListID, u32 stallAddress)
{ {
DEBUG_LOG(HLE, "sceGeListUpdateStallAddr(dlid=%i,stalladdr=%08x)", DEBUG_LOG(HLE, "sceGeListUpdateStallAddr(dlid=%i,stalladdr=%08x)", displayListID, stallAddress);
displayListID, stallAddress); return gpu->UpdateStall(displayListID, stallAddress);
gpu->UpdateStall(displayListID, stallAddress);
return 0;
} }
int sceGeListSync(u32 displayListID, u32 mode) //0 : wait for completion 1:check and return int sceGeListSync(u32 displayListID, u32 mode) //0 : wait for completion 1:check and return
{ {
DEBUG_LOG(HLE, "sceGeListSync(dlid=%08x, mode=%08x)", displayListID, mode); DEBUG_LOG(HLE, "sceGeListSync(dlid=%08x, mode=%08x)", displayListID, mode);
if(mode == 1) { return gpu->ListSync(displayListID, mode);
return gpu->listStatus(displayListID);
}
return 0;
} }
u32 sceGeDrawSync(u32 mode) u32 sceGeDrawSync(u32 mode)
{ {
//wait/check entire drawing state //wait/check entire drawing state
DEBUG_LOG(HLE, "FAKE sceGeDrawSync(mode=%d) (0=wait for completion)", DEBUG_LOG(HLE, "FAKE sceGeDrawSync(mode=%d) (0=wait for completion)", mode);
mode); return gpu->DrawSync(mode);
gpu->DrawSync(mode);
return 0;
} }
int sceGeContinue() int sceGeContinue()
{ {
DEBUG_LOG(HLE, "UNIMPL sceGeContinue"); DEBUG_LOG(HLE, "UNIMPL sceGeContinue");
// no arguments return gpu->Continue();
return 0;
} }
int sceGeBreak(u32 mode) int sceGeBreak(u32 mode)
{ {
//mode => 0 : current dlist 1: all drawing //mode => 0 : current dlist 1: all drawing
DEBUG_LOG(HLE, "UNIMPL sceGeBreak(mode=%d)", mode); DEBUG_LOG(HLE, "UNIMPL sceGeBreak(mode=%d)", mode);
return 0; return gpu->Break(mode);
} }
u32 sceGeSetCallback(u32 structAddr) u32 sceGeSetCallback(u32 structAddr)

View File

@ -279,17 +279,10 @@ void GLES_GPU::CopyDisplayToOutput() {
// Render queue // Render queue
void GLES_GPU::DrawSync(int mode) u32 GLES_GPU::DrawSync(int mode)
{ {
transformDraw_.Flush(); transformDraw_.Flush();
} return GPUCommon::DrawSync(mode);
void GLES_GPU::Continue() {
}
void GLES_GPU::Break() {
} }
void GLES_GPU::PreExecuteOp(u32 op, u32 diff) { void GLES_GPU::PreExecuteOp(u32 op, u32 diff) {

View File

@ -38,9 +38,7 @@ public:
virtual void InitClear(); virtual void InitClear();
virtual void PreExecuteOp(u32 op, u32 diff); virtual void PreExecuteOp(u32 op, u32 diff);
virtual void ExecuteOp(u32 op, u32 diff); virtual void ExecuteOp(u32 op, u32 diff);
virtual void DrawSync(int mode); virtual u32 DrawSync(int mode);
virtual void Continue();
virtual void Break();
virtual void SetDisplayFramebuffer(u32 framebuf, u32 stride, int format); virtual void SetDisplayFramebuffer(u32 framebuf, u32 stride, int format);
virtual void CopyDisplayToOutput(); virtual void CopyDisplayToOutput();

View File

@ -15,8 +15,17 @@ void init() {
dlIdGenerator = 1; dlIdGenerator = 1;
} }
int GPUCommon::listStatus(int listid) u32 GPUCommon::DrawSync(int mode) {
return 0;
}
int GPUCommon::ListSync(int listid, int mode)
{ {
// TODO
if (mode != 1)
return 0;
return 0;
for(DisplayListQueue::iterator it(dlQueue.begin()); it != dlQueue.end(); ++it) for(DisplayListQueue::iterator it(dlQueue.begin()); it != dlQueue.end(); ++it)
{ {
if(it->id == listid) if(it->id == listid)
@ -44,7 +53,13 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, bool head)
return dl.id; return dl.id;
} }
void GPUCommon::UpdateStall(int listid, u32 newstall) u32 GPUCommon::DequeueList(int listid)
{
// TODO
return 0;
}
u32 GPUCommon::UpdateStall(int listid, u32 newstall)
{ {
for (auto iter = dlQueue.begin(); iter != dlQueue.end(); ++iter) for (auto iter = dlQueue.begin(); iter != dlQueue.end(); ++iter)
{ {
@ -56,6 +71,20 @@ void GPUCommon::UpdateStall(int listid, u32 newstall)
} }
ProcessDLQueue(); ProcessDLQueue();
return 0;
}
u32 GPUCommon::Continue()
{
// TODO
return 0;
}
u32 GPUCommon::Break(int mode)
{
// TODO
return 0;
} }
bool GPUCommon::InterpretList(DisplayList &list) bool GPUCommon::InterpretList(DisplayList &list)

View File

@ -24,11 +24,15 @@ public:
virtual void PreExecuteOp(u32 op, u32 diff); virtual void PreExecuteOp(u32 op, u32 diff);
virtual bool InterpretList(DisplayList &list); virtual bool InterpretList(DisplayList &list);
virtual bool ProcessDLQueue(); virtual bool ProcessDLQueue();
virtual void UpdateStall(int listid, u32 newstall); virtual u32 UpdateStall(int listid, u32 newstall);
virtual u32 EnqueueList(u32 listpc, u32 stall, int subIntrBase, bool head); virtual u32 EnqueueList(u32 listpc, u32 stall, int subIntrBase, bool head);
virtual int listStatus(int listid); virtual u32 DequeueList(int listid);
virtual int ListSync(int listid, int mode);
virtual u32 DrawSync(int mode);
virtual void DoState(PointerWrap &p); virtual void DoState(PointerWrap &p);
virtual bool FramebufferDirty() { return true; } virtual bool FramebufferDirty() { return true; }
virtual u32 Continue();
virtual u32 Break(int mode);
protected: protected:
typedef std::deque<DisplayList> DisplayListQueue; typedef std::deque<DisplayList> DisplayListQueue;

View File

@ -68,9 +68,11 @@ public:
virtual DisplayList* getList(int listid) = 0; virtual DisplayList* getList(int listid) = 0;
// TODO: Much of this should probably be shared between the different GPU implementations. // TODO: Much of this should probably be shared between the different GPU implementations.
virtual u32 EnqueueList(u32 listpc, u32 stall, int subIntrBase, bool head) = 0; virtual u32 EnqueueList(u32 listpc, u32 stall, int subIntrBase, bool head) = 0;
virtual void UpdateStall(int listid, u32 newstall) = 0; virtual u32 UpdateStall(int listid, u32 newstall) = 0;
virtual void DrawSync(int mode) = 0; virtual u32 DequeueList(int listid) = 0;
virtual void Continue() = 0; virtual u32 DrawSync(int mode) = 0;
virtual u32 Continue() = 0;
virtual u32 Break(int mode) = 0;
virtual void InterruptStart() = 0; virtual void InterruptStart() = 0;
virtual void InterruptEnd() = 0; virtual void InterruptEnd() = 0;
@ -78,7 +80,7 @@ public:
virtual void PreExecuteOp(u32 op, u32 diff) = 0; virtual void PreExecuteOp(u32 op, u32 diff) = 0;
virtual void ExecuteOp(u32 op, u32 diff) = 0; virtual void ExecuteOp(u32 op, u32 diff) = 0;
virtual bool InterpretList(DisplayList& list) = 0; virtual bool InterpretList(DisplayList& list) = 0;
virtual int listStatus(int listid) = 0; virtual int ListSync(int listid, int mode) = 0;
// Framebuffer management // Framebuffer management
virtual void SetDisplayFramebuffer(u32 framebuf, u32 stride, int format) = 0; virtual void SetDisplayFramebuffer(u32 framebuf, u32 stride, int format) = 0;

View File

@ -32,17 +32,14 @@ NullGPU::~NullGPU()
{ {
} }
void NullGPU::DrawSync(int mode) u32 NullGPU::DrawSync(int mode)
{ {
if (mode == 0) // Wait for completion if (mode == 0) // Wait for completion
{ {
__RunOnePendingInterrupt(); __RunOnePendingInterrupt();
} }
}
void NullGPU::Continue()
{
return GPUCommon::DrawSync(mode);
} }
void NullGPU::ExecuteOp(u32 op, u32 diff) void NullGPU::ExecuteOp(u32 op, u32 diff)

View File

@ -28,11 +28,7 @@ public:
~NullGPU(); ~NullGPU();
virtual void InitClear() {} virtual void InitClear() {}
virtual void ExecuteOp(u32 op, u32 diff); virtual void ExecuteOp(u32 op, u32 diff);
virtual void Continue(); virtual u32 DrawSync(int mode);
virtual void DrawSync(int mode);
virtual void EnableInterrupts(bool enable) {
interruptsEnabled_ = enable;
}
virtual void BeginFrame() {} virtual void BeginFrame() {}
virtual void SetDisplayFramebuffer(u32 framebuf, u32 stride, int format) {} virtual void SetDisplayFramebuffer(u32 framebuf, u32 stride, int format) {}
@ -46,7 +42,4 @@ public:
virtual void DumpNextFrame() {} virtual void DumpNextFrame() {}
virtual void Resized() {} virtual void Resized() {}
private:
bool interruptsEnabled_;
}; };