From b10b24feeaf29764e3d8c5ce551b6b23da11a2d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 9 Dec 2017 23:58:08 +0100 Subject: [PATCH] GLES device lost/store fixes --- GPU/GLES/DrawEngineGLES.cpp | 8 ++++++++ GPU/GLES/DrawEngineGLES.h | 8 ++++++-- GPU/GLES/GPU_GLES.cpp | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/GPU/GLES/DrawEngineGLES.cpp b/GPU/GLES/DrawEngineGLES.cpp index c669843952..7cba85b02b 100644 --- a/GPU/GLES/DrawEngineGLES.cpp +++ b/GPU/GLES/DrawEngineGLES.cpp @@ -156,6 +156,14 @@ void DrawEngineGLES::RestoreVAO() { } } +void DrawEngineGLES::DeviceLost() { + DestroyDeviceObjects(); +} + +void DrawEngineGLES::DeviceRestore() { + InitDeviceObjects(); +} + void DrawEngineGLES::InitDeviceObjects() { if (bufferNameCache_.empty()) { bufferNameCache_.resize(VERTEXCACHE_NAME_CACHE_SIZE); diff --git a/GPU/GLES/DrawEngineGLES.h b/GPU/GLES/DrawEngineGLES.h index d3e695a158..037758d670 100644 --- a/GPU/GLES/DrawEngineGLES.h +++ b/GPU/GLES/DrawEngineGLES.h @@ -119,8 +119,9 @@ public: fragmentTestCache_ = testCache; } void RestoreVAO(); - void InitDeviceObjects(); - void DestroyDeviceObjects(); + + void DeviceLost(); + void DeviceRestore(); void ClearTrackedVertexArrays() override; void DecimateTrackedVertexArrays(); @@ -151,6 +152,9 @@ public: void DecimateBuffers(); private: + void InitDeviceObjects(); + void DestroyDeviceObjects(); + void DoFlush(); void ApplyDrawState(int prim); void ApplyDrawStateLate(); diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index 9624c41253..8ba73cbd87 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -391,7 +391,7 @@ void GPU_GLES::DeviceLost() { textureCacheGL_->Clear(false); fragmentTestCache_.Clear(false); depalShaderCache_.Clear(); - drawEngine_.ClearTrackedVertexArrays(); + drawEngine_.DeviceLost(); framebufferManagerGL_->DeviceLost(); } @@ -404,6 +404,7 @@ void GPU_GLES::DeviceRestore() { textureCacheGL_->DeviceRestore(draw_); framebufferManagerGL_->DeviceRestore(draw_); + drawEngine_.DeviceRestore(); } void GPU_GLES::Reinitialize() {