emulator opengl: context version param

add version parameter when creating new context

Change-Id: I3e36796dd4e582b5deda0da2aaf764ceba92a1d1
diff --git a/tools/emulator/opengl/tests/gles_android_wrapper/ThreadInfo.h b/tools/emulator/opengl/tests/gles_android_wrapper/ThreadInfo.h
index f980195..f748a39 100644
--- a/tools/emulator/opengl/tests/gles_android_wrapper/ThreadInfo.h
+++ b/tools/emulator/opengl/tests/gles_android_wrapper/ThreadInfo.h
@@ -21,9 +21,10 @@
 
 struct EGLWrapperContext
 {
-    EGLWrapperContext(EGLContext p_aglContext) {
+    EGLWrapperContext(EGLContext p_aglContext, int _version) {
         aglContext = p_aglContext;
         clientState = NULL;
+        version = _version;
     }
 
     ~EGLWrapperContext() {
@@ -32,6 +33,7 @@
 
     EGLContext aglContext;
     GLClientState *clientState;
+    int version;
 };
 
 struct EGLThreadInfo
diff --git a/tools/emulator/opengl/tests/gles_android_wrapper/egl.cpp b/tools/emulator/opengl/tests/gles_android_wrapper/egl.cpp
index cc6b4f5..a392650 100644
--- a/tools/emulator/opengl/tests/gles_android_wrapper/egl.cpp
+++ b/tools/emulator/opengl/tests/gles_android_wrapper/egl.cpp
@@ -404,14 +404,14 @@
     if (share) share = ((EGLWrapperContext *)share_context)->aglContext;
 
     EGLContext ctx =  getDispatch()->eglCreateContext(dpy, config, share, attrib_list);
-    EGLWrapperContext *wctx = new EGLWrapperContext(ctx);
+    EGLWrapperContext *wctx = new EGLWrapperContext(ctx,1);
     if (ctx != EGL_NO_CONTEXT) {
         ServerConnection *server;
         if (s_needEncode && (server = ServerConnection::s_getServerConnection()) != NULL) {
             wctx->clientState = new GLClientState();
             server->utEnc()->createContext(server->utEnc(), getpid(),
                                            (uint32_t)wctx,
-                                           (uint32_t)(share_context == EGL_NO_CONTEXT ? 0 : share_context));
+                                           (uint32_t)(share_context == EGL_NO_CONTEXT ? 0 : share_context), wctx->version);
         }
     }
     return (EGLContext)wctx;
diff --git a/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.in b/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.in
index 856fed6..0d5942f 100644
--- a/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.in
+++ b/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.in
@@ -1,4 +1,4 @@
-GL_ENTRY(int, createContext, uint32_t pid, uint32_t handle, uint32_t shareCtx)
+GL_ENTRY(int, createContext, uint32_t pid, uint32_t handle, uint32_t shareCtx, int version)
 GL_ENTRY(int, createSurface, uint32_t pid, uint32_t handle)
 GL_ENTRY(int, makeCurrentContext, uint32_t pid, uint32_t drawSurface, uint32_t readSurface, uint32_t ctxHandle)
 GL_ENTRY(void, swapBuffers, uint32_t pid, uint32_t surface)
diff --git a/tools/emulator/opengl/tests/ut_renderer/Renderer.cpp b/tools/emulator/opengl/tests/ut_renderer/Renderer.cpp
index 3228df6..edfdd64 100644
--- a/tools/emulator/opengl/tests/ut_renderer/Renderer.cpp
+++ b/tools/emulator/opengl/tests/ut_renderer/Renderer.cpp
@@ -88,7 +88,7 @@
     return 0;
 }
 
-int Renderer::createContext(RenderingThread *thread, const ClientHandle &handle, ClientHandle shareCtx)
+int Renderer::createContext(RenderingThread *thread, const ClientHandle &handle, ClientHandle shareCtx, int version)
 {
     android::Mutex::Autolock(this->m_mutex);
 
@@ -104,7 +104,7 @@
     RendererContext *ctx =
         RendererContext::create(m_dpy,
                                 RendererSurface::getEglConfig(m_dpy, RendererSurface::CONFIG_DEPTH),
-                                shared);
+                                shared, version);
     if (ctx == NULL) {
         fprintf(stderr, "failed to create context\n");
         return -1;
diff --git a/tools/emulator/opengl/tests/ut_renderer/Renderer.h b/tools/emulator/opengl/tests/ut_renderer/Renderer.h
index 49be147..cdf10b6 100644
--- a/tools/emulator/opengl/tests/ut_renderer/Renderer.h
+++ b/tools/emulator/opengl/tests/ut_renderer/Renderer.h
@@ -41,7 +41,7 @@
     static Renderer *instance();
     int createSurface(RenderingThread *thread, const ClientHandle & handle);
     int destroySurface(RenderingThread *thread, const ClientHandle &handle);
-    int createContext(RenderingThread *thread, const ClientHandle & ctx, const ClientHandle shareCtx);
+    int createContext(RenderingThread *thread, const ClientHandle & ctx, const ClientHandle shareCtx, int version);
     int destroyContext(RenderingThread *thread,const ClientHandle & ctx);
     int makeCurrent(RenderingThread *thread,
                     const ClientHandle & drawSurface, const ClientHandle & readSurface, const ClientHandle & ctx);
diff --git a/tools/emulator/opengl/tests/ut_renderer/RendererContext.cpp b/tools/emulator/opengl/tests/ut_renderer/RendererContext.cpp
index 271494d..26f2e35 100644
--- a/tools/emulator/opengl/tests/ut_renderer/RendererContext.cpp
+++ b/tools/emulator/opengl/tests/ut_renderer/RendererContext.cpp
@@ -17,14 +17,18 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-RendererContext * RendererContext::create(EGLDisplay dpy, EGLConfig config, RendererContext *shareCtx)
+RendererContext * RendererContext::create(EGLDisplay dpy, EGLConfig config, RendererContext *shareCtx, int version)
 {
     EGLContext ctx;
     EGLContext shared = shareCtx == NULL ? EGL_NO_CONTEXT : shareCtx->eglContext();
-    ctx = eglCreateContext(dpy, config, shared, NULL);
+
+    EGLint context_attributes[] = { EGL_CONTEXT_CLIENT_VERSION, 1, EGL_NONE };
+    context_attributes[1] = version;
+
+    ctx = eglCreateContext(dpy, config, shared, context_attributes);
     if (eglGetError() != EGL_SUCCESS) return NULL;
 
-    return new RendererContext(dpy, ctx);
+    return new RendererContext(dpy, ctx, version);
 }
 
 int RendererContext::destroy()
diff --git a/tools/emulator/opengl/tests/ut_renderer/RendererContext.h b/tools/emulator/opengl/tests/ut_renderer/RendererContext.h
index c0fd6dc..6daf918 100644
--- a/tools/emulator/opengl/tests/ut_renderer/RendererContext.h
+++ b/tools/emulator/opengl/tests/ut_renderer/RendererContext.h
@@ -38,7 +38,7 @@
 
 class RendererContext : public RendererObject {
 public:
-    static RendererContext *create(EGLDisplay dpy, EGLConfig config, RendererContext *shareCtx);
+    static RendererContext *create(EGLDisplay dpy, EGLConfig config, RendererContext *shareCtx, int version);
     EGLContext eglContext() { return m_ctx; }
     int destroy();
     GLDecoderContextData & decoderContextData() { return m_contextData; }
@@ -99,10 +99,12 @@
     EGLDisplay m_dpy;
     EGLContext m_ctx;
     GLDecoderContextData m_contextData;
+    int m_version;
 
-    RendererContext(EGLDisplay dpy, EGLContext ctx) :
+    RendererContext(EGLDisplay dpy, EGLContext ctx, int version) :
         m_dpy(dpy),
-        m_ctx(ctx)
+        m_ctx(ctx),
+        m_version(version)
     {
 #ifdef PVR_WAR
         m_activeTexture = 0;
diff --git a/tools/emulator/opengl/tests/ut_renderer/RenderingThread.cpp b/tools/emulator/opengl/tests/ut_renderer/RenderingThread.cpp
index a7bd939..cf1d070 100644
--- a/tools/emulator/opengl/tests/ut_renderer/RenderingThread.cpp
+++ b/tools/emulator/opengl/tests/ut_renderer/RenderingThread.cpp
@@ -210,10 +210,11 @@
 #endif
 
 
-int RenderingThread::s_createContext(uint32_t pid, uint32_t handle, uint32_t shareCtx)
+int RenderingThread::s_createContext(uint32_t pid, uint32_t handle, uint32_t shareCtx, int version)
 {
     return Renderer::instance()->createContext(m_tls, Renderer::ClientHandle(pid, handle),
-                                               Renderer::ClientHandle(pid, shareCtx));
+                                               Renderer::ClientHandle(pid, shareCtx),
+                                               version);
 
 }
 
diff --git a/tools/emulator/opengl/tests/ut_renderer/RenderingThread.h b/tools/emulator/opengl/tests/ut_renderer/RenderingThread.h
index bbc4dd3..19b3060 100644
--- a/tools/emulator/opengl/tests/ut_renderer/RenderingThread.h
+++ b/tools/emulator/opengl/tests/ut_renderer/RenderingThread.h
@@ -62,7 +62,7 @@
     static void * s_thread(void *data);
     static __thread RenderingThread *m_tls;
 
-    static int s_createContext(uint32_t pid, uint32_t handle, uint32_t shareCtx);
+    static int s_createContext(uint32_t pid, uint32_t handle, uint32_t shareCtx, int version);
     static int s_createSurface(uint32_t pid, uint32_t handle);
     static int s_destroySurface(uint32_t pid, uint32_t handle);
     static int s_destroyContext(uint32_t pid, uint32_t handle);