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

View File

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

View File

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

View File

@ -15,8 +15,17 @@ void init() {
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)
{
if(it->id == listid)
@ -44,7 +53,13 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, bool head)
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)
{
@ -56,6 +71,20 @@ void GPUCommon::UpdateStall(int listid, u32 newstall)
}
ProcessDLQueue();
return 0;
}
u32 GPUCommon::Continue()
{
// TODO
return 0;
}
u32 GPUCommon::Break(int mode)
{
// TODO
return 0;
}
bool GPUCommon::InterpretList(DisplayList &list)

View File

@ -24,11 +24,15 @@ public:
virtual void PreExecuteOp(u32 op, u32 diff);
virtual bool InterpretList(DisplayList &list);
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 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 bool FramebufferDirty() { return true; }
virtual u32 Continue();
virtual u32 Break(int mode);
protected:
typedef std::deque<DisplayList> DisplayListQueue;

View File

@ -68,9 +68,11 @@ public:
virtual DisplayList* getList(int listid) = 0;
// 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 void UpdateStall(int listid, u32 newstall) = 0;
virtual void DrawSync(int mode) = 0;
virtual void Continue() = 0;
virtual u32 UpdateStall(int listid, u32 newstall) = 0;
virtual u32 DequeueList(int listid) = 0;
virtual u32 DrawSync(int mode) = 0;
virtual u32 Continue() = 0;
virtual u32 Break(int mode) = 0;
virtual void InterruptStart() = 0;
virtual void InterruptEnd() = 0;
@ -78,7 +80,7 @@ public:
virtual void PreExecuteOp(u32 op, u32 diff) = 0;
virtual void ExecuteOp(u32 op, u32 diff) = 0;
virtual bool InterpretList(DisplayList& list) = 0;
virtual int listStatus(int listid) = 0;
virtual int ListSync(int listid, int mode) = 0;
// Framebuffer management
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
{
__RunOnePendingInterrupt();
}
}
void NullGPU::Continue()
{
return GPUCommon::DrawSync(mode);
}
void NullGPU::ExecuteOp(u32 op, u32 diff)

View File

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