mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-02-24 08:01:29 +00:00
Refactor some GPU methods to return errors.
This commit is contained in:
parent
0f15a5eae6
commit
affe91cb3b
@ -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)
|
||||||
|
@ -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) {
|
||||||
|
@ -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();
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
|
@ -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_;
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user