diff --git a/modules/egl/teglColorClearCase.cpp b/modules/egl/teglColorClearCase.cpp
index 6d6e73b..db38ad0 100644
--- a/modules/egl/teglColorClearCase.cpp
+++ b/modules/egl/teglColorClearCase.cpp
@@ -120,6 +120,19 @@
 	}
 }
 
+static void finish (EGLint api, const ApiFunctions& func)
+{
+	switch (api)
+	{
+		case EGL_OPENGL_ES_BIT:			gles1::finish();		break;
+		case EGL_OPENGL_ES2_BIT:		gles2::finish(func.gl);	break;
+		case EGL_OPENGL_ES3_BIT_KHR:	gles2::finish(func.gl);	break;
+		case EGL_OPENVG_BIT:			vg::finish();			break;
+		default:
+			DE_ASSERT(DE_FALSE);
+	}
+}
+
 static void readPixels (EGLint api, const ApiFunctions& func, tcu::Surface& dst)
 {
 	switch (api)
@@ -185,6 +198,7 @@
 		EGLU_CHECK_MSG(egl, "eglMakeCurrent");
 
 		renderClear(api, funcs, clear);
+		finish(api, funcs);
 		clears.push_back(clear);
 	}
 
@@ -206,6 +220,8 @@
 				renderClear(api, funcs, clear);
 				clears.push_back(clear);
 			}
+
+			finish(api, funcs);
 		}
 	}
 
@@ -286,6 +302,7 @@
 			for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(packetIter->clears); ndx++)
 				renderClear(m_api, m_funcs, packetIter->clears[ndx]);
 
+			finish(m_api, m_funcs);
 			// Release context.
 			m_egl.makeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
 
diff --git a/modules/egl/teglGLES1RenderUtil.cpp b/modules/egl/teglGLES1RenderUtil.cpp
index 5066da2..7c5d1f6 100644
--- a/modules/egl/teglGLES1RenderUtil.cpp
+++ b/modules/egl/teglGLES1RenderUtil.cpp
@@ -53,6 +53,11 @@
 	glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, dst.getAccess().getDataPtr());
 }
 
+void finish (void)
+{
+	glFinish();
+}
+
 #else // DEQP_SUPPORT_GLES1
 
 void clear (int x, int y, int width, int height, const tcu::Vec4& color)
@@ -69,6 +74,11 @@
 	TCU_THROW(NotSupportedError, "OpenGL ES 1.x is not supported");
 }
 
+void finish (void)
+{
+	TCU_THROW(NotSupportedError, "OpenGL ES 1.x is not supported");
+}
+
 #endif // DEQP_SUPPORT_GLES1
 
 } // gles1
diff --git a/modules/egl/teglGLES1RenderUtil.hpp b/modules/egl/teglGLES1RenderUtil.hpp
index 3254331..2cd06ab 100644
--- a/modules/egl/teglGLES1RenderUtil.hpp
+++ b/modules/egl/teglGLES1RenderUtil.hpp
@@ -36,6 +36,7 @@
 
 void	clear		(int x, int y, int width, int height, const tcu::Vec4& color);
 void	readPixels	(tcu::Surface& dst, int x, int y, int width, int height);
+void	finish		(void);
 
 } // gles1
 } // egl
diff --git a/modules/egl/teglGLES2RenderUtil.cpp b/modules/egl/teglGLES2RenderUtil.cpp
index 9246cad..627ff09 100644
--- a/modules/egl/teglGLES2RenderUtil.cpp
+++ b/modules/egl/teglGLES2RenderUtil.cpp
@@ -47,6 +47,11 @@
 	gl.readPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, dst.getAccess().getDataPtr());
 }
 
+void finish (const glw::Functions& gl)
+{
+	gl.finish();
+}
+
 } // gles2
 } // egl
 } // deqp
diff --git a/modules/egl/teglGLES2RenderUtil.hpp b/modules/egl/teglGLES2RenderUtil.hpp
index 0ec420c..7c91f3f 100644
--- a/modules/egl/teglGLES2RenderUtil.hpp
+++ b/modules/egl/teglGLES2RenderUtil.hpp
@@ -41,6 +41,7 @@
 
 void	clear		(const glw::Functions& gl, int x, int y, int width, int height, const tcu::Vec4& color);
 void	readPixels	(const glw::Functions& gl, tcu::Surface& dst, int x, int y, int width, int height);
+void	finish		(const glw::Functions& gl);
 
 } // gles2
 } // egl
diff --git a/modules/egl/teglRenderTests.cpp b/modules/egl/teglRenderTests.cpp
index 81a32d7..dfc61b6 100644
--- a/modules/egl/teglRenderTests.cpp
+++ b/modules/egl/teglRenderTests.cpp
@@ -637,6 +637,20 @@
 	}
 }
 
+static void finish (const glw::Functions& gl, EGLint api)
+{
+	switch (api)
+	{
+		case EGL_OPENGL_ES2_BIT:
+		case EGL_OPENGL_ES3_BIT_KHR:
+			gl.finish();
+			break;
+
+		default:
+			throw tcu::NotSupportedError("Unsupported API");
+	}
+}
+
 tcu::PixelFormat getPixelFormat (const Library& egl, EGLDisplay display, EGLConfig config)
 {
 	tcu::PixelFormat fmt;
@@ -735,6 +749,7 @@
 		EGLU_CHECK_CALL(egl, makeCurrent(display, surface, surface, context));
 
 		clear(m_gl, api, CLEAR_COLOR, CLEAR_DEPTH, CLEAR_STENCIL);
+		finish(m_gl, api);
 	}
 
 	// Render.
@@ -752,6 +767,8 @@
 				const DrawPrimitiveOp& drawOp = drawOps[iterNdx*numContexts*drawsPerCtx + ctxNdx*drawsPerCtx + drawNdx];
 				draw(m_gl, api, *programs[ctxNdx], drawOp);
 			}
+
+			finish(m_gl, api);
 		}
 	}
 
@@ -843,6 +860,8 @@
 			for (int ndx = 0; ndx < packetIter->numOps; ndx++)
 				draw(m_gl, m_api, m_program, packetIter->drawOps[ndx]);
 
+			finish(m_gl, m_api);
+
 			// Release context.
 			EGLU_CHECK_CALL(m_egl, makeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
 
@@ -961,6 +980,7 @@
 		EGLU_CHECK_CALL(egl, makeCurrent(display, surface, surface, context));
 
 		clear(m_gl, api, CLEAR_COLOR, CLEAR_DEPTH, CLEAR_STENCIL);
+		finish(m_gl, api);
 
 		// Release context
 		EGLU_CHECK_CALL(egl, makeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
diff --git a/modules/egl/teglVGRenderUtil.cpp b/modules/egl/teglVGRenderUtil.cpp
index a171ca7..cb14fb3 100644
--- a/modules/egl/teglVGRenderUtil.cpp
+++ b/modules/egl/teglVGRenderUtil.cpp
@@ -51,6 +51,11 @@
 	vgReadPixels(dst.getAccess().getDataPtr(), width*4, VG_sRGBA_8888, 0, 0, width, height);
 }
 
+void finish (void)
+{
+	vgFinish();
+}
+
 #else // DEQP_SUPPORT_VG
 
 void clear (int x, int y, int width, int height, const tcu::Vec4& color)
@@ -67,6 +72,11 @@
 	TCU_THROW(NotSupportedError, "OpenVG is not supported");
 }
 
+void finish (void)
+{
+	TCU_THROW(NotSupportedError, "OpenVG is not supported");
+}
+
 #endif // DEQP_SUPPORT_VG
 
 } // vg
diff --git a/modules/egl/teglVGRenderUtil.hpp b/modules/egl/teglVGRenderUtil.hpp
index b9a9054..acf953c 100644
--- a/modules/egl/teglVGRenderUtil.hpp
+++ b/modules/egl/teglVGRenderUtil.hpp
@@ -36,6 +36,7 @@
 
 void	clear		(int x, int y, int width, int height, const tcu::Vec4& color);
 void	readPixels	(tcu::Surface& dst, int x, int y, int width, int height);
+void	finish		(void);
 
 } // vg
 } // egl
