Cocoa Port: Rename class "GPUEventHandlerOSX" to "GPUEventHandlerAsync".

- Also make a stub class of GPUEventHandlerAsync to better control some multithreaded stuff in the OpenEmu plug-in.
This commit is contained in:
rogerman 2022-05-05 14:32:00 -07:00
parent 180df28ce7
commit dce04f722f
2 changed files with 38 additions and 27 deletions

View File

@ -65,7 +65,6 @@ enum ClientDisplayBufferState
ClientDisplayBufferState_Reading = 4 // The buffer is currently being read. It cannot be accessed.
};
class GPUEventHandlerOSX;
class ClientDisplay3DView;
#ifdef ENABLE_ASYNC_FETCH
@ -153,7 +152,7 @@ public:
#endif // ENABLE_ASYNC_FETCH
class GPUEventHandlerOSX : public GPUEventHandlerDefault
class GPUEventHandlerAsync : public GPUEventHandlerDefault
{
private:
GPUClientFetchObject *_fetchObject;
@ -165,8 +164,8 @@ private:
bool _render3DNeedsFinish;
public:
GPUEventHandlerOSX();
~GPUEventHandlerOSX();
GPUEventHandlerAsync();
~GPUEventHandlerAsync();
GPUClientFetchObject* GetFetchObject() const;
void SetFetchObject(GPUClientFetchObject *fetchObject);
@ -195,6 +194,14 @@ public:
virtual void DidApplyRender3DSettingsEnd();
};
// This stub version is useful for clients that want to run the entire emulation on a single thread.
class GPUEventHandlerAsync_Stub : public GPUEventHandlerAsync
{
public:
virtual void DidRender3DBegin() {};
virtual void DidRender3DEnd() {};
};
@interface CocoaDSGPU : NSObject
{
UInt32 gpuStateFlags;
@ -205,7 +212,7 @@ public:
BOOL _needRestoreRender3DLock;
apple_unfairlock_t _unfairlockGpuState;
GPUEventHandlerOSX *gpuEvent;
GPUEventHandlerAsync *gpuEvent;
GPUClientFetchObject *fetchObject;
}

View File

@ -124,7 +124,11 @@ GPU3DInterface *core3DList[GPU_3D_RENDERER_COUNT+1] = {
&OSXOpenGLRendererEnd,
&OSXOpenGLRendererFramebufferDidResize);
gpuEvent = new GPUEventHandlerOSX;
#ifdef PORT_VERSION_OS_X_APP
gpuEvent = new GPUEventHandlerAsync;
#else
gpuEvent = new GPUEventHandlerAsync_Stub;
#endif
GPU->SetEventHandler(gpuEvent);
fetchObject = NULL;
@ -1659,7 +1663,7 @@ void MacGPUFetchObjectDisplayLink::DoPostFetchActions()
#pragma mark -
GPUEventHandlerOSX::GPUEventHandlerOSX()
GPUEventHandlerAsync::GPUEventHandlerAsync()
{
_fetchObject = nil;
_render3DNeedsFinish = false;
@ -1669,7 +1673,7 @@ GPUEventHandlerOSX::GPUEventHandlerOSX()
pthread_mutex_init(&_mutexApplyRender3DSettings, NULL);
}
GPUEventHandlerOSX::~GPUEventHandlerOSX()
GPUEventHandlerAsync::~GPUEventHandlerAsync()
{
if (this->_render3DNeedsFinish)
{
@ -1682,19 +1686,19 @@ GPUEventHandlerOSX::~GPUEventHandlerOSX()
pthread_mutex_destroy(&this->_mutexApplyRender3DSettings);
}
GPUClientFetchObject* GPUEventHandlerOSX::GetFetchObject() const
GPUClientFetchObject* GPUEventHandlerAsync::GetFetchObject() const
{
return this->_fetchObject;
}
void GPUEventHandlerOSX::SetFetchObject(GPUClientFetchObject *fetchObject)
void GPUEventHandlerAsync::SetFetchObject(GPUClientFetchObject *fetchObject)
{
this->_fetchObject = fetchObject;
}
#ifdef ENABLE_ASYNC_FETCH
void GPUEventHandlerOSX::DidFrameBegin(const size_t line, const bool isFrameSkipRequested, const size_t pageCount, u8 &selectedBufferIndexInOut)
void GPUEventHandlerAsync::DidFrameBegin(const size_t line, const bool isFrameSkipRequested, const size_t pageCount, u8 &selectedBufferIndexInOut)
{
MacGPUFetchObjectAsync *asyncFetchObj = (MacGPUFetchObjectAsync *)this->_fetchObject;
@ -1712,7 +1716,7 @@ void GPUEventHandlerOSX::DidFrameBegin(const size_t line, const bool isFrameSkip
}
}
void GPUEventHandlerOSX::DidFrameEnd(bool isFrameSkipped, const NDSDisplayInfo &latestDisplayInfo)
void GPUEventHandlerAsync::DidFrameEnd(bool isFrameSkipped, const NDSDisplayInfo &latestDisplayInfo)
{
MacGPUFetchObjectAsync *asyncFetchObj = (MacGPUFetchObjectAsync *)this->_fetchObject;
@ -1733,79 +1737,79 @@ void GPUEventHandlerOSX::DidFrameEnd(bool isFrameSkipped, const NDSDisplayInfo &
#endif // ENABLE_ASYNC_FETCH
void GPUEventHandlerOSX::DidRender3DBegin()
void GPUEventHandlerAsync::DidRender3DBegin()
{
this->Render3DLock();
this->_render3DNeedsFinish = true;
}
void GPUEventHandlerOSX::DidRender3DEnd()
void GPUEventHandlerAsync::DidRender3DEnd()
{
this->_render3DNeedsFinish = false;
this->Render3DUnlock();
}
void GPUEventHandlerOSX::DidApplyGPUSettingsBegin()
void GPUEventHandlerAsync::DidApplyGPUSettingsBegin()
{
this->ApplyGPUSettingsLock();
}
void GPUEventHandlerOSX::DidApplyGPUSettingsEnd()
void GPUEventHandlerAsync::DidApplyGPUSettingsEnd()
{
this->ApplyGPUSettingsUnlock();
}
void GPUEventHandlerOSX::DidApplyRender3DSettingsBegin()
void GPUEventHandlerAsync::DidApplyRender3DSettingsBegin()
{
this->ApplyRender3DSettingsLock();
}
void GPUEventHandlerOSX::DidApplyRender3DSettingsEnd()
void GPUEventHandlerAsync::DidApplyRender3DSettingsEnd()
{
this->ApplyRender3DSettingsUnlock();
}
void GPUEventHandlerOSX::FramebufferLock()
void GPUEventHandlerAsync::FramebufferLock()
{
pthread_mutex_lock(&this->_mutexFrame);
}
void GPUEventHandlerOSX::FramebufferUnlock()
void GPUEventHandlerAsync::FramebufferUnlock()
{
pthread_mutex_unlock(&this->_mutexFrame);
}
void GPUEventHandlerOSX::Render3DLock()
void GPUEventHandlerAsync::Render3DLock()
{
pthread_mutex_lock(&this->_mutex3DRender);
}
void GPUEventHandlerOSX::Render3DUnlock()
void GPUEventHandlerAsync::Render3DUnlock()
{
pthread_mutex_unlock(&this->_mutex3DRender);
}
void GPUEventHandlerOSX::ApplyGPUSettingsLock()
void GPUEventHandlerAsync::ApplyGPUSettingsLock()
{
pthread_mutex_lock(&this->_mutexApplyGPUSettings);
}
void GPUEventHandlerOSX::ApplyGPUSettingsUnlock()
void GPUEventHandlerAsync::ApplyGPUSettingsUnlock()
{
pthread_mutex_unlock(&this->_mutexApplyGPUSettings);
}
void GPUEventHandlerOSX::ApplyRender3DSettingsLock()
void GPUEventHandlerAsync::ApplyRender3DSettingsLock()
{
pthread_mutex_lock(&this->_mutexApplyRender3DSettings);
}
void GPUEventHandlerOSX::ApplyRender3DSettingsUnlock()
void GPUEventHandlerAsync::ApplyRender3DSettingsUnlock()
{
pthread_mutex_unlock(&this->_mutexApplyRender3DSettings);
}
bool GPUEventHandlerOSX::GetRender3DNeedsFinish()
bool GPUEventHandlerAsync::GetRender3DNeedsFinish()
{
return this->_render3DNeedsFinish;
}