Use packed enum for DrawElementsType.

The packing and unpacking take a few extra instructions. But it
completely obviates the need for any switches in the validation code.
Speed is slightly faster or the similar depending on the back-end.

Also add gl_angle_ext.xml to GL entry point generator inputs. This was
missing and would cause the code generation to miss certain changes.

Bug: angleproject:2985
Change-Id: I1ea41a71db71135000166ead8305ec42d22ff7b3
Reviewed-on: https://chromium-review.googlesource.com/c/1351729
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
index 144761e..3bacd45 100644
--- a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
+++ b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
@@ -134,12 +134,12 @@
 }
 
 angle::Result VertexArrayVk::streamIndexData(ContextVk *contextVk,
-                                             GLenum indexType,
+                                             gl::DrawElementsType indexType,
                                              size_t indexCount,
                                              const void *sourcePointer,
                                              vk::DynamicBuffer *dynamicBuffer)
 {
-    ASSERT(!mState.getElementArrayBuffer() || indexType == GL_UNSIGNED_BYTE);
+    ASSERT(!mState.getElementArrayBuffer() || indexType == gl::DrawElementsType::UnsignedByte);
 
     dynamicBuffer->releaseRetainedBuffers(contextVk->getRenderer());
 
@@ -148,7 +148,7 @@
 
     ANGLE_TRY(dynamicBuffer->allocate(contextVk, amount, &dst, &mCurrentElementArrayBufferHandle,
                                       &mCurrentElementArrayBufferOffset, nullptr));
-    if (indexType == GL_UNSIGNED_BYTE)
+    if (indexType == gl::DrawElementsType::UnsignedByte)
     {
         // Unsigned bytes don't have direct support in Vulkan so we have to expand the
         // memory to a GLushort.
@@ -446,7 +446,7 @@
 angle::Result VertexArrayVk::updateClientAttribs(const gl::Context *context,
                                                  GLint firstVertex,
                                                  GLsizei vertexOrIndexCount,
-                                                 GLenum indexTypeOrNone,
+                                                 gl::DrawElementsType indexTypeOrInvalid,
                                                  const void *indices)
 {
     ContextVk *contextVk                    = vk::GetImpl(context);
@@ -456,8 +456,8 @@
 
     GLint startVertex;
     size_t vertexCount;
-    ANGLE_TRY(GetVertexRangeInfo(context, firstVertex, vertexOrIndexCount, indexTypeOrNone, indices,
-                                 0, &startVertex, &vertexCount));
+    ANGLE_TRY(GetVertexRangeInfo(context, firstVertex, vertexOrIndexCount, indexTypeOrInvalid,
+                                 indices, 0, &startVertex, &vertexCount));
 
     mDynamicVertexData.releaseRetainedBuffers(contextVk->getRenderer());
 
@@ -498,10 +498,10 @@
 angle::Result VertexArrayVk::handleLineLoop(ContextVk *contextVk,
                                             GLint firstVertex,
                                             GLsizei vertexOrIndexCount,
-                                            GLenum indexTypeOrNone,
+                                            gl::DrawElementsType indexTypeOrInvalid,
                                             const void *indices)
 {
-    if (indexTypeOrNone != GL_NONE)
+    if (indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
     {
         // Handle GL_LINE_LOOP drawElements.
         if (mDirtyLineLoopTranslation)
@@ -511,7 +511,7 @@
             if (!elementArrayBuffer)
             {
                 ANGLE_TRY(mLineLoopHelper.streamIndices(
-                    contextVk, indexTypeOrNone, vertexOrIndexCount,
+                    contextVk, indexTypeOrInvalid, vertexOrIndexCount,
                     reinterpret_cast<const uint8_t *>(indices), &mCurrentElementArrayBufferHandle,
                     &mCurrentElementArrayBufferOffset));
             }
@@ -521,7 +521,7 @@
                 intptr_t offset                = reinterpret_cast<intptr_t>(indices);
                 BufferVk *elementArrayBufferVk = vk::GetImpl(elementArrayBuffer);
                 ANGLE_TRY(mLineLoopHelper.getIndexBufferForElementArrayBuffer(
-                    contextVk, elementArrayBufferVk, indexTypeOrNone, vertexOrIndexCount, offset,
+                    contextVk, elementArrayBufferVk, indexTypeOrInvalid, vertexOrIndexCount, offset,
                     &mCurrentElementArrayBufferHandle, &mCurrentElementArrayBufferOffset));
             }
         }
@@ -555,10 +555,10 @@
 
 angle::Result VertexArrayVk::updateIndexTranslation(ContextVk *contextVk,
                                                     GLsizei indexCount,
-                                                    GLenum type,
+                                                    gl::DrawElementsType type,
                                                     const void *indices)
 {
-    ASSERT(type != GL_NONE);
+    ASSERT(type != gl::DrawElementsType::InvalidEnum);
 
     gl::Buffer *glBuffer = mState.getElementArrayBuffer();
 
@@ -571,7 +571,7 @@
         // Needed before reading buffer or we could get stale data.
         ANGLE_TRY(contextVk->getRenderer()->finish(contextVk));
 
-        ASSERT(type == GL_UNSIGNED_BYTE);
+        ASSERT(type == gl::DrawElementsType::UnsignedByte);
         // Unsigned bytes don't have direct support in Vulkan so we have to expand the
         // memory to a GLushort.
         BufferVk *bufferVk   = vk::GetImpl(glBuffer);