Provide a pass-through mechanic for the new ES3 Query methods to use the old ES2 query extension.

We will need to add the new transform feedback queries in a later patch.

TRAC #23347

Signed-off-by: Geoff Lang
Signed-off-by: Shannon Woods
Authored-by: Jamie Madill
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 3fd5b59..e872131 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -8637,8 +8637,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glGenQueries
-            UNIMPLEMENTED();
+            glGenQueriesEXT(n, ids);
         }
     }
     catch(std::bad_alloc&)
@@ -8662,8 +8661,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glDeleteQueries
-            UNIMPLEMENTED();
+            glDeleteQueriesEXT(n, ids);
         }
     }
     catch(std::bad_alloc&)
@@ -8687,8 +8685,8 @@
                 return gl::error(GL_INVALID_OPERATION, GL_FALSE);
             }
 
-            // glIsQuery
-            UNIMPLEMENTED();
+            // TODO: XFB queries
+            return glIsQueryEXT(id);
         }
     }
     catch(std::bad_alloc&)
@@ -8714,8 +8712,30 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glBeginQuery
-            UNIMPLEMENTED();
+            switch (target)
+            {
+              case GL_ANY_SAMPLES_PASSED:
+              case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+              case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+                  break;
+              default:
+                  return gl::error(GL_INVALID_ENUM);
+            }
+
+            if (id == 0)
+            {
+                return gl::error(GL_INVALID_OPERATION);
+            }
+
+            if (target == GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN)
+            {
+                // TODO: XFB queries
+                UNIMPLEMENTED();
+            }
+            else
+            {
+                context->beginQuery(target, id);
+            }
         }
     }
     catch(std::bad_alloc&)
@@ -8739,8 +8759,15 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glEndQuery
-            UNIMPLEMENTED();
+            if (target == GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN)
+            {
+                // TODO: XFB queries
+                UNIMPLEMENTED();
+            }
+            else
+            {
+                glEndQueryEXT(target);
+            }
         }
     }
     catch(std::bad_alloc&)
@@ -8764,8 +8791,15 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glGetQueryiv
-            UNIMPLEMENTED();
+            if (target == GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN)
+            {
+                // TODO: XFB queries
+                UNIMPLEMENTED();
+            }
+            else
+            {
+                glGetQueryivEXT(target, pname, params);
+            }
         }
     }
     catch(std::bad_alloc&)
@@ -8789,8 +8823,8 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glGetQueryObjectuiv
-            UNIMPLEMENTED();
+            // TODO: XFB queries
+            glGetQueryObjectuivEXT(id, pname, params);
         }
     }
     catch(std::bad_alloc&)