sdm: Fix Deinit for GPU WB.

Delete all context dependent resources before destroying context.
Ex: program_id, image buffer ids etc;

CRs-Fixed: 2573023
Change-Id: I675339ce840189b70b74abb2fc4bdcb9d3c240aa
diff --git a/composer/gl_color_convert.cpp b/composer/gl_color_convert.cpp
index 03f7377..f398059 100644
--- a/composer/gl_color_convert.cpp
+++ b/composer/gl_color_convert.cpp
@@ -35,7 +35,7 @@
 namespace sdm {
 
 GLColorConvert* GLColorConvert::GetInstance(GLRenderTarget target, bool secure) {
-  GLColorConvertImpl* color_convert =  new GLColorConvertImpl(target, secure);
+  GLColorConvertImpl* color_convert = new GLColorConvertImpl(target, secure);
   if (color_convert == nullptr) {
     DLOGE("Failed to create color convert instance for %d target %d secure", target, secure);
     return nullptr;
diff --git a/composer/gl_common.cpp b/composer/gl_common.cpp
index c350d47..aa3bc45 100644
--- a/composer/gl_common.cpp
+++ b/composer/gl_common.cpp
@@ -147,12 +147,16 @@
   return fd;
 }
 
-void GLCommon::DestroyContext(const GLContext* ctx) {
+void GLCommon::DestroyContext(GLContext* ctx) {
   DTRACE_SCOPED();
+
+  // Clear egl image buffers.
+  image_wrapper_.Deinit();
+
+  EGL(DeleteProgram(ctx->program_id));
   EGL(eglMakeCurrent(ctx->egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
   EGL(eglDestroySurface(ctx->egl_display, ctx->egl_surface));
   EGL(eglDestroyContext(ctx->egl_display, ctx->egl_context));
-  EGL(DeleteProgram(ctx->program_id));
   EGL(eglTerminate(ctx->egl_display));
 }
 
diff --git a/composer/gl_common.h b/composer/gl_common.h
index 79af479..c77988b 100644
--- a/composer/gl_common.h
+++ b/composer/gl_common.h
@@ -60,7 +60,7 @@
   virtual void SetProgram(uint32_t id);
   virtual void SetDestinationBuffer(const private_handle_t *dst_hnd, const GLRect &dst_rect);
   virtual void SetSourceBuffer(const private_handle_t *src_hnd);
-  virtual void DestroyContext(const GLContext *ctx);
+  virtual void DestroyContext(GLContext *ctx);
   virtual void DeleteProgram(uint32_t id);
   virtual int WaitOnInputFence(int in_fence_fd);
   virtual int CreateOutputFence();
diff --git a/gpu_tonemapper/EGLImageWrapper.cpp b/gpu_tonemapper/EGLImageWrapper.cpp
index 19bf093..b3730f0 100644
--- a/gpu_tonemapper/EGLImageWrapper.cpp
+++ b/gpu_tonemapper/EGLImageWrapper.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright 2015 The Android Open Source Project
@@ -122,6 +122,13 @@
 EGLImageWrapper::~EGLImageWrapper()
 //-----------------------------------------------------------------------------
 {
+  Deinit();
+}
+
+//-----------------------------------------------------------------------------
+void EGLImageWrapper::Deinit()
+//-----------------------------------------------------------------------------
+{
   if (eglImageBufferCache != 0) {
     if (callback != 0) {
       callback->mapClearPending = true;
diff --git a/gpu_tonemapper/EGLImageWrapper.h b/gpu_tonemapper/EGLImageWrapper.h
index ce1b344..dfcbca9 100644
--- a/gpu_tonemapper/EGLImageWrapper.h
+++ b/gpu_tonemapper/EGLImageWrapper.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright 2015 The Android Open Source Project
@@ -57,6 +57,7 @@
   EGLImageWrapper();
   ~EGLImageWrapper();
   EGLImageBuffer* wrap(const void *pvt_handle);
+  void Deinit();
 };
 
 #endif  // __TONEMAPPER_EGLIMAGEWRAPPER_H__