fix handling pointers in emugen.

Moved 'isPointer' attribute from variable to type field.
The .types input file now includes new column specifying if a type is a pointer or not
previously emugen declared as pointer only types which included '*' character but did not
process well the case of 'char **' (pointer to pointer).

Fixed the gl.types and ut_rendercontrol.types accordingly.
Few other fixes to gl.attrib and gl.in.

Change-Id: Ifd3591119dfa504703c68556802a40e38fe4940e
diff --git a/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp b/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp
index 9b7949d..dfba6a2 100644
--- a/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp
+++ b/tools/emulator/opengl/host/tools/emugen/ApiGen.cpp
@@ -549,7 +549,6 @@
         std::string retvalType;
         if (!e->retval().isVoid()) {
             retvalType = e->retval().type()->name();
-            if (e->retval().isPointer()) retvalType += "*";
         }
 
         for (int pass = PASS_TmpBuffAlloc; pass < PASS_LAST; pass++) {
@@ -593,15 +592,15 @@
                                         (uint) j, varoffset.c_str());
                             }
                             if (pass == PASS_FunctionCall) {
-                                fprintf(fp, "(%s *)(ptr + %s + 4)",
+                                fprintf(fp, "(%s)(ptr + %s + 4)",
                                         v->type()->name().c_str(), varoffset.c_str());
                             } else if (pass == PASS_DebugPrint) {
-                                fprintf(fp, "(%s *)(ptr + %s + 4), *(unsigned int *)(ptr + %s)",
+                                fprintf(fp, "(%s)(ptr + %s + 4), *(unsigned int *)(ptr + %s)",
                                         v->type()->name().c_str(), varoffset.c_str(),
                                         varoffset.c_str());
                             }
                             varoffset += " + 4 + *(size_t *)(ptr +" + varoffset + ")";
-                        } else { // in pointer;
+                        } else { // out pointer;
                             if (pass == PASS_TmpBuffAlloc) {
                                 fprintf(fp, "\t\t\tsize_t tmpPtr%uSize = (size_t)*(unsigned int *)(ptr + %s);\n",
                                         (uint) j, varoffset.c_str());
@@ -611,16 +610,16 @@
                                     fprintf(fp, "\t\t\ttotalTmpSize += tmpPtr%uSize;\n", (uint)j);
                                 tmpBufOffset[j] = totalTmpBuffOffset;
                                 char tmpPtrName[16];
-                                sprintf(tmpPtrName,"tmpPtr%u", (uint)j);
+                                sprintf(tmpPtrName," + tmpPtr%uSize", (uint)j);
                                 totalTmpBuffOffset += std::string(tmpPtrName);
                                 totalTmpBuffExist = true;
                             } else if (pass == PASS_MemAlloc) {
                                 fprintf(fp, "\t\t\tunsigned char *tmpPtr%u = &tmpBuf[%s];\n",
                                         (uint)j, tmpBufOffset[j].c_str());
                             } else if (pass == PASS_FunctionCall) {
-                                fprintf(fp, "(%s *)(tmpPtr%u)", v->type()->name().c_str(), (uint) j);
+                                fprintf(fp, "(%s)(tmpPtr%u)", v->type()->name().c_str(), (uint) j);
                             } else if (pass == PASS_DebugPrint) {
-                                fprintf(fp, "(%s *)(tmpPtr%u), *(unsigned int *)(ptr + %s)",
+                                fprintf(fp, "(%s)(tmpPtr%u), *(unsigned int *)(ptr + %s)",
                                         v->type()->name().c_str(), (uint) j,
                                         varoffset.c_str());
                             }
diff --git a/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp b/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp
index d9b5499..f766dd9 100644
--- a/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp
+++ b/tools/emulator/opengl/host/tools/emugen/EntryPoint.cpp
@@ -37,7 +37,7 @@
     m_vars.empty();
 }
 
-bool parseTypeField(const std::string & f, std::string *vartype, bool *pointer_type, std::string *varname)
+bool parseTypeField(const std::string & f, std::string *vartype, std::string *varname)
 {
     size_t pos = 0, last;
     bool done = false;
@@ -45,7 +45,6 @@
 
     *vartype = "";
     if (varname != NULL) *varname = "";
-    *pointer_type = false;
 
     enum { ST_TYPE, ST_NAME, ST_END } state = ST_TYPE;
 
@@ -61,13 +60,6 @@
             } else {
                 // must be a type name;
                 *vartype = str;
-                // do we have an astriks at the end of the name?
-                if (vartype->at(vartype->size() - 1) == '*') {
-                    *pointer_type = true;
-                    // remove the astriks
-                    (*vartype)[vartype->size() - 1] = ' ';
-                    *vartype = trim(*vartype);
-                }
                 state = ST_NAME;
                 pos = last;
             }
@@ -76,14 +68,13 @@
             if (str.size() == 0) {
                 done = true;
             } else if (str == "*") {
-                *pointer_type = true;
-                // remove the leading astriks;
+                (*vartype) += "*";
                 pos = last;
             } else if (varname == NULL) {
                 done = true;
             } else {
-                if (str[0] == '*') {
-                    *pointer_type = true;
+                while (str[0] == '*') {
+                    (*vartype) += "*";
                     str[0] = ' ';
                     str = trim(str);
                 }
@@ -116,8 +107,7 @@
     // return type
     field = getNextToken(linestr, pos, &last, ",)");
     std::string retTypeName;
-    bool pointer_type;
-    if (!parseTypeField(field, &retTypeName, &pointer_type, NULL)) {
+    if (!parseTypeField(field, &retTypeName, NULL)) {
         fprintf(stderr, "line: %d: Parsing error in field <%s>\n", lc, field.c_str());
         return false;
     }
@@ -127,7 +117,7 @@
         fprintf(stderr, "UNKNOWN retval: %s\n", linestr.c_str());
     }
 
-    m_retval.init(std::string(""), theType, pointer_type, std::string(""), Var::POINTER_OUT, std::string(""));
+    m_retval.init(std::string(""), theType, std::string(""), Var::POINTER_OUT, std::string(""));
 
     // function name
     m_name = getNextToken(linestr, pos, &last, ",)");
@@ -138,7 +128,7 @@
     while (pos < linestr.size() - 1) {
         field = getNextToken(linestr, pos, &last, ",)");
         std::string vartype, varname;
-        if (!parseTypeField(field, &vartype, &pointer_type, &varname)) {
+        if (!parseTypeField(field, &vartype, &varname)) {
             fprintf(stderr, "line: %d: Parsing error in field <%s>\n", lc, field.c_str());
             return false;
         }
@@ -148,13 +138,13 @@
             fprintf(stderr, "%d: Unknown type: %s\n", lc, vartype.c_str());
         } else {
             if (varname == "" &&
-                !(v->name() == "void" && !pointer_type)) {
+                !(v->name() == "void" && !v->isPointer())) {
                 std::ostringstream oss;
                 oss << "var" << nvars;
                 varname = oss.str();
             }
 
-            m_vars.push_back(Var(varname, v, pointer_type, std::string(""), Var::POINTER_IN, ""));
+            m_vars.push_back(Var(varname, v, std::string(""), Var::POINTER_IN, ""));
         }
         pos = last + 1;
     }
@@ -166,9 +156,8 @@
                        const std::string & name_prefix,
                        const std::string & ctx_param ) const
 {
-    fprintf(fp, "%s%s %s%s%s(",
+    fprintf(fp, "%s %s%s%s(",
             m_retval.type()->name().c_str(),
-            m_retval.isPointer() ? "*" : "",
             name_prefix.c_str(),
             m_name.c_str(),
             name_suffix.c_str());
@@ -178,8 +167,7 @@
     for (size_t i = 0; i < m_vars.size(); i++) {
         if (m_vars[i].isVoid()) continue;
         if (i != 0 || ctx_param != "") fprintf(fp, ", ");
-        fprintf(fp, "%s %s%s", m_vars[i].type()->name().c_str(),
-                m_vars[i].isPointer() ? "*" : "",
+        fprintf(fp, "%s %s", m_vars[i].type()->name().c_str(),
                 m_vars[i].name().c_str());
     }
     fprintf(fp, ")%s", newline? "\n" : "");
diff --git a/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp b/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp
index 709807e..166b21a 100644
--- a/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp
+++ b/tools/emulator/opengl/host/tools/emugen/TypeFactory.cpp
@@ -48,18 +48,18 @@
     return v;
 }
 
-#define ADD_TYPE(name, size, printformat)                                           \
-    g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, &g_var##size,printformat)));
+#define ADD_TYPE(name, size, printformat,ispointer)                                           \
+    g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, &g_var##size , printformat , ispointer)));
 
 void TypeFactory::initBaseTypes()
 {
     g_initialized = true;
-    ADD_TYPE("UNKNOWN", 0, "0x%x");
-    ADD_TYPE("void", 0, "0x%x");
-    ADD_TYPE("char", 8, "%c");
-    ADD_TYPE("int", 32, "%d");
-    ADD_TYPE("float", 32, "%d");
-    ADD_TYPE("short", 16, "%d");
+    ADD_TYPE("UNKNOWN", 0, "0x%x", false);
+    ADD_TYPE("void", 0, "0x%x", false);
+    ADD_TYPE("char", 8, "%c", false);
+    ADD_TYPE("int", 32, "%d", false);
+    ADD_TYPE("float", 32, "%d", false);
+    ADD_TYPE("short", 16, "%d", false);
 }
 
 int TypeFactory::initFromFile(const std::string &filename)
@@ -103,6 +103,25 @@
             return -2;
         }
 
+        pos = last + 1;
+        std::string pointerDef;
+        pointerDef = getNextToken(str, pos, &last, WHITESPACE);
+        if (pointerDef.size() == 0) {
+            fprintf(stderr, "Error: %d : missing ispointer definition\n", lc);
+            return -2;
+        }
+
+        bool isPointer=false;
+        if (std::string("true")==pointerDef)
+          isPointer = true;
+        else if (std::string("false")==pointerDef)
+          isPointer = false;
+        else
+        {
+          fprintf(stderr, "Error: %d : invalid isPointer definition, must be either \"true\" or \"false\"\n", lc);
+          return -2;
+        }
+
         VarConverter *v = getVarConverter(atoi(size.c_str()));
         if (v == NULL) {
             fprintf(stderr, "Error: %d : unknown var width: %d\n", lc, atoi(size.c_str()));
@@ -114,7 +133,7 @@
                     "Warining: %d : type %s is already known, definition in line %d is taken\n",
                     lc, name.c_str(), lc);
         }
-        g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, v ,printString)));
+        g_varMap.insert(std::pair<std::string, VarType>(name, VarType(g_typeId++, name, v ,printString,isPointer)));
     }
     g_initialized = true;
     return 0;
diff --git a/tools/emulator/opengl/host/tools/emugen/Var.h b/tools/emulator/opengl/host/tools/emugen/Var.h
index ef9f7c2..ba74cea 100644
--- a/tools/emulator/opengl/host/tools/emugen/Var.h
+++ b/tools/emulator/opengl/host/tools/emugen/Var.h
@@ -27,7 +27,6 @@
     Var() :
         m_name(""),
         m_type(NULL),
-        m_pointer(false),
         m_lenExpression(""),
         m_pointerDir(POINTER_IN),
         m_nullAllowed(false),
@@ -38,13 +37,11 @@
 
     Var(const std::string & name,
         const VarType * vartype,
-        bool isPointer,
         const std::string & lenExpression,
         PointerDir dir,
         const std::string &packExpression) :
         m_name(name),
         m_type(const_cast<VarType *>(vartype)),
-        m_pointer(isPointer),
         m_lenExpression(lenExpression),
         m_pointerDir(dir),
         m_nullAllowed(false),
@@ -53,11 +50,10 @@
     }
 
     void init(const std::string name, const VarType * vartype,
-              bool isPointer, std::string lenExpression,
+              std::string lenExpression,
               PointerDir dir, std::string packExpression) {
         m_name = name;
         m_type = vartype;
-        m_pointer = isPointer;
         m_lenExpression = lenExpression;
         m_packExpression = packExpression;
         m_pointerDir = dir;
@@ -67,8 +63,8 @@
 
     const std::string & name() const { return m_name; }
     const VarType * type() const { return m_type; }
-    bool isPointer() const { return m_pointer; }
-    bool isVoid() const { return ((m_type->bytes() == 0) && (m_pointer == false)); }
+    bool isPointer() const { return m_type->isPointer(); }
+    bool isVoid() const { return ((m_type->bytes() == 0) && (!m_type->isPointer())); }
     const std::string & lenExpression() const { return m_lenExpression; }
     const std::string & packExpression() const { return(m_packExpression); }
     void setLenExpression(const std::string & lenExpression) { m_lenExpression = lenExpression; }
@@ -77,7 +73,7 @@
     PointerDir pointerDir() { return m_pointerDir; }
     void setNullAllowed(bool state) { m_nullAllowed = state; }
     bool nullAllowed() const { return m_nullAllowed; }
-    void printType(FILE *fp) { fprintf(fp, "%s%s", m_type->name().c_str(), m_pointer ? "*" : ""); }
+    void printType(FILE *fp) { fprintf(fp, "%s", m_type->name().c_str()); }
     void printTypeName(FILE *fp) { printType(fp); fprintf(fp, " %s", m_name.c_str()); }
 
 private:
diff --git a/tools/emulator/opengl/host/tools/emugen/VarType.h b/tools/emulator/opengl/host/tools/emugen/VarType.h
index a0718bb..41bb645 100644
--- a/tools/emulator/opengl/host/tools/emugen/VarType.h
+++ b/tools/emulator/opengl/host/tools/emugen/VarType.h
@@ -50,12 +50,12 @@
 class VarType {
 public:
     VarType() :
-        m_id(0), m_name("default_constructed"), m_converter(NULL), m_printFomrat("0x%x")
+        m_id(0), m_name("default_constructed"), m_converter(NULL), m_printFomrat("0x%x"), m_isPointer(false)
     {
     }
 
-    VarType(size_t id, const std::string & name, const VarConverter * converter, const std::string & printFormat ) :
-        m_id(id), m_name(name), m_converter(const_cast<VarConverter *>(converter)), m_printFomrat(printFormat)
+    VarType(size_t id, const std::string & name, const VarConverter * converter, const std::string & printFormat , const bool isPointer) :
+        m_id(id), m_name(name), m_converter(const_cast<VarConverter *>(converter)), m_printFomrat(printFormat), m_isPointer(isPointer)
     {
     }
 
@@ -65,12 +65,14 @@
     const std::string & name() const { return m_name; }
     const std::string & printFormat() const { return m_printFomrat; }
     size_t bytes() const { return m_converter->bytes(); }
+    bool isPointer() const { return m_isPointer; }
     size_t id() const { return m_id; }
 private:
     size_t m_id;
     std::string m_name;
     VarConverter * m_converter;
     std::string m_printFomrat;
+    bool m_isPointer;
 };
 
 #endif
diff --git a/tools/emulator/opengl/system/GLESv1_enc/gl.attrib b/tools/emulator/opengl/system/GLESv1_enc/gl.attrib
index 6245dc5..9f776a9 100644
--- a/tools/emulator/opengl/system/GLESv1_enc/gl.attrib
+++ b/tools/emulator/opengl/system/GLESv1_enc/gl.attrib
@@ -4,6 +4,7 @@
 	
 #void glClipPlanef(GLenum plane, GLfloat *equation)
 glClipPlanef
+  dir equation in
 	len equation (4 * sizeof(float))
 
 #void glFogfv(GLenum pname, GLfloat *params)
@@ -73,11 +74,13 @@
 
 #void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)
 glBufferSubData
+	dir data in
 	len data size
 
-#void glClipPlanex(GLenum plane, GLfixed *equation)
+#void glClipPlanex(GLenum plane, GLfixed *eqn)
 glClipPlanex
-	len equation (4 * sizeof(GLfixed))
+	dir eqn in
+	len eqn (4 * sizeof(GLfixed))
 
 #void glColorPointer(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
 #we treat the pointer as offset to a VBO
@@ -120,6 +123,7 @@
 #void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
 glGetBufferParameteriv
 	len params (sizeof(GLint))
+	dir params out
 
 #void glGenBuffers(GLsizei n, GLuint *buffers)
 glGenBuffers
@@ -133,6 +137,7 @@
 
 #void glGetFixedv(GLenum pname, GLfixed *params)
 glGetFixedv
+	dir params out
 	len params (glUtilsParamSize(pname) * sizeof(GLfixed))
 
 #void glGetIntegerv(GLenum pname, GLint *params)
@@ -156,16 +161,17 @@
 
 #GLubyte* glGetString(GLenum name)
 glGetString
+  flag unsupported
 
 #void glGetTexEnviv(GLenum env, GLenum pname, GLint *params)
 glGetTexEnviv
-#FIXME
-	len params (4)
+	dir params out
+	len params (glUtilsParamSize(pname) * sizeof(GLint))
 
 #void glGetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
 glGetTexEnvxv
-#FIXME
-	len params (4)
+	dir params out
+	len params (glUtilsParamSize(pname) * sizeof(GLfixed))
 
 #void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
 glGetTexParameteriv
@@ -227,7 +233,8 @@
 
 #void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid *pixels)
 glTexImage2D
-	len pixels pixelDataSize(self, width, height, format, type, 1)
+	dir pixels in
+	len pixels (pixels == NULL ? 0 : pixelDataSize(self, width, height, format, type, 1))
 
 #void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
 glTexParameteriv
@@ -239,13 +246,11 @@
 
 #void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
 glTexSubImage2D
-#FIXME: this is bad
 	len pixels pixelDataSize(self, width, height, format, type, 1)
 
 #void glVertexPointer(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
 # we treat the pointer as an offset to a VBO
 glVertexPointer
-	len pointer (sizeof(unsigned int))
 	flag unsupported
 
 #void glPointSizePointerOES(GLenum type, GLsizei stride, GLvoid *pointer)
@@ -253,12 +258,10 @@
 	len pointer (sizeof(unsigned int))
 	flag unsupported
 
-#void glGetClipPlanef(...)
+#void glGetClipPlanef(GLenum pname, GLfloat * eqn)
 glGetClipPlanef
-	flag unsupported
-#void glGetClipPlanex(...)
-glGetClipPlanex
-	flag unsupported
+	dir eqn out
+	len eqn (4 * sizeof(GLfloat))
 
 #void glVertexPointerData(GLint size, GLenum type, GLsizei stride, void *data, GLuint datalen)
 glVertexPointerData
diff --git a/tools/emulator/opengl/system/GLESv1_enc/gl.in b/tools/emulator/opengl/system/GLESv1_enc/gl.in
index 10187b0..a1186d4 100644
--- a/tools/emulator/opengl/system/GLESv1_enc/gl.in
+++ b/tools/emulator/opengl/system/GLESv1_enc/gl.in
@@ -7,7 +7,7 @@
 GL_ENTRY(void, glFogf, GLenum pname, GLfloat param)
 GL_ENTRY(void, glFogfv, GLenum pname, const GLfloat *params)
 GL_ENTRY(void, glFrustumf, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
-GL_ENTRY(void, glGetClipPlanef, GLenum pname, GLfloat eqn[4])
+GL_ENTRY(void, glGetClipPlanef, GLenum pname, GLfloat* eqn)
 GL_ENTRY(void, glGetFloatv, GLenum pname, GLfloat *params)
 GL_ENTRY(void, glGetLightfv, GLenum light, GLenum pname, GLfloat *params)
 GL_ENTRY(void, glGetMaterialfv, GLenum face, GLenum pname, GLfloat *params)
@@ -48,7 +48,6 @@
 GL_ENTRY(void, glClearDepthx, GLclampx depth)
 GL_ENTRY(void, glClearStencil, GLint s)
 GL_ENTRY(void, glClientActiveTexture, GLenum texture)
-GL_ENTRY(void, glClipPlanex, GLenum plane, const GLfixed *equation)
 GL_ENTRY(void, glColor4ub, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
 GL_ENTRY(void, glColor4x, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
 GL_ENTRY(void, glColorMask, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
@@ -77,7 +76,7 @@
 GL_ENTRY(void, glFrustumx, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
 GL_ENTRY(void, glGetBooleanv, GLenum pname, GLboolean *params)
 GL_ENTRY(void, glGetBufferParameteriv, GLenum target, GLenum pname, GLint *params)
-GL_ENTRY(void, glGetClipPlanex, GLenum pname, GLfixed eqn[4])
+GL_ENTRY(void, glClipPlanex, GLenum pname, GLfixed * eqn)
 GL_ENTRY(void, glGenBuffers, GLsizei n, GLuint *buffers)
 GL_ENTRY(void, glGenTextures, GLsizei n, GLuint *textures)
 GL_ENTRY(GLenum, glGetError, void)
@@ -144,15 +143,6 @@
 GL_ENTRY(void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height)
 GL_ENTRY(void, glPointSizePointerOES, GLenum type, GLsizei stride, const GLvoid *pointer)
 
-GL_ENTRY(void, glDrawTexsOES, GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
-GL_ENTRY(void, glDrawTexiOES, GLint x, GLint y, GLint z, GLint width, GLint height)
-GL_ENTRY(void, glDrawTexxOES, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
-GL_ENTRY(void, glDrawTexsvOES, const GLshort *coords)
-GL_ENTRY(void, glDrawTexivOES, const GLint *coords)
-GL_ENTRY(void, glDrawTexxvOES, const GLfixed *coords)
-GL_ENTRY(void, glDrawTexfOES, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
-GL_ENTRY(void, glDrawTexfvOES, const GLfloat *coords)
-
 GL_ENTRY(void, glVertexPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
 GL_ENTRY(void, glColorPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
 GL_ENTRY(void, glNormalPointerOffset, GLenum type, GLsizei stride,  GLuint offset)
@@ -168,3 +158,11 @@
 GL_ENTRY(void, glDrawElementsOffset, GLenum mode, GLsizei count, GLenum type, GLuint offset)
 GL_ENTRY(void, glDrawElementsData, GLenum mode, GLsizei count, GLenum type, void *data, GLuint datalen)
 GL_ENTRY(void, glGetCompressedTextureFormats, int count, GLint *formats);
+GL_ENTRY(void, glDrawTexsOES, GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
+GL_ENTRY(void, glDrawTexiOES, GLint x, GLint y, GLint z, GLint width, GLint height)
+GL_ENTRY(void, glDrawTexxOES, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
+GL_ENTRY(void, glDrawTexsvOES, const GLshort *coords)
+GL_ENTRY(void, glDrawTexivOES, const GLint *coords)
+GL_ENTRY(void, glDrawTexxvOES, const GLfixed *coords)
+GL_ENTRY(void, glDrawTexfOES, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
+GL_ENTRY(void, glDrawTexfvOES, const GLfloat *coords)
\ No newline at end of file
diff --git a/tools/emulator/opengl/system/GLESv1_enc/gl.types b/tools/emulator/opengl/system/GLESv1_enc/gl.types
index 89a95c1..b269c01 100644
--- a/tools/emulator/opengl/system/GLESv1_enc/gl.types
+++ b/tools/emulator/opengl/system/GLESv1_enc/gl.types
@@ -1,17 +1,33 @@
-GLbitfield 32 0x%08x
-GLboolean 8 %d
-GLclampf 32 %f
-GLclampx 32 0x%08x
-GLeglImageOES 32 0x%08x
-GLenum 32 0x%08x
-GLfixed 32 0x%08x
-GLfloat 32 %f
-GLint 32 %d
-GLintptr 32 0x%08x
-GLshort 16 %d
-GLsizei 32 %d
-GLsizeiptr 32 0x%08x
-GLubyte 8 0x%02x
-GLuint 32 %u
-GLvoid 0 %x
-GLchar 8 %d
+GLbitfield 32 0x%08x false
+GLboolean 8 %d false
+GLclampf 32 %f false
+GLclampx 32 0x%08x false
+GLeglImageOES 32 %p false
+GLenum 32 0x%08x false
+GLfixed 32 0x%08x false
+GLfloat 32 %f false
+GLint 32 %d false
+GLintptr 32 %p false
+GLshort 16 %d false
+GLsizei 32 %d false
+GLsizeiptr 32 %p false
+GLubyte 8 0x%02x false
+GLuint 32 %u false
+GLvoid 0 %x false
+GLchar 8 %d false
+GLenum* 32 0x%08x true
+GLboolean* 32 0x%08x true
+GLclampf* 32 0x%08x true
+GLclampx* 32 0x%08x true
+GLeglImageOES* 32 0x%08x true
+GLfixed* 32 0x%08x true
+GLfloat* 32 0x%08x true
+GLint* 32 0x%08x true
+GLshort* 32 0x%08x true
+GLsizei* 32 0x%08x true
+GLubyte* 32 0x%08x true
+GLuint* 32 0x%08x true
+GLvoid* 32 0x%08x true
+GLchar* 32 0x%08x true
+GLvoid** 32 0x%08x true
+void* 32 0x%08x true
diff --git a/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types b/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types
index eb4dd1b..9d945ab 100644
--- a/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types
+++ b/tools/emulator/opengl/tests/ut_rendercontrol_enc/ut_rendercontrol.types
@@ -1,2 +1,2 @@
-uint32_t 32 0x%08x
+uint32_t 32 0x%08x false