Use packed enums for QueryType.

BUG=angleproject:2169

Change-Id: I129a9d8e295859daa071a298dab9fe1895315cc0
Reviewed-on: https://chromium-review.googlesource.com/957318
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/scripts/entry_point_packed_gl_enums.json b/scripts/entry_point_packed_gl_enums.json
index bcfb84d..39b9001 100644
--- a/scripts/entry_point_packed_gl_enums.json
+++ b/scripts/entry_point_packed_gl_enums.json
@@ -5,6 +5,12 @@
     "glAlphaFuncx": {
         "func": "AlphaTestFunc"
     },
+    "glBeginQuery": {
+        "target": "QueryType"
+    },
+    "glBeginQueryEXT": {
+        "target": "QueryType"
+    },
     "glBindBuffer": {
         "target": "BufferBinding"
     },
@@ -85,6 +91,12 @@
     "glEnableClientState": {
         "array": "ClientVertexArrayType"
     },
+    "glEndQuery": {
+        "target": "QueryType"
+    },
+    "glEndQueryEXT": {
+        "target": "QueryType"
+    },
     "glFlushMappedBufferRange": {
         "target": "BufferBinding"
     },
@@ -124,6 +136,15 @@
     "glGetBufferPointervRobustANGLE": {
         "target": "BufferBinding"
     },
+    "glGetQueryiv": {
+        "target": "QueryType"
+    },
+    "glGetQueryivEXT": {
+        "target": "QueryType"
+    },
+    "glGetQueryivRobustANGLE": {
+        "target": "QueryType"
+    },
     "glGetTexLevelParameterfv": {
         "target": "TextureTarget"
     },
@@ -172,6 +193,9 @@
     "glMatrixMode": {
         "mode": "MatrixType"
     },
+    "glQueryCounterEXT": {
+        "target": "QueryType"
+    },
     "glTexImage2D": {
         "target": "TextureTarget"
     },
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index d99c09e..132271c 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -1069,7 +1069,7 @@
     mGLState.setProgramPipelineBinding(this, pipeline);
 }
 
-void Context::beginQuery(GLenum target, GLuint query)
+void Context::beginQuery(QueryType target, GLuint query)
 {
     Query *queryObject = getQuery(query, true, target);
     ASSERT(queryObject);
@@ -1081,7 +1081,7 @@
     mGLState.setActiveQuery(this, target, queryObject);
 }
 
-void Context::endQuery(GLenum target)
+void Context::endQuery(QueryType target)
 {
     Query *queryObject = mGLState.getActiveQuery(target);
     ASSERT(queryObject);
@@ -1092,9 +1092,9 @@
     mGLState.setActiveQuery(this, target, nullptr);
 }
 
-void Context::queryCounter(GLuint id, GLenum target)
+void Context::queryCounter(GLuint id, QueryType target)
 {
-    ASSERT(target == GL_TIMESTAMP_EXT);
+    ASSERT(target == QueryType::Timestamp);
 
     Query *queryObject = getQuery(id, true, target);
     ASSERT(queryObject);
@@ -1102,7 +1102,7 @@
     handleError(queryObject->queryCounter());
 }
 
-void Context::getQueryiv(GLenum target, GLenum pname, GLint *params)
+void Context::getQueryiv(QueryType target, GLenum pname, GLint *params)
 {
     switch (pname)
     {
@@ -1112,10 +1112,10 @@
         case GL_QUERY_COUNTER_BITS_EXT:
             switch (target)
             {
-                case GL_TIME_ELAPSED_EXT:
+                case QueryType::TimeElapsed:
                     params[0] = getExtensions().queryCounterBitsTimeElapsed;
                     break;
-                case GL_TIMESTAMP_EXT:
+                case QueryType::Timestamp:
                     params[0] = getExtensions().queryCounterBitsTimestamp;
                     break;
                 default:
@@ -1130,7 +1130,7 @@
     }
 }
 
-void Context::getQueryivRobust(GLenum target,
+void Context::getQueryivRobust(QueryType target,
                                GLenum pname,
                                GLsizei bufSize,
                                GLsizei *length,
@@ -1205,7 +1205,7 @@
     return mFenceNVMap.query(handle);
 }
 
-Query *Context::getQuery(GLuint handle, bool create, GLenum type)
+Query *Context::getQuery(GLuint handle, bool create, QueryType type)
 {
     if (!mQueryMap.contains(handle))
     {
@@ -1215,6 +1215,7 @@
     Query *query = mQueryMap.query(handle);
     if (!query && create)
     {
+        ASSERT(type != QueryType::InvalidEnum);
         query = new Query(mImplementation->createQuery(type), handle);
         query->addRef();
         mQueryMap.assign(handle, query);
@@ -5690,7 +5691,7 @@
 
 GLboolean Context::isQuery(GLuint id)
 {
-    return (getQuery(id, false, GL_NONE) != nullptr) ? GL_TRUE : GL_FALSE;
+    return (getQuery(id, false, QueryType::InvalidEnum) != nullptr) ? GL_TRUE : GL_FALSE;
 }
 
 void Context::uniformMatrix2x3fv(GLint location,
diff --git a/src/libANGLE/Context.h b/src/libANGLE/Context.h
index 8ebbc12..5d1343f 100644
--- a/src/libANGLE/Context.h
+++ b/src/libANGLE/Context.h
@@ -151,16 +151,15 @@
     void bindTransformFeedback(GLenum target, GLuint transformFeedbackHandle);
     void bindProgramPipeline(GLuint pipelineHandle);
 
-    void beginQuery(GLenum target, GLuint query);
-    void endQuery(GLenum target);
-    void queryCounter(GLuint id, GLenum target);
-    void getQueryiv(GLenum target, GLenum pname, GLint *params);
-    void getQueryivRobust(GLenum target,
+    void beginQuery(QueryType target, GLuint query);
+    void endQuery(QueryType target);
+    void queryCounter(GLuint id, QueryType target);
+    void getQueryiv(QueryType target, GLenum pname, GLint *params);
+    void getQueryivRobust(QueryType target,
                           GLenum pname,
                           GLsizei bufSize,
                           GLsizei *length,
                           GLint *params);
-
     void getQueryObjectiv(GLuint id, GLenum pname, GLint *params);
     void getQueryObjectivRobust(GLuint id,
                                 GLenum pname,
@@ -352,7 +351,7 @@
     Renderbuffer *getRenderbuffer(GLuint handle) const;
     VertexArray *getVertexArray(GLuint handle) const;
     Sampler *getSampler(GLuint handle) const;
-    Query *getQuery(GLuint handle, bool create, GLenum type);
+    Query *getQuery(GLuint handle, bool create, QueryType type);
     Query *getQuery(GLuint handle) const;
     TransformFeedback *getTransformFeedback(GLuint handle) const;
     ProgramPipeline *getProgramPipeline(GLuint handle) const;
diff --git a/src/libANGLE/PackedGLEnums_autogen.cpp b/src/libANGLE/PackedGLEnums_autogen.cpp
index 23af4ab..d514312 100644
--- a/src/libANGLE/PackedGLEnums_autogen.cpp
+++ b/src/libANGLE/PackedGLEnums_autogen.cpp
@@ -444,6 +444,54 @@
 }
 
 template <>
+QueryType FromGLenum<QueryType>(GLenum from)
+{
+    switch (from)
+    {
+        case GL_ANY_SAMPLES_PASSED:
+            return QueryType::AnySamples;
+        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+            return QueryType::AnySamplesConservative;
+        case GL_COMMANDS_COMPLETED_CHROMIUM:
+            return QueryType::CommandsCompleted;
+        case GL_PRIMITIVES_GENERATED_EXT:
+            return QueryType::PrimitivesGenerated;
+        case GL_TIME_ELAPSED_EXT:
+            return QueryType::TimeElapsed;
+        case GL_TIMESTAMP_EXT:
+            return QueryType::Timestamp;
+        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+            return QueryType::TransformFeedbackPrimitivesWritten;
+        default:
+            return QueryType::InvalidEnum;
+    }
+}
+
+GLenum ToGLenum(QueryType from)
+{
+    switch (from)
+    {
+        case QueryType::AnySamples:
+            return GL_ANY_SAMPLES_PASSED;
+        case QueryType::AnySamplesConservative:
+            return GL_ANY_SAMPLES_PASSED_CONSERVATIVE;
+        case QueryType::CommandsCompleted:
+            return GL_COMMANDS_COMPLETED_CHROMIUM;
+        case QueryType::PrimitivesGenerated:
+            return GL_PRIMITIVES_GENERATED_EXT;
+        case QueryType::TimeElapsed:
+            return GL_TIME_ELAPSED_EXT;
+        case QueryType::Timestamp:
+            return GL_TIMESTAMP_EXT;
+        case QueryType::TransformFeedbackPrimitivesWritten:
+            return GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;
+        default:
+            UNREACHABLE();
+            return 0;
+    }
+}
+
+template <>
 ShaderType FromGLenum<ShaderType>(GLenum from)
 {
     switch (from)
diff --git a/src/libANGLE/PackedGLEnums_autogen.h b/src/libANGLE/PackedGLEnums_autogen.h
index 6be0597..8b4c9ef 100644
--- a/src/libANGLE/PackedGLEnums_autogen.h
+++ b/src/libANGLE/PackedGLEnums_autogen.h
@@ -185,6 +185,24 @@
 MatrixType FromGLenum<MatrixType>(GLenum from);
 GLenum ToGLenum(MatrixType from);
 
+enum class QueryType : uint8_t
+{
+    AnySamples                         = 0,
+    AnySamplesConservative             = 1,
+    CommandsCompleted                  = 2,
+    PrimitivesGenerated                = 3,
+    TimeElapsed                        = 4,
+    Timestamp                          = 5,
+    TransformFeedbackPrimitivesWritten = 6,
+
+    InvalidEnum = 7,
+    EnumCount   = 7,
+};
+
+template <>
+QueryType FromGLenum<QueryType>(GLenum from);
+GLenum ToGLenum(QueryType from);
+
 enum class ShaderType : uint8_t
 {
     Vertex   = 0,
diff --git a/src/libANGLE/Query.cpp b/src/libANGLE/Query.cpp
index cd1fb5f..15416ec 100644
--- a/src/libANGLE/Query.cpp
+++ b/src/libANGLE/Query.cpp
@@ -70,7 +70,7 @@
     return mQuery->isResultAvailable(available);
 }
 
-GLenum Query::getType() const
+QueryType Query::getType() const
 {
     return mQuery->getType();
 }
diff --git a/src/libANGLE/Query.h b/src/libANGLE/Query.h
index c307eaa..64a7dcd 100644
--- a/src/libANGLE/Query.h
+++ b/src/libANGLE/Query.h
@@ -11,6 +11,7 @@
 
 #include "libANGLE/Debug.h"
 #include "libANGLE/Error.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/RefCountObject.h"
 
 #include "common/angleutils.h"
@@ -44,7 +45,7 @@
     Error getResult(GLuint64 *params);
     Error isResultAvailable(bool *available);
 
-    GLenum getType() const;
+    QueryType getType() const;
 
     rx::QueryImpl *getImplementation();
     const rx::QueryImpl *getImplementation() const;
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index 163f732..1d3db99 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -26,19 +26,29 @@
 #include "libANGLE/queryutils.h"
 #include "libANGLE/renderer/ContextImpl.h"
 
+namespace gl
+{
+
 namespace
 {
 
-GLenum ActiveQueryType(const GLenum type)
+bool GetAlternativeQueryType(QueryType type, QueryType *alternativeType)
 {
-    return (type == GL_ANY_SAMPLES_PASSED_CONSERVATIVE) ? GL_ANY_SAMPLES_PASSED : type;
+    switch (type)
+    {
+        case QueryType::AnySamples:
+            *alternativeType = QueryType::AnySamplesConservative;
+            return true;
+        case QueryType::AnySamplesConservative:
+            *alternativeType = QueryType::AnySamples;
+            return true;
+        default:
+            return false;
+    }
 }
 
 }  // anonymous namepace
 
-namespace gl
-{
-
 void UpdateBufferBinding(const Context *context,
                          BindingPointer<Buffer> *binding,
                          Buffer *buffer,
@@ -212,12 +222,10 @@
 
     mSamplers.resize(caps.maxCombinedTextureImageUnits);
 
-    mActiveQueries[GL_ANY_SAMPLES_PASSED].set(context, nullptr);
-    mActiveQueries[GL_ANY_SAMPLES_PASSED_CONSERVATIVE].set(context, nullptr);
-    mActiveQueries[GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN].set(context, nullptr);
-    mActiveQueries[GL_TIME_ELAPSED_EXT].set(context, nullptr);
-    mActiveQueries[GL_COMMANDS_COMPLETED_CHROMIUM].set(context, nullptr);
-    mActiveQueries[GL_PRIMITIVES_GENERATED_EXT].set(context, nullptr);
+    for (QueryType type : angle::AllEnums<QueryType>())
+    {
+        mActiveQueries[type].set(context, nullptr);
+    }
 
     mProgram = nullptr;
 
@@ -294,9 +302,9 @@
         mTransformFeedback->onBindingChanged(context, false);
     mTransformFeedback.set(context, nullptr);
 
-    for (State::ActiveQueryMap::iterator i = mActiveQueries.begin(); i != mActiveQueries.end(); i++)
+    for (QueryType type : angle::AllEnums<QueryType>())
     {
-        i->second.set(context, nullptr);
+        mActiveQueries[type].set(context, nullptr);
     }
 
     for (auto &buf : mUniformBuffers)
@@ -1316,15 +1324,19 @@
     mProgramPipeline.set(context, nullptr);
 }
 
-bool State::isQueryActive(const GLenum type) const
+bool State::isQueryActive(QueryType type) const
 {
-    for (auto &iter : mActiveQueries)
+    const Query *query = mActiveQueries[type].get();
+    if (query != nullptr)
     {
-        const Query *query = iter.second.get();
-        if (query != nullptr && ActiveQueryType(query->getType()) == ActiveQueryType(type))
-        {
-            return true;
-        }
+        return true;
+    }
+
+    QueryType alternativeType;
+    if (GetAlternativeQueryType(type, &alternativeType))
+    {
+        query = mActiveQueries[alternativeType].get();
+        return query != nullptr;
     }
 
     return false;
@@ -1332,9 +1344,9 @@
 
 bool State::isQueryActive(Query *query) const
 {
-    for (auto &iter : mActiveQueries)
+    for (auto &queryPointer : mActiveQueries)
     {
-        if (iter.second.get() == query)
+        if (queryPointer.get() == query)
         {
             return true;
         }
@@ -1343,25 +1355,20 @@
     return false;
 }
 
-void State::setActiveQuery(const Context *context, GLenum target, Query *query)
+void State::setActiveQuery(const Context *context, QueryType type, Query *query)
 {
-    mActiveQueries[target].set(context, query);
+    mActiveQueries[type].set(context, query);
 }
 
-GLuint State::getActiveQueryId(GLenum target) const
+GLuint State::getActiveQueryId(QueryType type) const
 {
-    const Query *query = getActiveQuery(target);
+    const Query *query = getActiveQuery(type);
     return (query ? query->id() : 0u);
 }
 
-Query *State::getActiveQuery(GLenum target) const
+Query *State::getActiveQuery(QueryType type) const
 {
-    const auto it = mActiveQueries.find(target);
-
-    // All query types should already exist in the activeQueries map
-    ASSERT(it != mActiveQueries.end());
-
-    return it->second.get();
+    return mActiveQueries[type].get();
 }
 
 void State::setBufferBinding(const Context *context, BufferBinding target, Buffer *buffer)
diff --git a/src/libANGLE/State.h b/src/libANGLE/State.h
index 1ffa2b6..c15483c 100644
--- a/src/libANGLE/State.h
+++ b/src/libANGLE/State.h
@@ -220,11 +220,11 @@
     bool removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback);
 
     // Query binding manipulation
-    bool isQueryActive(const GLenum type) const;
+    bool isQueryActive(QueryType type) const;
     bool isQueryActive(Query *query) const;
-    void setActiveQuery(const Context *context, GLenum target, Query *query);
-    GLuint getActiveQueryId(GLenum target) const;
-    Query *getActiveQuery(GLenum target) const;
+    void setActiveQuery(const Context *context, QueryType type, Query *query);
+    GLuint getActiveQueryId(QueryType type) const;
+    Query *getActiveQuery(QueryType type) const;
 
     // Program Pipeline binding manipulation
     void setProgramPipelineBinding(const Context *context, ProgramPipeline *pipeline);
@@ -524,7 +524,7 @@
     Program *mProgram;
     BindingPointer<ProgramPipeline> mProgramPipeline;
 
-    typedef std::vector<VertexAttribCurrentValueData> VertexAttribVector;
+    using VertexAttribVector = std::vector<VertexAttribCurrentValueData>;
     VertexAttribVector mVertexAttribCurrentValues;  // From glVertexAttrib
     VertexArray *mVertexArray;
     ComponentTypeMask mCurrentValuesTypeMask;
@@ -532,8 +532,8 @@
     // Texture and sampler bindings
     size_t mActiveSampler;  // Active texture unit selector - GL_TEXTURE0
 
-    typedef std::vector<BindingPointer<Texture>> TextureBindingVector;
-    typedef angle::PackedEnumMap<TextureType, TextureBindingVector> TextureBindingMap;
+    using TextureBindingVector = std::vector<BindingPointer<Texture>>;
+    using TextureBindingMap    = angle::PackedEnumMap<TextureType, TextureBindingVector>;
     TextureBindingMap mSamplerTextures;
 
     // Texture Completeness Caching
@@ -556,13 +556,13 @@
     using ActiveTextureMask = angle::BitSet<IMPLEMENTATION_MAX_ACTIVE_TEXTURES>;
     ActiveTextureMask mActiveTexturesMask;
 
-    typedef std::vector<BindingPointer<Sampler>> SamplerBindingVector;
+    using SamplerBindingVector = std::vector<BindingPointer<Sampler>>;
     SamplerBindingVector mSamplers;
 
-    typedef std::vector<ImageUnit> ImageUnitVector;
+    using ImageUnitVector = std::vector<ImageUnit>;
     ImageUnitVector mImageUnits;
 
-    typedef std::map<GLenum, BindingPointer<Query>> ActiveQueryMap;
+    using ActiveQueryMap = angle::PackedEnumMap<QueryType, BindingPointer<Query>>;
     ActiveQueryMap mActiveQueries;
 
     // Stores the currently bound buffer for each binding point. It has an entry for the element
diff --git a/src/libANGLE/packed_gl_enums.json b/src/libANGLE/packed_gl_enums.json
index 53b840e..27143ed 100644
--- a/src/libANGLE/packed_gl_enums.json
+++ b/src/libANGLE/packed_gl_enums.json
@@ -88,6 +88,16 @@
         "Projection" : "GL_PROJECTION",
         "Texture" : "GL_TEXTURE"
     },
+    "QueryType":
+    {
+        "AnySamples": "GL_ANY_SAMPLES_PASSED",
+        "AnySamplesConservative": "GL_ANY_SAMPLES_PASSED_CONSERVATIVE",
+        "CommandsCompleted": "GL_COMMANDS_COMPLETED_CHROMIUM",
+        "PrimitivesGenerated": "GL_PRIMITIVES_GENERATED_EXT",
+        "TimeElapsed": "GL_TIME_ELAPSED_EXT",
+        "Timestamp": "GL_TIMESTAMP_EXT",
+        "TransformFeedbackPrimitivesWritten": "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN"
+    },
     "ShaderType":
     [
         {"name": "Vertex", "gl_name": "GL_VERTEX_SHADER", "value": 0},
diff --git a/src/libANGLE/renderer/GLImplFactory.h b/src/libANGLE/renderer/GLImplFactory.h
index cc1ffe4..c23cb8d 100644
--- a/src/libANGLE/renderer/GLImplFactory.h
+++ b/src/libANGLE/renderer/GLImplFactory.h
@@ -71,7 +71,7 @@
     virtual VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) = 0;
 
     // Query and Fence creation
-    virtual QueryImpl *createQuery(GLenum type) = 0;
+    virtual QueryImpl *createQuery(gl::QueryType type) = 0;
     virtual FenceNVImpl *createFenceNV() = 0;
     virtual SyncImpl *createSync()              = 0;
 
diff --git a/src/libANGLE/renderer/QueryImpl.h b/src/libANGLE/renderer/QueryImpl.h
index d738eb4..9a90bf5 100644
--- a/src/libANGLE/renderer/QueryImpl.h
+++ b/src/libANGLE/renderer/QueryImpl.h
@@ -9,11 +9,10 @@
 #ifndef LIBANGLE_RENDERER_QUERYIMPL_H_
 #define LIBANGLE_RENDERER_QUERYIMPL_H_
 
-#include "libANGLE/Error.h"
 
 #include "common/angleutils.h"
-
-#include <GLES2/gl2.h>
+#include "libANGLE/Error.h"
+#include "libANGLE/PackedEnums.h"
 
 namespace rx
 {
@@ -21,7 +20,7 @@
 class QueryImpl : angle::NonCopyable
 {
   public:
-    explicit QueryImpl(GLenum type) { mType = type; }
+    explicit QueryImpl(gl::QueryType type) { mType = type; }
     virtual ~QueryImpl() { }
 
     virtual gl::Error begin() = 0;
@@ -33,10 +32,10 @@
     virtual gl::Error getResult(GLuint64 *params) = 0;
     virtual gl::Error isResultAvailable(bool *available) = 0;
 
-    GLenum getType() const { return mType;  }
+    gl::QueryType getType() const { return mType; }
 
   private:
-    GLenum mType;
+    gl::QueryType mType;
 };
 
 }
diff --git a/src/libANGLE/renderer/d3d/d3d11/Context11.cpp b/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
index 5598367..0509f38 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
@@ -189,7 +189,7 @@
     return new VertexArray11(data);
 }
 
-QueryImpl *Context11::createQuery(GLenum type)
+QueryImpl *Context11::createQuery(gl::QueryType type)
 {
     return new Query11(mRenderer, type);
 }
diff --git a/src/libANGLE/renderer/d3d/d3d11/Context11.h b/src/libANGLE/renderer/d3d/d3d11/Context11.h
index 2a46625..50829c4 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Context11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/Context11.h
@@ -45,7 +45,7 @@
     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override;
+    QueryImpl *createQuery(gl::QueryType type) override;
     FenceNVImpl *createFenceNV() override;
     SyncImpl *createSync() override;
 
diff --git a/src/libANGLE/renderer/d3d/d3d11/Query11.cpp b/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
index 7175c14..66998d2 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
@@ -17,24 +17,24 @@
 namespace
 {
 
-GLuint64 MergeQueryResults(GLenum type, GLuint64 currentResult, GLuint64 newResult)
+GLuint64 MergeQueryResults(gl::QueryType type, GLuint64 currentResult, GLuint64 newResult)
 {
     switch (type)
     {
-        case GL_ANY_SAMPLES_PASSED:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+        case gl::QueryType::AnySamples:
+        case gl::QueryType::AnySamplesConservative:
             return (currentResult == GL_TRUE || newResult == GL_TRUE) ? GL_TRUE : GL_FALSE;
 
-        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+        case gl::QueryType::TransformFeedbackPrimitivesWritten:
             return currentResult + newResult;
 
-        case GL_TIME_ELAPSED_EXT:
+        case gl::QueryType::TimeElapsed:
             return currentResult + newResult;
 
-        case GL_TIMESTAMP_EXT:
+        case gl::QueryType::Timestamp:
             return newResult;
 
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case gl::QueryType::CommandsCompleted:
             return newResult;
 
         default:
@@ -57,7 +57,7 @@
 {
 }
 
-Query11::Query11(Renderer11 *renderer, GLenum type)
+Query11::Query11(Renderer11 *renderer, gl::QueryType type)
     : QueryImpl(type), mResult(0), mResultSum(0), mRenderer(renderer)
 {
     mActiveQuery = std::unique_ptr<QueryState>(new QueryState());
@@ -83,7 +83,7 @@
 gl::Error Query11::queryCounter()
 {
     // This doesn't do anything for D3D11 as we don't support timestamps
-    ASSERT(getType() == GL_TIMESTAMP_EXT);
+    ASSERT(getType() == gl::QueryType::Timestamp);
     mResultSum = 0;
     mPendingQueries.push_back(std::unique_ptr<QueryState>(new QueryState()));
     return gl::NoError();
@@ -133,10 +133,10 @@
     if (mActiveQuery->query.valid())
     {
         ID3D11DeviceContext *context = mRenderer->getDeviceContext();
-        GLenum queryType             = getType();
+        gl::QueryType type             = getType();
 
         // If we are doing time elapsed query the end timestamp
-        if (queryType == GL_TIME_ELAPSED_EXT)
+        if (type == gl::QueryType::TimeElapsed)
         {
             context->End(mActiveQuery->endTimestamp.get());
         }
@@ -156,8 +156,8 @@
     {
         ANGLE_TRY(flush(false));
 
-        GLenum queryType         = getType();
-        D3D11_QUERY d3dQueryType = gl_d3d11::ConvertQueryType(queryType);
+        gl::QueryType type         = getType();
+        D3D11_QUERY d3dQueryType = gl_d3d11::ConvertQueryType(type);
 
         D3D11_QUERY_DESC queryDesc;
         queryDesc.Query     = d3dQueryType;
@@ -166,7 +166,7 @@
         ANGLE_TRY(mRenderer->allocateResource(queryDesc, &mActiveQuery->query));
 
         // If we are doing time elapsed we also need a query to actually query the timestamp
-        if (queryType == GL_TIME_ELAPSED_EXT)
+        if (type == gl::QueryType::TimeElapsed)
         {
             D3D11_QUERY_DESC desc;
             desc.Query     = D3D11_QUERY_TIMESTAMP;
@@ -184,7 +184,7 @@
         }
 
         // If we are doing time elapsed, query the begin timestamp
-        if (queryType == GL_TIME_ELAPSED_EXT)
+        if (type == gl::QueryType::TimeElapsed)
         {
             context->End(mActiveQuery->beginTimestamp.get());
         }
@@ -222,8 +222,8 @@
         ID3D11DeviceContext *context = mRenderer->getDeviceContext();
         switch (getType())
         {
-            case GL_ANY_SAMPLES_PASSED_EXT:
-            case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+            case gl::QueryType::AnySamples:
+            case gl::QueryType::AnySamplesConservative:
             {
                 ASSERT(queryState->query.valid());
                 UINT64 numPixels = 0;
@@ -243,7 +243,7 @@
             }
             break;
 
-            case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+            case gl::QueryType::TransformFeedbackPrimitivesWritten:
             {
                 ASSERT(queryState->query.valid());
                 D3D11_QUERY_DATA_SO_STATISTICS soStats = {0};
@@ -263,7 +263,7 @@
             }
             break;
 
-            case GL_TIME_ELAPSED_EXT:
+            case gl::QueryType::TimeElapsed:
             {
                 ASSERT(queryState->query.valid());
                 ASSERT(queryState->beginTimestamp.valid());
@@ -326,7 +326,7 @@
             }
             break;
 
-            case GL_TIMESTAMP_EXT:
+            case gl::QueryType::Timestamp:
             {
                 // D3D11 doesn't support GL timestamp queries as D3D timestamps are not guaranteed
                 // to have any sort of continuity outside of a disjoint timestamp query block, which
@@ -337,7 +337,7 @@
             }
             break;
 
-            case GL_COMMANDS_COMPLETED_CHROMIUM:
+            case gl::QueryType::CommandsCompleted:
             {
                 ASSERT(queryState->query.valid());
                 BOOL completed = 0;
diff --git a/src/libANGLE/renderer/d3d/d3d11/Query11.h b/src/libANGLE/renderer/d3d/d3d11/Query11.h
index 724319a..ef23dda 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Query11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/Query11.h
@@ -21,7 +21,7 @@
 class Query11 : public QueryImpl
 {
   public:
-    Query11(Renderer11 *renderer, GLenum type);
+    Query11(Renderer11 *renderer, gl::QueryType type);
     ~Query11() override;
 
     gl::Error begin() override;
diff --git a/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp b/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
index 089a4f8..53ef72a 100644
--- a/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
@@ -560,10 +560,6 @@
     return gl::NoError();
 }
 
-static const GLenum QueryTypes[] = {GL_ANY_SAMPLES_PASSED, GL_ANY_SAMPLES_PASSED_CONSERVATIVE,
-                                    GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, GL_TIME_ELAPSED_EXT,
-                                    GL_COMMANDS_COMPLETED_CHROMIUM};
-
 StateManager11::StateManager11(Renderer11 *renderer)
     : mRenderer(renderer),
       mInternalDirtyBits(),
@@ -1596,9 +1592,9 @@
     }
     mCurrentQueries.clear();
 
-    for (GLenum queryType : QueryTypes)
+    for (gl::QueryType type : angle::AllEnums<gl::QueryType>())
     {
-        gl::Query *query = state.getActiveQuery(queryType);
+        gl::Query *query = state.getActiveQuery(type);
         if (query != nullptr)
         {
             Query11 *query11 = GetImplAs<Query11>(query);
diff --git a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
index 49ef806..84f1c36 100644
--- a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
@@ -1852,19 +1852,19 @@
     return static_cast<UINT>(std::min(maxAnisotropy, d3d11_gl::GetMaximumAnisotropy(featureLevel)));
 }
 
-D3D11_QUERY ConvertQueryType(GLenum queryType)
+D3D11_QUERY ConvertQueryType(gl::QueryType type)
 {
-    switch (queryType)
+    switch (type)
     {
-        case GL_ANY_SAMPLES_PASSED_EXT:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+        case gl::QueryType::AnySamples:
+        case gl::QueryType::AnySamplesConservative:
             return D3D11_QUERY_OCCLUSION;
-        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+        case gl::QueryType::TransformFeedbackPrimitivesWritten:
             return D3D11_QUERY_SO_STATISTICS;
-        case GL_TIME_ELAPSED_EXT:
+        case gl::QueryType::TimeElapsed:
             // Two internal queries are also created for begin/end timestamps
             return D3D11_QUERY_TIMESTAMP_DISJOINT;
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case gl::QueryType::CommandsCompleted:
             return D3D11_QUERY_EVENT;
         default:
             UNREACHABLE();
diff --git a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
index f3a9586..2916753 100644
--- a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
+++ b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
@@ -53,7 +53,7 @@
 D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap);
 UINT ConvertMaxAnisotropy(float maxAnisotropy, D3D_FEATURE_LEVEL featureLevel);
 
-D3D11_QUERY ConvertQueryType(GLenum queryType);
+D3D11_QUERY ConvertQueryType(gl::QueryType type);
 
 UINT8 GetColorMask(const gl::InternalFormat &formatInfo);
 
diff --git a/src/libANGLE/renderer/d3d/d3d9/Context9.cpp b/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
index 5dd8f7a..3ea733f 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
+++ b/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
@@ -92,7 +92,7 @@
     return new VertexArray9(data);
 }
 
-QueryImpl *Context9::createQuery(GLenum type)
+QueryImpl *Context9::createQuery(gl::QueryType type)
 {
     return new Query9(mRenderer, type);
 }
diff --git a/src/libANGLE/renderer/d3d/d3d9/Context9.h b/src/libANGLE/renderer/d3d/d3d9/Context9.h
index a991b99..321ffba 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Context9.h
+++ b/src/libANGLE/renderer/d3d/d3d9/Context9.h
@@ -45,7 +45,7 @@
     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override;
+    QueryImpl *createQuery(gl::QueryType type) override;
     FenceNVImpl *createFenceNV() override;
     SyncImpl *createSync() override;
 
diff --git a/src/libANGLE/renderer/d3d/d3d9/Query9.cpp b/src/libANGLE/renderer/d3d/d3d9/Query9.cpp
index b7592a0..e6fc405 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Query9.cpp
+++ b/src/libANGLE/renderer/d3d/d3d9/Query9.cpp
@@ -14,7 +14,7 @@
 
 namespace rx
 {
-Query9::Query9(Renderer9 *renderer, GLenum type)
+Query9::Query9(Renderer9 *renderer, gl::QueryType type)
     : QueryImpl(type),
       mGetDataAttemptCount(0),
       mResult(GL_FALSE),
@@ -141,8 +141,8 @@
         HRESULT result = S_OK;
         switch (getType())
         {
-            case GL_ANY_SAMPLES_PASSED_EXT:
-            case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+            case gl::QueryType::AnySamples:
+            case gl::QueryType::AnySamplesConservative:
             {
                 DWORD numPixels = 0;
                 result = mQuery->GetData(&numPixels, sizeof(numPixels), D3DGETDATA_FLUSH);
@@ -154,7 +154,7 @@
                 break;
             }
 
-            case GL_COMMANDS_COMPLETED_CHROMIUM:
+            case gl::QueryType::CommandsCompleted:
             {
                 BOOL completed = FALSE;
                 result = mQuery->GetData(&completed, sizeof(completed), D3DGETDATA_FLUSH);
diff --git a/src/libANGLE/renderer/d3d/d3d9/Query9.h b/src/libANGLE/renderer/d3d/d3d9/Query9.h
index 91da2d7..64c8576 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Query9.h
+++ b/src/libANGLE/renderer/d3d/d3d9/Query9.h
@@ -18,7 +18,7 @@
 class Query9 : public QueryImpl
 {
   public:
-    Query9(Renderer9 *renderer, GLenum type);
+    Query9(Renderer9 *renderer, gl::QueryType type);
     ~Query9() override;
 
     gl::Error begin() override;
diff --git a/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp b/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
index 9066313..2ec05f2 100644
--- a/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
+++ b/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
@@ -268,14 +268,14 @@
     }
 }
 
-D3DQUERYTYPE ConvertQueryType(GLenum queryType)
+D3DQUERYTYPE ConvertQueryType(gl::QueryType type)
 {
-    switch (queryType)
+    switch (type)
     {
-        case GL_ANY_SAMPLES_PASSED_EXT:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+        case gl::QueryType::AnySamples:
+        case gl::QueryType::AnySamplesConservative:
             return D3DQUERYTYPE_OCCLUSION;
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case gl::QueryType::CommandsCompleted:
             return D3DQUERYTYPE_EVENT;
         default:
             UNREACHABLE();
diff --git a/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h b/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h
index 8d83d87..9021b3d 100644
--- a/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h
+++ b/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h
@@ -39,7 +39,7 @@
 D3DTEXTUREFILTERTYPE ConvertMagFilter(GLenum magFilter, float maxAnisotropy);
 void ConvertMinFilter(GLenum minFilter, D3DTEXTUREFILTERTYPE *d3dMinFilter, D3DTEXTUREFILTERTYPE *d3dMipFilter,
                       float *d3dLodBias, float maxAnisotropy, size_t baseLevel);
-D3DQUERYTYPE ConvertQueryType(GLenum queryType);
+D3DQUERYTYPE ConvertQueryType(gl::QueryType type);
 
 D3DMULTISAMPLE_TYPE GetMultisampleType(GLuint samples);
 
diff --git a/src/libANGLE/renderer/gl/ContextGL.cpp b/src/libANGLE/renderer/gl/ContextGL.cpp
index 1147ae5..b9d6375 100644
--- a/src/libANGLE/renderer/gl/ContextGL.cpp
+++ b/src/libANGLE/renderer/gl/ContextGL.cpp
@@ -91,11 +91,11 @@
     return new VertexArrayGL(data, getFunctions(), getStateManager());
 }
 
-QueryImpl *ContextGL::createQuery(GLenum type)
+QueryImpl *ContextGL::createQuery(gl::QueryType type)
 {
     switch (type)
     {
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case gl::QueryType::CommandsCompleted:
             return new SyncQueryGL(type, getFunctions(), getStateManager());
 
         default:
diff --git a/src/libANGLE/renderer/gl/ContextGL.h b/src/libANGLE/renderer/gl/ContextGL.h
index 368de1b..9a4e83b 100644
--- a/src/libANGLE/renderer/gl/ContextGL.h
+++ b/src/libANGLE/renderer/gl/ContextGL.h
@@ -53,7 +53,7 @@
     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override;
+    QueryImpl *createQuery(gl::QueryType type) override;
     FenceNVImpl *createFenceNV() override;
     SyncImpl *createSync() override;
 
diff --git a/src/libANGLE/renderer/gl/QueryGL.cpp b/src/libANGLE/renderer/gl/QueryGL.cpp
index 9126c86..449f819 100644
--- a/src/libANGLE/renderer/gl/QueryGL.cpp
+++ b/src/libANGLE/renderer/gl/QueryGL.cpp
@@ -16,24 +16,24 @@
 namespace
 {
 
-GLuint64 MergeQueryResults(GLenum type, GLuint64 currentResult, GLuint64 newResult)
+GLuint64 MergeQueryResults(gl::QueryType type, GLuint64 currentResult, GLuint64 newResult)
 {
     switch (type)
     {
-        case GL_ANY_SAMPLES_PASSED:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+        case gl::QueryType::AnySamples:
+        case gl::QueryType::AnySamplesConservative:
             return (currentResult == GL_TRUE || newResult == GL_TRUE) ? GL_TRUE : GL_FALSE;
 
-        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+        case gl::QueryType::TransformFeedbackPrimitivesWritten:
             return currentResult + newResult;
 
-        case GL_TIME_ELAPSED:
+        case gl::QueryType::TimeElapsed:
             return currentResult + newResult;
 
-        case GL_TIMESTAMP:
+        case gl::QueryType::Timestamp:
             return newResult;
 
-        case GL_PRIMITIVES_GENERATED_EXT:
+        case gl::QueryType::PrimitivesGenerated:
             return currentResult + newResult;
 
         default:
@@ -47,7 +47,7 @@
 namespace rx
 {
 
-QueryGL::QueryGL(GLenum type) : QueryImpl(type)
+QueryGL::QueryGL(gl::QueryType type) : QueryImpl(type)
 {
 }
 
@@ -55,7 +55,7 @@
 {
 }
 
-StandardQueryGL::StandardQueryGL(GLenum type,
+StandardQueryGL::StandardQueryGL(gl::QueryType type,
                                  const FunctionsGL *functions,
                                  StateManagerGL *stateManager)
     : QueryGL(type),
@@ -98,7 +98,7 @@
 
 gl::Error StandardQueryGL::queryCounter()
 {
-    ASSERT(mType == GL_TIMESTAMP);
+    ASSERT(mType == gl::QueryType::Timestamp);
 
     // Directly create a query for the timestamp and add it to the pending query queue, as timestamp
     // queries do not have the traditional begin/end block and never need to be paused/resumed
@@ -282,14 +282,14 @@
   public:
     SyncProviderGLQuery(const FunctionsGL *functions,
                         StateManagerGL *stateManager,
-                        GLenum queryType)
+                        gl::QueryType type)
         : mFunctions(functions), mQuery(0)
     {
         mFunctions->genQueries(1, &mQuery);
-        ANGLE_SWALLOW_ERR(stateManager->pauseQuery(queryType));
-        mFunctions->beginQuery(queryType, mQuery);
-        mFunctions->endQuery(queryType);
-        ANGLE_SWALLOW_ERR(stateManager->resumeQuery(queryType));
+        ANGLE_SWALLOW_ERR(stateManager->pauseQuery(type));
+        mFunctions->beginQuery(ToGLenum(type), mQuery);
+        mFunctions->endQuery(ToGLenum(type));
+        ANGLE_SWALLOW_ERR(stateManager->resumeQuery(type));
     }
 
     ~SyncProviderGLQuery() override { mFunctions->deleteQueries(1, &mQuery); }
@@ -317,7 +317,9 @@
     GLuint mQuery;
 };
 
-SyncQueryGL::SyncQueryGL(GLenum type, const FunctionsGL *functions, StateManagerGL *stateManager)
+SyncQueryGL::SyncQueryGL(gl::QueryType type,
+                         const FunctionsGL *functions,
+                         StateManagerGL *stateManager)
     : QueryGL(type),
       mFunctions(functions),
       mStateManager(stateManager),
@@ -325,7 +327,7 @@
       mFinished(false)
 {
     ASSERT(IsSupported(mFunctions));
-    ASSERT(type == GL_COMMANDS_COMPLETED_CHROMIUM);
+    ASSERT(type == gl::QueryType::CommandsCompleted);
 }
 
 SyncQueryGL::~SyncQueryGL()
@@ -351,7 +353,7 @@
     else if (nativegl::SupportsOcclusionQueries(mFunctions))
     {
         mSyncProvider.reset(
-            new SyncProviderGLQuery(mFunctions, mStateManager, GL_ANY_SAMPLES_PASSED));
+            new SyncProviderGLQuery(mFunctions, mStateManager, gl::QueryType::AnySamples));
     }
     else
     {
diff --git a/src/libANGLE/renderer/gl/QueryGL.h b/src/libANGLE/renderer/gl/QueryGL.h
index 887665a..866d97f 100644
--- a/src/libANGLE/renderer/gl/QueryGL.h
+++ b/src/libANGLE/renderer/gl/QueryGL.h
@@ -22,7 +22,7 @@
 class QueryGL : public QueryImpl
 {
   public:
-    QueryGL(GLenum type);
+    QueryGL(gl::QueryType type);
     ~QueryGL() override;
 
     // OpenGL is only allowed to have one query of each type active at any given time. Since ANGLE
@@ -38,7 +38,7 @@
 class StandardQueryGL : public QueryGL
 {
   public:
-    StandardQueryGL(GLenum type, const FunctionsGL *functions, StateManagerGL *stateManager);
+    StandardQueryGL(gl::QueryType type, const FunctionsGL *functions, StateManagerGL *stateManager);
     ~StandardQueryGL() override;
 
     gl::Error begin() override;
@@ -59,7 +59,7 @@
     template <typename T>
     gl::Error getResultBase(T *params);
 
-    GLenum mType;
+    gl::QueryType mType;
 
     const FunctionsGL *mFunctions;
     StateManagerGL *mStateManager;
@@ -73,7 +73,7 @@
 class SyncQueryGL : public QueryGL
 {
   public:
-    SyncQueryGL(GLenum type, const FunctionsGL *functions, StateManagerGL *stateManager);
+    SyncQueryGL(gl::QueryType type, const FunctionsGL *functions, StateManagerGL *stateManager);
     ~SyncQueryGL() override;
 
     static bool IsSupported(const FunctionsGL *functions);
diff --git a/src/libANGLE/renderer/gl/StateManagerGL.cpp b/src/libANGLE/renderer/gl/StateManagerGL.cpp
index de01c36..83d9f7e 100644
--- a/src/libANGLE/renderer/gl/StateManagerGL.cpp
+++ b/src/libANGLE/renderer/gl/StateManagerGL.cpp
@@ -33,13 +33,6 @@
 namespace rx
 {
 
-static constexpr GLenum QueryTypes[] = {GL_ANY_SAMPLES_PASSED,
-                                        GL_ANY_SAMPLES_PASSED_CONSERVATIVE,
-                                        GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN,
-                                        GL_TIME_ELAPSED,
-                                        GL_COMMANDS_COMPLETED_CHROMIUM,
-                                        GL_PRIMITIVES_GENERATED_EXT};
-
 StateManagerGL::IndexedBufferBinding::IndexedBufferBinding() : offset(0), size(0), buffer(0)
 {
 }
@@ -190,11 +183,8 @@
 
     mSampleMaskValues.fill(~GLbitfield(0));
 
-    for (GLenum queryType : QueryTypes)
-    {
-        mQueries[queryType]                = nullptr;
-        mTemporaryPausedQueries[queryType] = nullptr;
-    }
+    mQueries.fill(nullptr);
+    mTemporaryPausedQueries.fill(nullptr);
 
     // Initialize point sprite state for desktop GL
     if (mFunctions->standard == STANDARD_GL_DESKTOP)
@@ -674,23 +664,22 @@
     mLocalDirtyBits.set(gl::State::DIRTY_BIT_TRANSFORM_FEEDBACK_BINDING);
 }
 
-void StateManagerGL::beginQuery(GLenum type, QueryGL *queryObject, GLuint queryId)
+void StateManagerGL::beginQuery(gl::QueryType type, QueryGL *queryObject, GLuint queryId)
 {
     // Make sure this is a valid query type and there is no current active query of this type
-    ASSERT(mQueries.find(type) != mQueries.end());
     ASSERT(mQueries[type] == nullptr);
     ASSERT(queryId != 0);
 
     mQueries[type] = queryObject;
-    mFunctions->beginQuery(type, queryId);
+    mFunctions->beginQuery(ToGLenum(type), queryId);
 }
 
-void StateManagerGL::endQuery(GLenum type, QueryGL *queryObject, GLuint queryId)
+void StateManagerGL::endQuery(gl::QueryType type, QueryGL *queryObject, GLuint queryId)
 {
     ASSERT(queryObject != nullptr);
     ASSERT(mQueries[type] == queryObject);
     mQueries[type] = nullptr;
-    mFunctions->endQuery(type);
+    mFunctions->endQuery(ToGLenum(type));
 }
 
 gl::Error StateManagerGL::setDrawArraysState(const gl::Context *context,
@@ -776,27 +765,29 @@
 
 gl::Error StateManagerGL::pauseAllQueries()
 {
-    for (auto &prevQuery : mQueries)
+    for (gl::QueryType type : angle::AllEnums<gl::QueryType>())
     {
-        if (prevQuery.second)
+        QueryGL *previousQuery = mQueries[type];
+
+        if (previousQuery != nullptr)
         {
-            ANGLE_TRY(prevQuery.second->pause());
-            mTemporaryPausedQueries[prevQuery.first] = prevQuery.second;
-            prevQuery.second                         = nullptr;
+            ANGLE_TRY(previousQuery->pause());
+            mTemporaryPausedQueries[type] = previousQuery;
+            mQueries[type]                = nullptr;
         }
     }
+
     return gl::NoError();
 }
 
-gl::Error StateManagerGL::pauseQuery(GLenum type)
+gl::Error StateManagerGL::pauseQuery(gl::QueryType type)
 {
-    ASSERT(mQueries.find(type) != mQueries.end());
-    ASSERT(mTemporaryPausedQueries.find(type) == mQueries.end());
-    QueryGL *prevQuery = mQueries[type];
-    if (prevQuery)
+    QueryGL *previousQuery = mQueries[type];
+
+    if (previousQuery)
     {
-        ANGLE_TRY(prevQuery->pause());
-        mTemporaryPausedQueries[type] = prevQuery;
+        ANGLE_TRY(previousQuery->pause());
+        mTemporaryPausedQueries[type] = previousQuery;
         mQueries[type]                = nullptr;
     }
 
@@ -805,26 +796,26 @@
 
 gl::Error StateManagerGL::resumeAllQueries()
 {
-    for (auto &pausedQuery : mTemporaryPausedQueries)
+    for (gl::QueryType type : angle::AllEnums<gl::QueryType>())
     {
-        if (pausedQuery.second)
+        QueryGL *pausedQuery = mTemporaryPausedQueries[type];
+
+        if (pausedQuery != nullptr)
         {
-            ASSERT(mQueries[pausedQuery.first] == nullptr);
-            ANGLE_TRY(pausedQuery.second->resume());
-            pausedQuery.second = nullptr;
+            ASSERT(mQueries[type] == nullptr);
+            ANGLE_TRY(pausedQuery->resume());
+            mTemporaryPausedQueries[type] = nullptr;
         }
     }
 
     return gl::NoError();
 }
 
-gl::Error StateManagerGL::resumeQuery(GLenum type)
+gl::Error StateManagerGL::resumeQuery(gl::QueryType type)
 {
-    ASSERT(mQueries.find(type) != mQueries.end());
-    ASSERT(mTemporaryPausedQueries.find(type) != mTemporaryPausedQueries.end());
-
     QueryGL *pausedQuery = mTemporaryPausedQueries[type];
-    if (pausedQuery)
+
+    if (pausedQuery != nullptr)
     {
         ANGLE_TRY(pausedQuery->resume());
         mTemporaryPausedQueries[type] = nullptr;
@@ -841,7 +832,7 @@
     // Temporarily pausing queries during context switch is not supported
     for (auto &pausedQuery : mTemporaryPausedQueries)
     {
-        ASSERT(pausedQuery.second == nullptr);
+        ASSERT(pausedQuery == nullptr);
     }
 #endif
 
@@ -849,17 +840,18 @@
     auto contextID = context->getContextState().getContextID();
     if (contextID != mPrevDrawContext)
     {
-        for (auto &currentQuery : mQueries)
+        for (gl::QueryType type : angle::AllEnums<gl::QueryType>())
         {
+            QueryGL *currentQuery = mQueries[type];
             // Pause any old query object
-            if (currentQuery.second)
+            if (currentQuery != nullptr)
             {
-                ANGLE_TRY(currentQuery.second->pause());
-                currentQuery.second = nullptr;
+                ANGLE_TRY(currentQuery->pause());
+                mQueries[type] = nullptr;
             }
 
             // Check if this new context needs to resume a query
-            gl::Query *newQuery = glState.getActiveQuery(currentQuery.first);
+            gl::Query *newQuery = glState.getActiveQuery(type);
             if (newQuery != nullptr)
             {
                 QueryGL *queryGL = GetImplAs<QueryGL>(newQuery);
diff --git a/src/libANGLE/renderer/gl/StateManagerGL.h b/src/libANGLE/renderer/gl/StateManagerGL.h
index 5ec46ca..45a8d8d 100644
--- a/src/libANGLE/renderer/gl/StateManagerGL.h
+++ b/src/libANGLE/renderer/gl/StateManagerGL.h
@@ -75,8 +75,8 @@
     void bindRenderbuffer(GLenum type, GLuint renderbuffer);
     void bindTransformFeedback(GLenum type, GLuint transformFeedback);
     void onTransformFeedbackStateChange();
-    void beginQuery(GLenum type, QueryGL *queryObject, GLuint queryId);
-    void endQuery(GLenum type, QueryGL *queryObject, GLuint queryId);
+    void beginQuery(gl::QueryType type, QueryGL *queryObject, GLuint queryId);
+    void endQuery(gl::QueryType type, QueryGL *queryObject, GLuint queryId);
     void onBeginQuery(QueryGL *query);
 
     void setAttributeCurrentData(size_t index, const gl::VertexAttribCurrentValueData &data);
@@ -169,9 +169,9 @@
 
     void pauseTransformFeedback();
     gl::Error pauseAllQueries();
-    gl::Error pauseQuery(GLenum type);
+    gl::Error pauseQuery(gl::QueryType type);
     gl::Error resumeAllQueries();
-    gl::Error resumeQuery(GLenum type);
+    gl::Error resumeQuery(gl::QueryType type);
     gl::Error onMakeCurrent(const gl::Context *context);
 
     void syncState(const gl::Context *context, const gl::State::DirtyBits &glDirtyBits);
@@ -253,11 +253,11 @@
     TransformFeedbackGL *mCurrentTransformFeedback;
 
     // Queries that are currently running on the driver
-    std::map<GLenum, QueryGL *> mQueries;
+    angle::PackedEnumMap<gl::QueryType, QueryGL *> mQueries;
 
     // Queries that are temporarily in the paused state so that their results will not be affected
     // by other operations
-    std::map<GLenum, QueryGL *> mTemporaryPausedQueries;
+    angle::PackedEnumMap<gl::QueryType, QueryGL *> mTemporaryPausedQueries;
 
     gl::ContextID mPrevDrawContext;
 
diff --git a/src/libANGLE/renderer/null/ContextNULL.cpp b/src/libANGLE/renderer/null/ContextNULL.cpp
index 5a523d3..94becb4 100644
--- a/src/libANGLE/renderer/null/ContextNULL.cpp
+++ b/src/libANGLE/renderer/null/ContextNULL.cpp
@@ -373,7 +373,7 @@
     return new VertexArrayNULL(data);
 }
 
-QueryImpl *ContextNULL::createQuery(GLenum type)
+QueryImpl *ContextNULL::createQuery(gl::QueryType type)
 {
     return new QueryNULL(type);
 }
diff --git a/src/libANGLE/renderer/null/ContextNULL.h b/src/libANGLE/renderer/null/ContextNULL.h
index 212e5ba..08f5cb9 100644
--- a/src/libANGLE/renderer/null/ContextNULL.h
+++ b/src/libANGLE/renderer/null/ContextNULL.h
@@ -178,7 +178,7 @@
     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override;
+    QueryImpl *createQuery(gl::QueryType type) override;
     FenceNVImpl *createFenceNV() override;
     SyncImpl *createSync() override;
 
diff --git a/src/libANGLE/renderer/null/QueryNULL.cpp b/src/libANGLE/renderer/null/QueryNULL.cpp
index 8888028..2797f41 100644
--- a/src/libANGLE/renderer/null/QueryNULL.cpp
+++ b/src/libANGLE/renderer/null/QueryNULL.cpp
@@ -14,7 +14,7 @@
 namespace rx
 {
 
-QueryNULL::QueryNULL(GLenum type) : QueryImpl(type)
+QueryNULL::QueryNULL(gl::QueryType type) : QueryImpl(type)
 {
 }
 
diff --git a/src/libANGLE/renderer/null/QueryNULL.h b/src/libANGLE/renderer/null/QueryNULL.h
index 40082a9..177eb66 100644
--- a/src/libANGLE/renderer/null/QueryNULL.h
+++ b/src/libANGLE/renderer/null/QueryNULL.h
@@ -18,7 +18,7 @@
 class QueryNULL : public QueryImpl
 {
   public:
-    QueryNULL(GLenum type);
+    QueryNULL(gl::QueryType type);
     ~QueryNULL() override;
 
     gl::Error begin() override;
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.cpp b/src/libANGLE/renderer/vulkan/ContextVk.cpp
index c4f38ff..841fd4d 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -678,7 +678,7 @@
     return new VertexArrayVk(state);
 }
 
-QueryImpl *ContextVk::createQuery(GLenum type)
+QueryImpl *ContextVk::createQuery(gl::QueryType type)
 {
     return new QueryVk(type);
 }
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.h b/src/libANGLE/renderer/vulkan/ContextVk.h
index 5bb741d..3eb98b0 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.h
+++ b/src/libANGLE/renderer/vulkan/ContextVk.h
@@ -123,7 +123,7 @@
     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &state) override;
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override;
+    QueryImpl *createQuery(gl::QueryType type) override;
     FenceNVImpl *createFenceNV() override;
     SyncImpl *createSync() override;
 
diff --git a/src/libANGLE/renderer/vulkan/QueryVk.cpp b/src/libANGLE/renderer/vulkan/QueryVk.cpp
index c3eb2c4..42e33e3 100644
--- a/src/libANGLE/renderer/vulkan/QueryVk.cpp
+++ b/src/libANGLE/renderer/vulkan/QueryVk.cpp
@@ -14,7 +14,7 @@
 namespace rx
 {
 
-QueryVk::QueryVk(GLenum type) : QueryImpl(type)
+QueryVk::QueryVk(gl::QueryType type) : QueryImpl(type)
 {
 }
 
diff --git a/src/libANGLE/renderer/vulkan/QueryVk.h b/src/libANGLE/renderer/vulkan/QueryVk.h
index 7c92734..a4e978c 100644
--- a/src/libANGLE/renderer/vulkan/QueryVk.h
+++ b/src/libANGLE/renderer/vulkan/QueryVk.h
@@ -18,7 +18,7 @@
 class QueryVk : public QueryImpl
 {
   public:
-    QueryVk(GLenum type);
+    QueryVk(gl::QueryType type);
     ~QueryVk() override;
 
     gl::Error begin() override;
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 9d4ea71..56d6e76 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -966,26 +966,21 @@
     return true;
 }
 
-bool ValidQueryType(const Context *context, GLenum queryType)
+bool ValidQueryType(const Context *context, QueryType queryType)
 {
-    static_assert(GL_ANY_SAMPLES_PASSED == GL_ANY_SAMPLES_PASSED_EXT,
-                  "GL extension enums not equal.");
-    static_assert(GL_ANY_SAMPLES_PASSED_CONSERVATIVE == GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT,
-                  "GL extension enums not equal.");
-
     switch (queryType)
     {
-        case GL_ANY_SAMPLES_PASSED:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+        case QueryType::AnySamples:
+        case QueryType::AnySamplesConservative:
             return context->getClientMajorVersion() >= 3 ||
                    context->getExtensions().occlusionQueryBoolean;
-        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+        case QueryType::TransformFeedbackPrimitivesWritten:
             return (context->getClientMajorVersion() >= 3);
-        case GL_TIME_ELAPSED_EXT:
+        case QueryType::TimeElapsed:
             return context->getExtensions().disjointTimerQuery;
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case QueryType::CommandsCompleted:
             return context->getExtensions().syncQuery;
-        case GL_PRIMITIVES_GENERATED_EXT:
+        case QueryType::PrimitivesGenerated:
             return context->getExtensions().geometryShader;
         default:
             return false;
@@ -1611,7 +1606,7 @@
     return true;
 }
 
-bool ValidateBeginQueryBase(gl::Context *context, GLenum target, GLuint id)
+bool ValidateBeginQueryBase(gl::Context *context, QueryType target, GLuint id)
 {
     if (!ValidQueryType(context, target))
     {
@@ -1666,7 +1661,7 @@
     return true;
 }
 
-bool ValidateBeginQueryEXT(gl::Context *context, GLenum target, GLuint id)
+bool ValidateBeginQueryEXT(gl::Context *context, QueryType target, GLuint id)
 {
     if (!context->getExtensions().occlusionQueryBoolean &&
         !context->getExtensions().disjointTimerQuery && !context->getExtensions().syncQuery)
@@ -1678,7 +1673,7 @@
     return ValidateBeginQueryBase(context, target, id);
 }
 
-bool ValidateEndQueryBase(gl::Context *context, GLenum target)
+bool ValidateEndQueryBase(gl::Context *context, QueryType target)
 {
     if (!ValidQueryType(context, target))
     {
@@ -1697,7 +1692,7 @@
     return true;
 }
 
-bool ValidateEndQueryEXT(gl::Context *context, GLenum target)
+bool ValidateEndQueryEXT(gl::Context *context, QueryType target)
 {
     if (!context->getExtensions().occlusionQueryBoolean &&
         !context->getExtensions().disjointTimerQuery && !context->getExtensions().syncQuery)
@@ -1709,7 +1704,7 @@
     return ValidateEndQueryBase(context, target);
 }
 
-bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target)
+bool ValidateQueryCounterEXT(Context *context, GLuint id, QueryType target)
 {
     if (!context->getExtensions().disjointTimerQuery)
     {
@@ -1717,7 +1712,7 @@
         return false;
     }
 
-    if (target != GL_TIMESTAMP_EXT)
+    if (target != QueryType::Timestamp)
     {
         ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidQueryTarget);
         return false;
@@ -1739,14 +1734,14 @@
     return true;
 }
 
-bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams)
+bool ValidateGetQueryivBase(Context *context, QueryType target, GLenum pname, GLsizei *numParams)
 {
     if (numParams)
     {
         *numParams = 0;
     }
 
-    if (!ValidQueryType(context, target) && target != GL_TIMESTAMP_EXT)
+    if (!ValidQueryType(context, target) && target != QueryType::Timestamp)
     {
         ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidQueryType);
         return false;
@@ -1755,7 +1750,7 @@
     switch (pname)
     {
         case GL_CURRENT_QUERY_EXT:
-            if (target == GL_TIMESTAMP_EXT)
+            if (target == QueryType::Timestamp)
             {
                 context->handleError(InvalidEnum() << "Cannot use current query for timestamp");
                 return false;
@@ -1763,7 +1758,7 @@
             break;
         case GL_QUERY_COUNTER_BITS_EXT:
             if (!context->getExtensions().disjointTimerQuery ||
-                (target != GL_TIMESTAMP_EXT && target != GL_TIME_ELAPSED_EXT))
+                (target != QueryType::Timestamp && target != QueryType::TimeElapsed))
             {
                 ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidPname);
                 return false;
@@ -1783,7 +1778,7 @@
     return true;
 }
 
-bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint *params)
+bool ValidateGetQueryivEXT(Context *context, QueryType target, GLenum pname, GLint *params)
 {
     if (!context->getExtensions().occlusionQueryBoolean &&
         !context->getExtensions().disjointTimerQuery && !context->getExtensions().syncQuery)
@@ -1796,7 +1791,7 @@
 }
 
 bool ValidateGetQueryivRobustANGLE(Context *context,
-                                   GLenum target,
+                                   QueryType target,
                                    GLenum pname,
                                    GLsizei bufSize,
                                    GLsizei *length,
@@ -1831,7 +1826,7 @@
         *numParams = 0;
     }
 
-    Query *queryObject = context->getQuery(id, false, GL_NONE);
+    Query *queryObject = context->getQuery(id, false, QueryType::InvalidEnum);
 
     if (!queryObject)
     {
@@ -2728,7 +2723,7 @@
         }
 
         if (extensions.disjointTimerQuery && framebufferNumViews > 1 &&
-            state.isQueryActive(GL_TIME_ELAPSED_EXT))
+            state.isQueryActive(QueryType::TimeElapsed))
         {
             context->handleError(InvalidOperation() << "There is an active query for target "
                                                        "GL_TIME_ELAPSED_EXT when the number of "
diff --git a/src/libANGLE/validationES.h b/src/libANGLE/validationES.h
index f4e4538..f66484f 100644
--- a/src/libANGLE/validationES.h
+++ b/src/libANGLE/validationES.h
@@ -74,7 +74,7 @@
                         const void *pixels,
                         GLsizei imageSize);
 
-bool ValidQueryType(const Context *context, GLenum queryType);
+bool ValidQueryType(const Context *context, QueryType queryType);
 
 bool ValidateWebGLVertexAttribPointer(Context *context,
                                       GLenum type,
@@ -167,23 +167,20 @@
 bool ValidateGenQueriesEXT(gl::Context *context, GLsizei n, GLuint *ids);
 bool ValidateDeleteQueriesEXT(gl::Context *context, GLsizei n, const GLuint *ids);
 bool ValidateIsQueryEXT(gl::Context *context, GLuint id);
-bool ValidateBeginQueryBase(Context *context, GLenum target, GLuint id);
-bool ValidateBeginQueryEXT(Context *context, GLenum target, GLuint id);
-bool ValidateEndQueryBase(Context *context, GLenum target);
-bool ValidateEndQueryEXT(Context *context, GLenum target);
-bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target);
-bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams);
-bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint *params);
+bool ValidateBeginQueryBase(Context *context, QueryType target, GLuint id);
+bool ValidateBeginQueryEXT(Context *context, QueryType target, GLuint id);
+bool ValidateEndQueryBase(Context *context, QueryType target);
+bool ValidateEndQueryEXT(Context *context, QueryType target);
+bool ValidateQueryCounterEXT(Context *context, GLuint id, QueryType target);
+bool ValidateGetQueryivBase(Context *context, QueryType target, GLenum pname, GLsizei *numParams);
+bool ValidateGetQueryivEXT(Context *context, QueryType target, GLenum pname, GLint *params);
 bool ValidateGetQueryivRobustANGLE(Context *context,
-                                   GLenum target,
+                                   QueryType target,
                                    GLenum pname,
                                    GLsizei bufSize,
                                    GLsizei *length,
                                    GLint *params);
-bool ValidateGetQueryObjectValueBase(Context *context,
-                                     GLenum target,
-                                     GLenum pname,
-                                     GLsizei *numParams);
+bool ValidateGetQueryObjectValueBase(Context *context, GLuint id, GLenum pname, GLsizei *numParams);
 bool ValidateGetQueryObjectivEXT(Context *context, GLuint id, GLenum pname, GLint *params);
 bool ValidateGetQueryObjectivRobustANGLE(Context *context,
                                          GLuint id,
diff --git a/src/libANGLE/validationES3.cpp b/src/libANGLE/validationES3.cpp
index a7f522c..097d924 100644
--- a/src/libANGLE/validationES3.cpp
+++ b/src/libANGLE/validationES3.cpp
@@ -1063,7 +1063,7 @@
                                                height, depth);
 }
 
-bool ValidateBeginQuery(gl::Context *context, GLenum target, GLuint id)
+bool ValidateBeginQuery(gl::Context *context, QueryType target, GLuint id)
 {
     if (context->getClientMajorVersion() < 3)
     {
@@ -1074,7 +1074,7 @@
     return ValidateBeginQueryBase(context, target, id);
 }
 
-bool ValidateEndQuery(gl::Context *context, GLenum target)
+bool ValidateEndQuery(gl::Context *context, QueryType target)
 {
     if (context->getClientMajorVersion() < 3)
     {
@@ -1085,7 +1085,7 @@
     return ValidateEndQueryBase(context, target);
 }
 
-bool ValidateGetQueryiv(Context *context, GLenum target, GLenum pname, GLint *params)
+bool ValidateGetQueryiv(Context *context, QueryType target, GLenum pname, GLint *params)
 {
     if (context->getClientMajorVersion() < 3)
     {
diff --git a/src/libANGLE/validationES3.h b/src/libANGLE/validationES3.h
index bdce129..b4b1d18 100644
--- a/src/libANGLE/validationES3.h
+++ b/src/libANGLE/validationES3.h
@@ -146,11 +146,11 @@
                                        GLsizei height,
                                        GLsizei depth);
 
-bool ValidateBeginQuery(Context *context, GLenum target, GLuint id);
+bool ValidateBeginQuery(Context *context, QueryType target, GLuint id);
 
-bool ValidateEndQuery(Context *context, GLenum target);
+bool ValidateEndQuery(Context *context, QueryType target);
 
-bool ValidateGetQueryiv(Context *context, GLenum target, GLenum pname, GLint *params);
+bool ValidateGetQueryiv(Context *context, QueryType target, GLenum pname, GLint *params);
 
 bool ValidateGetQueryObjectuiv(Context *context, GLuint id, GLenum pname, GLuint *params);
 
diff --git a/src/libGLESv2/entry_points_gles_3_0_autogen.cpp b/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
index e227021..d25bfea 100644
--- a/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
@@ -23,11 +23,12 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::BeginQuery>(target, id);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::BeginQuery>(targetPacked, id);
 
-        if (context->skipValidation() || ValidateBeginQuery(context, target, id))
+        if (context->skipValidation() || ValidateBeginQuery(context, targetPacked, id))
         {
-            context->beginQuery(target, id);
+            context->beginQuery(targetPacked, id);
         }
     }
 }
@@ -560,11 +561,12 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::EndQuery>(target);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::EndQuery>(targetPacked);
 
-        if (context->skipValidation() || ValidateEndQuery(context, target))
+        if (context->skipValidation() || ValidateEndQuery(context, targetPacked))
         {
-            context->endQuery(target);
+            context->endQuery(targetPacked);
         }
     }
 }
@@ -963,11 +965,12 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::GetQueryiv>(target, pname, params);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryiv>(targetPacked, pname, params);
 
-        if (context->skipValidation() || ValidateGetQueryiv(context, target, pname, params))
+        if (context->skipValidation() || ValidateGetQueryiv(context, targetPacked, pname, params))
         {
-            context->getQueryiv(target, pname, params);
+            context->getQueryiv(targetPacked, pname, params);
         }
     }
 }
diff --git a/src/libGLESv2/entry_points_gles_ext_autogen.cpp b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
index 69f4e6c..61dced0 100644
--- a/src/libGLESv2/entry_points_gles_ext_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
@@ -972,13 +972,14 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::GetQueryivRobustANGLE>(target, pname, bufSize, length,
-                                                                 params);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                 length, params);
 
         if (context->skipValidation() ||
-            ValidateGetQueryivRobustANGLE(context, target, pname, bufSize, length, params))
+            ValidateGetQueryivRobustANGLE(context, targetPacked, pname, bufSize, length, params))
         {
-            context->getQueryivRobust(target, pname, bufSize, length, params);
+            context->getQueryivRobust(targetPacked, pname, bufSize, length, params);
         }
     }
 }
@@ -2726,11 +2727,12 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::BeginQueryEXT>(target, id);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::BeginQueryEXT>(targetPacked, id);
 
-        if (context->skipValidation() || ValidateBeginQueryEXT(context, target, id))
+        if (context->skipValidation() || ValidateBeginQueryEXT(context, targetPacked, id))
         {
-            context->beginQuery(target, id);
+            context->beginQuery(targetPacked, id);
         }
     }
 }
@@ -2758,11 +2760,12 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::EndQueryEXT>(target);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::EndQueryEXT>(targetPacked);
 
-        if (context->skipValidation() || ValidateEndQueryEXT(context, target))
+        if (context->skipValidation() || ValidateEndQueryEXT(context, targetPacked))
         {
-            context->endQuery(target);
+            context->endQuery(targetPacked);
         }
     }
 }
@@ -2855,11 +2858,13 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::GetQueryivEXT>(target, pname, params);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryivEXT>(targetPacked, pname, params);
 
-        if (context->skipValidation() || ValidateGetQueryivEXT(context, target, pname, params))
+        if (context->skipValidation() ||
+            ValidateGetQueryivEXT(context, targetPacked, pname, params))
         {
-            context->getQueryiv(target, pname, params);
+            context->getQueryiv(targetPacked, pname, params);
         }
     }
 }
@@ -2889,11 +2894,12 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::QueryCounterEXT>(id, target);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::QueryCounterEXT>(id, targetPacked);
 
-        if (context->skipValidation() || ValidateQueryCounterEXT(context, id, target))
+        if (context->skipValidation() || ValidateQueryCounterEXT(context, id, targetPacked))
         {
-            context->queryCounter(id, target);
+            context->queryCounter(id, targetPacked);
         }
     }
 }
diff --git a/src/tests/angle_unittests_utils.h b/src/tests/angle_unittests_utils.h
index cf8648e..1436208 100644
--- a/src/tests/angle_unittests_utils.h
+++ b/src/tests/angle_unittests_utils.h
@@ -53,7 +53,7 @@
     }
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override { return nullptr; }
+    QueryImpl *createQuery(gl::QueryType type) override { return nullptr; }
     FenceNVImpl *createFenceNV() override { return nullptr; }
     SyncImpl *createSync() override { return nullptr; }
 
@@ -92,7 +92,7 @@
     MOCK_METHOD1(createRenderbuffer, RenderbufferImpl *(const gl::RenderbufferState &));
     MOCK_METHOD1(createBuffer, BufferImpl *(const gl::BufferState &));
     MOCK_METHOD1(createVertexArray, VertexArrayImpl *(const gl::VertexArrayState &));
-    MOCK_METHOD1(createQuery, QueryImpl *(GLenum type));
+    MOCK_METHOD1(createQuery, QueryImpl *(gl::QueryType type));
     MOCK_METHOD0(createFenceNV, FenceNVImpl *());
     MOCK_METHOD0(createSync, SyncImpl *());
     MOCK_METHOD1(createTransformFeedback,