Use PathID in place of GLuint handle

Bug: angleproject:3804
Change-Id: Ibadfc2c33e4af1cca22caa1dbe96ac48a4a85ffa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1766822
Reviewed-by: Jiacheng Lu <lujc@google.com>
Commit-Queue: Jiacheng Lu <lujc@google.com>
diff --git a/src/common/PackedEnums.h b/src/common/PackedEnums.h
index 3aed8fb..9a63ab4 100644
--- a/src/common/PackedEnums.h
+++ b/src/common/PackedEnums.h
@@ -386,6 +386,11 @@
     GLuint value;
 };
 
+struct PathID
+{
+    GLuint value;
+};
+
 struct TextureID
 {
     GLuint value;
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 62cb23d..0c68628 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -61,7 +61,7 @@
 std::vector<Path *> GatherPaths(PathManager &resourceManager,
                                 GLsizei numPaths,
                                 const void *paths,
-                                GLuint pathBase)
+                                PathID pathBase)
 {
     std::vector<Path *> ret;
     ret.reserve(numPaths);
@@ -70,9 +70,9 @@
 
     for (GLsizei i = 0; i < numPaths; ++i)
     {
-        const GLuint pathName = nameArray[i] + pathBase;
+        const GLuint pathName = nameArray[i] + pathBase.value;
 
-        ret.push_back(resourceManager.getPath(pathName));
+        ret.push_back(resourceManager.getPath({pathName}));
     }
 
     return ret;
@@ -82,7 +82,7 @@
                                 GLsizei numPaths,
                                 GLenum pathNameType,
                                 const void *paths,
-                                GLuint pathBase)
+                                PathID pathBase)
 {
     switch (pathNameType)
     {
@@ -702,16 +702,16 @@
     return mState.mRenderbufferManager->createRenderbuffer();
 }
 
-void Context::tryGenPaths(GLsizei range, GLuint *createdOut)
+void Context::tryGenPaths(GLsizei range, PathID *createdOut)
 {
     ANGLE_CONTEXT_TRY(mState.mPathManager->createPaths(this, range, createdOut));
 }
 
 GLuint Context::genPaths(GLsizei range)
 {
-    GLuint created = 0;
+    PathID created = {0};
     tryGenPaths(range, &created);
-    return created;
+    return created.value;
 }
 
 // Returns an unused framebuffer name
@@ -821,12 +821,12 @@
     mState.mSemaphoreManager->deleteSemaphore(this, semaphore);
 }
 
-void Context::deletePaths(GLuint first, GLsizei range)
+void Context::deletePaths(PathID first, GLsizei range)
 {
     mState.mPathManager->deletePaths(first, range);
 }
 
-GLboolean Context::isPath(GLuint path)
+GLboolean Context::isPath(PathID path)
 {
     const auto *pathObj = mState.mPathManager->getPath(path);
     if (pathObj == nullptr)
@@ -835,12 +835,12 @@
     return pathObj->hasPathData();
 }
 
-bool Context::isPathGenerated(GLuint path) const
+bool Context::isPathGenerated(PathID path) const
 {
     return mState.mPathManager->hasPath(path);
 }
 
-void Context::pathCommands(GLuint path,
+void Context::pathCommands(PathID path,
                            GLsizei numCommands,
                            const GLubyte *commands,
                            GLsizei numCoords,
@@ -852,7 +852,7 @@
     ANGLE_CONTEXT_TRY(pathObject->setCommands(numCommands, commands, numCoords, coordType, coords));
 }
 
-void Context::pathParameterf(GLuint path, GLenum pname, GLfloat value)
+void Context::pathParameterf(PathID path, GLenum pname, GLfloat value)
 {
     Path *pathObj = mState.mPathManager->getPath(path);
 
@@ -879,13 +879,13 @@
     }
 }
 
-void Context::pathParameteri(GLuint path, GLenum pname, GLint value)
+void Context::pathParameteri(PathID path, GLenum pname, GLint value)
 {
     // TODO(jmadill): Should use proper clamping/casting.
     pathParameterf(path, pname, static_cast<GLfloat>(value));
 }
 
-void Context::getPathParameterfv(GLuint path, GLenum pname, GLfloat *value)
+void Context::getPathParameterfv(PathID path, GLenum pname, GLfloat *value)
 {
     const Path *pathObj = mState.mPathManager->getPath(path);
 
@@ -912,7 +912,7 @@
     }
 }
 
-void Context::getPathParameteriv(GLuint path, GLenum pname, GLint *value)
+void Context::getPathParameteriv(PathID path, GLenum pname, GLint *value)
 {
     GLfloat val = 0.0f;
     getPathParameterfv(path, pname, value != nullptr ? &val : nullptr);
@@ -2367,7 +2367,7 @@
     mState.loadPathRenderingMatrix(matrixMode, I);
 }
 
-void Context::stencilFillPath(GLuint path, GLenum fillMode, GLuint mask)
+void Context::stencilFillPath(PathID path, GLenum fillMode, GLuint mask)
 {
     const auto *pathObj = mState.mPathManager->getPath(path);
     if (!pathObj)
@@ -2378,7 +2378,7 @@
     mImplementation->stencilFillPath(pathObj, fillMode, mask);
 }
 
-void Context::stencilStrokePath(GLuint path, GLint reference, GLuint mask)
+void Context::stencilStrokePath(PathID path, GLint reference, GLuint mask)
 {
     const auto *pathObj = mState.mPathManager->getPath(path);
     if (!pathObj)
@@ -2389,7 +2389,7 @@
     mImplementation->stencilStrokePath(pathObj, reference, mask);
 }
 
-void Context::coverFillPath(GLuint path, GLenum coverMode)
+void Context::coverFillPath(PathID path, GLenum coverMode)
 {
     const auto *pathObj = mState.mPathManager->getPath(path);
     if (!pathObj)
@@ -2400,7 +2400,7 @@
     mImplementation->coverFillPath(pathObj, coverMode);
 }
 
-void Context::coverStrokePath(GLuint path, GLenum coverMode)
+void Context::coverStrokePath(PathID path, GLenum coverMode)
 {
     const auto *pathObj = mState.mPathManager->getPath(path);
     if (!pathObj)
@@ -2411,7 +2411,7 @@
     mImplementation->coverStrokePath(pathObj, coverMode);
 }
 
-void Context::stencilThenCoverFillPath(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode)
+void Context::stencilThenCoverFillPath(PathID path, GLenum fillMode, GLuint mask, GLenum coverMode)
 {
     const auto *pathObj = mState.mPathManager->getPath(path);
     if (!pathObj)
@@ -2422,7 +2422,7 @@
     mImplementation->stencilThenCoverFillPath(pathObj, fillMode, mask, coverMode);
 }
 
-void Context::stencilThenCoverStrokePath(GLuint path,
+void Context::stencilThenCoverStrokePath(PathID path,
                                          GLint reference,
                                          GLuint mask,
                                          GLenum coverMode)
@@ -2439,7 +2439,7 @@
 void Context::coverFillPathInstanced(GLsizei numPaths,
                                      GLenum pathNameType,
                                      const void *paths,
-                                     GLuint pathBase,
+                                     PathID pathBase,
                                      GLenum coverMode,
                                      GLenum transformType,
                                      const GLfloat *transformValues)
@@ -2455,7 +2455,7 @@
 void Context::coverStrokePathInstanced(GLsizei numPaths,
                                        GLenum pathNameType,
                                        const void *paths,
-                                       GLuint pathBase,
+                                       PathID pathBase,
                                        GLenum coverMode,
                                        GLenum transformType,
                                        const GLfloat *transformValues)
@@ -2473,7 +2473,7 @@
 void Context::stencilFillPathInstanced(GLsizei numPaths,
                                        GLenum pathNameType,
                                        const void *paths,
-                                       GLuint pathBase,
+                                       PathID pathBase,
                                        GLenum fillMode,
                                        GLuint mask,
                                        GLenum transformType,
@@ -2492,7 +2492,7 @@
 void Context::stencilStrokePathInstanced(GLsizei numPaths,
                                          GLenum pathNameType,
                                          const void *paths,
-                                         GLuint pathBase,
+                                         PathID pathBase,
                                          GLint reference,
                                          GLuint mask,
                                          GLenum transformType,
@@ -2510,7 +2510,7 @@
 void Context::stencilThenCoverFillPathInstanced(GLsizei numPaths,
                                                 GLenum pathNameType,
                                                 const void *paths,
-                                                GLuint pathBase,
+                                                PathID pathBase,
                                                 GLenum fillMode,
                                                 GLuint mask,
                                                 GLenum coverMode,
@@ -2529,7 +2529,7 @@
 void Context::stencilThenCoverStrokePathInstanced(GLsizei numPaths,
                                                   GLenum pathNameType,
                                                   const void *paths,
-                                                  GLuint pathBase,
+                                                  PathID pathBase,
                                                   GLint reference,
                                                   GLuint mask,
                                                   GLenum coverMode,
diff --git a/src/libANGLE/Context.h b/src/libANGLE/Context.h
index ab28dde..579414d 100644
--- a/src/libANGLE/Context.h
+++ b/src/libANGLE/Context.h
@@ -364,7 +364,7 @@
     void deleteSemaphore(GLuint semaphore);
 
     // CHROMIUM_path_rendering
-    bool isPathGenerated(GLuint path) const;
+    bool isPathGenerated(PathID path) const;
 
     void bindReadFramebuffer(GLuint framebufferHandle);
     void bindDrawFramebuffer(GLuint framebufferHandle);
@@ -603,7 +603,7 @@
     void detachProgramPipeline(GLuint pipeline);
 
     // A small helper method to facilitate using the ANGLE_CONTEXT_TRY macro.
-    void tryGenPaths(GLsizei range, GLuint *createdOut);
+    void tryGenPaths(GLsizei range, PathID *createdOut);
 
     egl::Error setDefaultFramebuffer(egl::Surface *surface);
     egl::Error unsetDefaultFramebuffer();
diff --git a/src/libANGLE/Context_gles_ext_autogen.h b/src/libANGLE/Context_gles_ext_autogen.h
index e4bf9b8..b1eca82 100644
--- a/src/libANGLE/Context_gles_ext_autogen.h
+++ b/src/libANGLE/Context_gles_ext_autogen.h
@@ -224,41 +224,43 @@
     void loseContext(GraphicsResetStatus currentPacked, GraphicsResetStatus otherPacked);          \
     /* GL_CHROMIUM_path_rendering */                                                               \
     GLuint genPaths(GLsizei range);                                                                \
-    void deletePaths(GLuint first, GLsizei range);                                                 \
-    GLboolean isPath(GLuint path);                                                                 \
-    void pathCommands(GLuint path, GLsizei numCommands, const GLubyte *commands,                   \
+    void deletePaths(PathID firstPacked, GLsizei range);                                           \
+    GLboolean isPath(PathID pathPacked);                                                           \
+    void pathCommands(PathID pathPacked, GLsizei numCommands, const GLubyte *commands,             \
                       GLsizei numCoords, GLenum coordType, const void *coords);                    \
-    void pathParameterf(GLuint path, GLenum pname, GLfloat value);                                 \
-    void pathParameteri(GLuint path, GLenum pname, GLint value);                                   \
-    void getPathParameterfv(GLuint path, GLenum pname, GLfloat *value);                            \
-    void getPathParameteriv(GLuint path, GLenum pname, GLint *value);                              \
+    void pathParameterf(PathID pathPacked, GLenum pname, GLfloat value);                           \
+    void pathParameteri(PathID pathPacked, GLenum pname, GLint value);                             \
+    void getPathParameterfv(PathID pathPacked, GLenum pname, GLfloat *value);                      \
+    void getPathParameteriv(PathID pathPacked, GLenum pname, GLint *value);                        \
     void pathStencilFunc(GLenum func, GLint ref, GLuint mask);                                     \
-    void stencilFillPath(GLuint path, GLenum fillMode, GLuint mask);                               \
-    void stencilStrokePath(GLuint path, GLint reference, GLuint mask);                             \
-    void coverFillPath(GLuint path, GLenum coverMode);                                             \
-    void coverStrokePath(GLuint path, GLenum coverMode);                                           \
-    void stencilThenCoverFillPath(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);    \
-    void stencilThenCoverStrokePath(GLuint path, GLint reference, GLuint mask, GLenum coverMode);  \
+    void stencilFillPath(PathID pathPacked, GLenum fillMode, GLuint mask);                         \
+    void stencilStrokePath(PathID pathPacked, GLint reference, GLuint mask);                       \
+    void coverFillPath(PathID pathPacked, GLenum coverMode);                                       \
+    void coverStrokePath(PathID pathPacked, GLenum coverMode);                                     \
+    void stencilThenCoverFillPath(PathID pathPacked, GLenum fillMode, GLuint mask,                 \
+                                  GLenum coverMode);                                               \
+    void stencilThenCoverStrokePath(PathID pathPacked, GLint reference, GLuint mask,               \
+                                    GLenum coverMode);                                             \
     void coverFillPathInstanced(GLsizei numPath, GLenum pathNameType, const void *paths,           \
-                                GLuint pathBase, GLenum coverMode, GLenum transformType,           \
+                                PathID pathBasePacked, GLenum coverMode, GLenum transformType,     \
                                 const GLfloat *transformValues);                                   \
     void coverStrokePathInstanced(GLsizei numPath, GLenum pathNameType, const void *paths,         \
-                                  GLuint pathBase, GLenum coverMode, GLenum transformType,         \
+                                  PathID pathBasePacked, GLenum coverMode, GLenum transformType,   \
                                   const GLfloat *transformValues);                                 \
     void stencilStrokePathInstanced(GLsizei numPath, GLenum pathNameType, const void *paths,       \
-                                    GLuint pathBase, GLint reference, GLuint mask,                 \
+                                    PathID pathBasePacked, GLint reference, GLuint mask,           \
                                     GLenum transformType, const GLfloat *transformValues);         \
     void stencilFillPathInstanced(GLsizei numPaths, GLenum pathNameType, const void *paths,        \
-                                  GLuint pathBase, GLenum fillMode, GLuint mask,                   \
+                                  PathID pathBasePacked, GLenum fillMode, GLuint mask,             \
                                   GLenum transformType, const GLfloat *transformValues);           \
     void stencilThenCoverFillPathInstanced(GLsizei numPaths, GLenum pathNameType,                  \
-                                           const void *paths, GLuint pathBase, GLenum fillMode,    \
-                                           GLuint mask, GLenum coverMode, GLenum transformType,    \
-                                           const GLfloat *transformValues);                        \
-    void stencilThenCoverStrokePathInstanced(GLsizei numPaths, GLenum pathNameType,                \
-                                             const void *paths, GLuint pathBase, GLint reference,  \
-                                             GLuint mask, GLenum coverMode, GLenum transformType,  \
-                                             const GLfloat *transformValues);                      \
+                                           const void *paths, PathID pathBasePacked,               \
+                                           GLenum fillMode, GLuint mask, GLenum coverMode,         \
+                                           GLenum transformType, const GLfloat *transformValues);  \
+    void stencilThenCoverStrokePathInstanced(                                                      \
+        GLsizei numPaths, GLenum pathNameType, const void *paths, PathID pathBasePacked,           \
+        GLint reference, GLuint mask, GLenum coverMode, GLenum transformType,                      \
+        const GLfloat *transformValues);                                                           \
     void bindFragmentInputLocation(GLuint programs, GLint location, const GLchar *name);           \
     void programPathFragmentInputGen(GLuint program, GLint location, GLenum genMode,               \
                                      GLint components, const GLfloat *coeffs);                     \
diff --git a/src/libANGLE/FrameCapture.cpp b/src/libANGLE/FrameCapture.cpp
index e27ce1d..224810a 100644
--- a/src/libANGLE/FrameCapture.cpp
+++ b/src/libANGLE/FrameCapture.cpp
@@ -857,6 +857,13 @@
     os << "gRenderbufferMap[" << value.value << "]";
 }
 
+// TODO(jmadill): Use path ID map. http://anglebug.com/3611
+template <>
+void WriteParamValueToStream<ParamType::TPathID>(std::ostream &os, gl::PathID value)
+{
+    os << value.value;
+}
+
 // TODO(jmadill): Use texture ID map. http://anglebug.com/3611
 template <>
 void WriteParamValueToStream<ParamType::TTextureID>(std::ostream &os, gl::TextureID value)
diff --git a/src/libANGLE/FrameCapture.h b/src/libANGLE/FrameCapture.h
index bd5a23d..b8fcea3 100644
--- a/src/libANGLE/FrameCapture.h
+++ b/src/libANGLE/FrameCapture.h
@@ -267,6 +267,9 @@
                                                          gl::RenderbufferID value);
 
 template <>
+void WriteParamValueToStream<ParamType::TPathID>(std::ostream &os, gl::PathID value);
+
+template <>
 void WriteParamValueToStream<ParamType::TTextureID>(std::ostream &os, gl::TextureID value);
 
 template <>
diff --git a/src/libANGLE/ResourceManager.cpp b/src/libANGLE/ResourceManager.cpp
index ec8f054..de3c55c 100644
--- a/src/libANGLE/ResourceManager.cpp
+++ b/src/libANGLE/ResourceManager.cpp
@@ -347,9 +347,9 @@
 
 PathManager::PathManager() = default;
 
-angle::Result PathManager::createPaths(Context *context, GLsizei range, GLuint *createdOut)
+angle::Result PathManager::createPaths(Context *context, GLsizei range, PathID *createdOut)
 {
-    *createdOut = 0;
+    *createdOut = {0};
 
     // Allocate client side handles.
     const GLuint client = mHandleAllocator.allocateRange(static_cast<GLuint>(range));
@@ -372,34 +372,35 @@
     for (GLsizei i = 0; i < range; ++i)
     {
         rx::PathImpl *impl = paths[static_cast<unsigned>(i)];
-        const auto id      = client + i;
+        PathID id          = PathID{client + i};
         mPaths.assign(id, new Path(impl));
     }
-    *createdOut = client;
+    *createdOut = PathID{client};
     return angle::Result::Continue;
 }
 
-void PathManager::deletePaths(GLuint first, GLsizei range)
+void PathManager::deletePaths(PathID first, GLsizei range)
 {
+    GLuint firstHandle = first.value;
     for (GLsizei i = 0; i < range; ++i)
     {
-        const auto id = first + i;
-        Path *p       = nullptr;
-        if (!mPaths.erase(id, &p))
+        GLuint id = firstHandle + i;
+        Path *p   = nullptr;
+        if (!mPaths.erase({id}, &p))
             continue;
         delete p;
     }
-    mHandleAllocator.releaseRange(first, static_cast<GLuint>(range));
+    mHandleAllocator.releaseRange(firstHandle, static_cast<GLuint>(range));
 }
 
-Path *PathManager::getPath(GLuint handle) const
+Path *PathManager::getPath(PathID handle) const
 {
     return mPaths.query(handle);
 }
 
-bool PathManager::hasPath(GLuint handle) const
+bool PathManager::hasPath(PathID handle) const
 {
-    return mHandleAllocator.isUsed(handle);
+    return mHandleAllocator.isUsed(GetIDValue(handle));
 }
 
 PathManager::~PathManager()
diff --git a/src/libANGLE/ResourceManager.h b/src/libANGLE/ResourceManager.h
index d004b94..7316a43 100644
--- a/src/libANGLE/ResourceManager.h
+++ b/src/libANGLE/ResourceManager.h
@@ -257,17 +257,17 @@
   public:
     PathManager();
 
-    angle::Result createPaths(Context *context, GLsizei range, GLuint *numCreated);
-    void deletePaths(GLuint first, GLsizei range);
-    Path *getPath(GLuint handle) const;
-    bool hasPath(GLuint handle) const;
+    angle::Result createPaths(Context *context, GLsizei range, PathID *numCreated);
+    void deletePaths(PathID first, GLsizei range);
+    Path *getPath(PathID handle) const;
+    bool hasPath(PathID handle) const;
 
   protected:
     ~PathManager() override;
     void reset(const Context *context) override;
 
   private:
-    ResourceMap<Path> mPaths;
+    ResourceMap<Path, PathID> mPaths;
 };
 
 class FramebufferManager
diff --git a/src/libANGLE/capture_gles_ext_autogen.cpp b/src/libANGLE/capture_gles_ext_autogen.cpp
index 2ed9b68..d37d653 100644
--- a/src/libANGLE/capture_gles_ext_autogen.cpp
+++ b/src/libANGLE/capture_gles_ext_autogen.cpp
@@ -2765,12 +2765,12 @@
 
 CallCapture CaptureDeletePathsCHROMIUM(const Context *context,
                                        bool isCallValid,
-                                       GLuint first,
+                                       PathID firstPacked,
                                        GLsizei range)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("first", ParamType::TGLuint, first);
+    paramBuffer.addValueParam("firstPacked", ParamType::TPathID, firstPacked);
     paramBuffer.addValueParam("range", ParamType::TGLsizei, range);
 
     return CallCapture(gl::EntryPoint::DeletePathsCHROMIUM, std::move(paramBuffer));
@@ -2778,12 +2778,12 @@
 
 CallCapture CaptureIsPathCHROMIUM(const Context *context,
                                   bool isCallValid,
-                                  GLuint path,
+                                  PathID pathPacked,
                                   GLboolean returnValue)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
 
     ParamCapture returnValueCapture("returnValue", ParamType::TGLboolean);
     InitParamValue(ParamType::TGLboolean, returnValue, &returnValueCapture.value);
@@ -2794,7 +2794,7 @@
 
 CallCapture CapturePathCommandsCHROMIUM(const Context *context,
                                         bool isCallValid,
-                                        GLuint path,
+                                        PathID pathPacked,
                                         GLsizei numCommands,
                                         const GLubyte *commands,
                                         GLsizei numCoords,
@@ -2803,12 +2803,12 @@
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addValueParam("numCommands", ParamType::TGLsizei, numCommands);
 
     ParamCapture commandsParam("commands", ParamType::TGLubyteConstPointer);
     InitParamValue(ParamType::TGLubyteConstPointer, commands, &commandsParam.value);
-    CapturePathCommandsCHROMIUM_commands(context, isCallValid, path, numCommands, commands,
+    CapturePathCommandsCHROMIUM_commands(context, isCallValid, pathPacked, numCommands, commands,
                                          numCoords, coordType, coords, &commandsParam);
     paramBuffer.addParam(std::move(commandsParam));
 
@@ -2817,8 +2817,8 @@
 
     ParamCapture coordsParam("coords", ParamType::TvoidConstPointer);
     InitParamValue(ParamType::TvoidConstPointer, coords, &coordsParam.value);
-    CapturePathCommandsCHROMIUM_coords(context, isCallValid, path, numCommands, commands, numCoords,
-                                       coordType, coords, &coordsParam);
+    CapturePathCommandsCHROMIUM_coords(context, isCallValid, pathPacked, numCommands, commands,
+                                       numCoords, coordType, coords, &coordsParam);
     paramBuffer.addParam(std::move(coordsParam));
 
     return CallCapture(gl::EntryPoint::PathCommandsCHROMIUM, std::move(paramBuffer));
@@ -2826,13 +2826,13 @@
 
 CallCapture CapturePathParameterfCHROMIUM(const Context *context,
                                           bool isCallValid,
-                                          GLuint path,
+                                          PathID pathPacked,
                                           GLenum pname,
                                           GLfloat value)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("pname", GLenumGroup::DefaultGroup, ParamType::TGLenum, pname);
     paramBuffer.addValueParam("value", ParamType::TGLfloat, value);
 
@@ -2841,13 +2841,13 @@
 
 CallCapture CapturePathParameteriCHROMIUM(const Context *context,
                                           bool isCallValid,
-                                          GLuint path,
+                                          PathID pathPacked,
                                           GLenum pname,
                                           GLint value)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("pname", GLenumGroup::DefaultGroup, ParamType::TGLenum, pname);
     paramBuffer.addValueParam("value", ParamType::TGLint, value);
 
@@ -2856,18 +2856,19 @@
 
 CallCapture CaptureGetPathParameterfvCHROMIUM(const Context *context,
                                               bool isCallValid,
-                                              GLuint path,
+                                              PathID pathPacked,
                                               GLenum pname,
                                               GLfloat *value)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("pname", GLenumGroup::DefaultGroup, ParamType::TGLenum, pname);
 
     ParamCapture valueParam("value", ParamType::TGLfloatPointer);
     InitParamValue(ParamType::TGLfloatPointer, value, &valueParam.value);
-    CaptureGetPathParameterfvCHROMIUM_value(context, isCallValid, path, pname, value, &valueParam);
+    CaptureGetPathParameterfvCHROMIUM_value(context, isCallValid, pathPacked, pname, value,
+                                            &valueParam);
     paramBuffer.addParam(std::move(valueParam));
 
     return CallCapture(gl::EntryPoint::GetPathParameterfvCHROMIUM, std::move(paramBuffer));
@@ -2875,18 +2876,19 @@
 
 CallCapture CaptureGetPathParameterivCHROMIUM(const Context *context,
                                               bool isCallValid,
-                                              GLuint path,
+                                              PathID pathPacked,
                                               GLenum pname,
                                               GLint *value)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("pname", GLenumGroup::DefaultGroup, ParamType::TGLenum, pname);
 
     ParamCapture valueParam("value", ParamType::TGLintPointer);
     InitParamValue(ParamType::TGLintPointer, value, &valueParam.value);
-    CaptureGetPathParameterivCHROMIUM_value(context, isCallValid, path, pname, value, &valueParam);
+    CaptureGetPathParameterivCHROMIUM_value(context, isCallValid, pathPacked, pname, value,
+                                            &valueParam);
     paramBuffer.addParam(std::move(valueParam));
 
     return CallCapture(gl::EntryPoint::GetPathParameterivCHROMIUM, std::move(paramBuffer));
@@ -2909,13 +2911,13 @@
 
 CallCapture CaptureStencilFillPathCHROMIUM(const Context *context,
                                            bool isCallValid,
-                                           GLuint path,
+                                           PathID pathPacked,
                                            GLenum fillMode,
                                            GLuint mask)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("fillMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, fillMode);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
 
@@ -2924,13 +2926,13 @@
 
 CallCapture CaptureStencilStrokePathCHROMIUM(const Context *context,
                                              bool isCallValid,
-                                             GLuint path,
+                                             PathID pathPacked,
                                              GLint reference,
                                              GLuint mask)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addValueParam("reference", ParamType::TGLint, reference);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
 
@@ -2939,12 +2941,12 @@
 
 CallCapture CaptureCoverFillPathCHROMIUM(const Context *context,
                                          bool isCallValid,
-                                         GLuint path,
+                                         PathID pathPacked,
                                          GLenum coverMode)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
 
     return CallCapture(gl::EntryPoint::CoverFillPathCHROMIUM, std::move(paramBuffer));
@@ -2952,12 +2954,12 @@
 
 CallCapture CaptureCoverStrokePathCHROMIUM(const Context *context,
                                            bool isCallValid,
-                                           GLuint path,
+                                           PathID pathPacked,
                                            GLenum coverMode)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
 
     return CallCapture(gl::EntryPoint::CoverStrokePathCHROMIUM, std::move(paramBuffer));
@@ -2965,14 +2967,14 @@
 
 CallCapture CaptureStencilThenCoverFillPathCHROMIUM(const Context *context,
                                                     bool isCallValid,
-                                                    GLuint path,
+                                                    PathID pathPacked,
                                                     GLenum fillMode,
                                                     GLuint mask,
                                                     GLenum coverMode)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addEnumParam("fillMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, fillMode);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
@@ -2982,14 +2984,14 @@
 
 CallCapture CaptureStencilThenCoverStrokePathCHROMIUM(const Context *context,
                                                       bool isCallValid,
-                                                      GLuint path,
+                                                      PathID pathPacked,
                                                       GLint reference,
                                                       GLuint mask,
                                                       GLenum coverMode)
 {
     ParamBuffer paramBuffer;
 
-    paramBuffer.addValueParam("path", ParamType::TGLuint, path);
+    paramBuffer.addValueParam("pathPacked", ParamType::TPathID, pathPacked);
     paramBuffer.addValueParam("reference", ParamType::TGLint, reference);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
@@ -3002,7 +3004,7 @@
                                                   GLsizei numPath,
                                                   GLenum pathNameType,
                                                   const void *paths,
-                                                  GLuint pathBase,
+                                                  PathID pathBasePacked,
                                                   GLenum coverMode,
                                                   GLenum transformType,
                                                   const GLfloat *transformValues)
@@ -3016,11 +3018,11 @@
     ParamCapture pathsParam("paths", ParamType::TvoidConstPointer);
     InitParamValue(ParamType::TvoidConstPointer, paths, &pathsParam.value);
     CaptureCoverFillPathInstancedCHROMIUM_paths(context, isCallValid, numPath, pathNameType, paths,
-                                                pathBase, coverMode, transformType, transformValues,
-                                                &pathsParam);
+                                                pathBasePacked, coverMode, transformType,
+                                                transformValues, &pathsParam);
     paramBuffer.addParam(std::move(pathsParam));
 
-    paramBuffer.addValueParam("pathBase", ParamType::TGLuint, pathBase);
+    paramBuffer.addValueParam("pathBasePacked", ParamType::TPathID, pathBasePacked);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
     paramBuffer.addEnumParam("transformType", GLenumGroup::DefaultGroup, ParamType::TGLenum,
                              transformType);
@@ -3028,8 +3030,8 @@
     ParamCapture transformValuesParam("transformValues", ParamType::TGLfloatConstPointer);
     InitParamValue(ParamType::TGLfloatConstPointer, transformValues, &transformValuesParam.value);
     CaptureCoverFillPathInstancedCHROMIUM_transformValues(
-        context, isCallValid, numPath, pathNameType, paths, pathBase, coverMode, transformType,
-        transformValues, &transformValuesParam);
+        context, isCallValid, numPath, pathNameType, paths, pathBasePacked, coverMode,
+        transformType, transformValues, &transformValuesParam);
     paramBuffer.addParam(std::move(transformValuesParam));
 
     return CallCapture(gl::EntryPoint::CoverFillPathInstancedCHROMIUM, std::move(paramBuffer));
@@ -3040,7 +3042,7 @@
                                                     GLsizei numPath,
                                                     GLenum pathNameType,
                                                     const void *paths,
-                                                    GLuint pathBase,
+                                                    PathID pathBasePacked,
                                                     GLenum coverMode,
                                                     GLenum transformType,
                                                     const GLfloat *transformValues)
@@ -3054,11 +3056,11 @@
     ParamCapture pathsParam("paths", ParamType::TvoidConstPointer);
     InitParamValue(ParamType::TvoidConstPointer, paths, &pathsParam.value);
     CaptureCoverStrokePathInstancedCHROMIUM_paths(context, isCallValid, numPath, pathNameType,
-                                                  paths, pathBase, coverMode, transformType,
+                                                  paths, pathBasePacked, coverMode, transformType,
                                                   transformValues, &pathsParam);
     paramBuffer.addParam(std::move(pathsParam));
 
-    paramBuffer.addValueParam("pathBase", ParamType::TGLuint, pathBase);
+    paramBuffer.addValueParam("pathBasePacked", ParamType::TPathID, pathBasePacked);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
     paramBuffer.addEnumParam("transformType", GLenumGroup::DefaultGroup, ParamType::TGLenum,
                              transformType);
@@ -3066,8 +3068,8 @@
     ParamCapture transformValuesParam("transformValues", ParamType::TGLfloatConstPointer);
     InitParamValue(ParamType::TGLfloatConstPointer, transformValues, &transformValuesParam.value);
     CaptureCoverStrokePathInstancedCHROMIUM_transformValues(
-        context, isCallValid, numPath, pathNameType, paths, pathBase, coverMode, transformType,
-        transformValues, &transformValuesParam);
+        context, isCallValid, numPath, pathNameType, paths, pathBasePacked, coverMode,
+        transformType, transformValues, &transformValuesParam);
     paramBuffer.addParam(std::move(transformValuesParam));
 
     return CallCapture(gl::EntryPoint::CoverStrokePathInstancedCHROMIUM, std::move(paramBuffer));
@@ -3078,7 +3080,7 @@
                                                       GLsizei numPath,
                                                       GLenum pathNameType,
                                                       const void *paths,
-                                                      GLuint pathBase,
+                                                      PathID pathBasePacked,
                                                       GLint reference,
                                                       GLuint mask,
                                                       GLenum transformType,
@@ -3093,11 +3095,11 @@
     ParamCapture pathsParam("paths", ParamType::TvoidConstPointer);
     InitParamValue(ParamType::TvoidConstPointer, paths, &pathsParam.value);
     CaptureStencilStrokePathInstancedCHROMIUM_paths(context, isCallValid, numPath, pathNameType,
-                                                    paths, pathBase, reference, mask, transformType,
-                                                    transformValues, &pathsParam);
+                                                    paths, pathBasePacked, reference, mask,
+                                                    transformType, transformValues, &pathsParam);
     paramBuffer.addParam(std::move(pathsParam));
 
-    paramBuffer.addValueParam("pathBase", ParamType::TGLuint, pathBase);
+    paramBuffer.addValueParam("pathBasePacked", ParamType::TPathID, pathBasePacked);
     paramBuffer.addValueParam("reference", ParamType::TGLint, reference);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
     paramBuffer.addEnumParam("transformType", GLenumGroup::DefaultGroup, ParamType::TGLenum,
@@ -3106,7 +3108,7 @@
     ParamCapture transformValuesParam("transformValues", ParamType::TGLfloatConstPointer);
     InitParamValue(ParamType::TGLfloatConstPointer, transformValues, &transformValuesParam.value);
     CaptureStencilStrokePathInstancedCHROMIUM_transformValues(
-        context, isCallValid, numPath, pathNameType, paths, pathBase, reference, mask,
+        context, isCallValid, numPath, pathNameType, paths, pathBasePacked, reference, mask,
         transformType, transformValues, &transformValuesParam);
     paramBuffer.addParam(std::move(transformValuesParam));
 
@@ -3118,7 +3120,7 @@
                                                     GLsizei numPaths,
                                                     GLenum pathNameType,
                                                     const void *paths,
-                                                    GLuint pathBase,
+                                                    PathID pathBasePacked,
                                                     GLenum fillMode,
                                                     GLuint mask,
                                                     GLenum transformType,
@@ -3133,11 +3135,11 @@
     ParamCapture pathsParam("paths", ParamType::TvoidConstPointer);
     InitParamValue(ParamType::TvoidConstPointer, paths, &pathsParam.value);
     CaptureStencilFillPathInstancedCHROMIUM_paths(context, isCallValid, numPaths, pathNameType,
-                                                  paths, pathBase, fillMode, mask, transformType,
-                                                  transformValues, &pathsParam);
+                                                  paths, pathBasePacked, fillMode, mask,
+                                                  transformType, transformValues, &pathsParam);
     paramBuffer.addParam(std::move(pathsParam));
 
-    paramBuffer.addValueParam("pathBase", ParamType::TGLuint, pathBase);
+    paramBuffer.addValueParam("pathBasePacked", ParamType::TPathID, pathBasePacked);
     paramBuffer.addEnumParam("fillMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, fillMode);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
     paramBuffer.addEnumParam("transformType", GLenumGroup::DefaultGroup, ParamType::TGLenum,
@@ -3146,7 +3148,7 @@
     ParamCapture transformValuesParam("transformValues", ParamType::TGLfloatConstPointer);
     InitParamValue(ParamType::TGLfloatConstPointer, transformValues, &transformValuesParam.value);
     CaptureStencilFillPathInstancedCHROMIUM_transformValues(
-        context, isCallValid, numPaths, pathNameType, paths, pathBase, fillMode, mask,
+        context, isCallValid, numPaths, pathNameType, paths, pathBasePacked, fillMode, mask,
         transformType, transformValues, &transformValuesParam);
     paramBuffer.addParam(std::move(transformValuesParam));
 
@@ -3158,7 +3160,7 @@
                                                              GLsizei numPaths,
                                                              GLenum pathNameType,
                                                              const void *paths,
-                                                             GLuint pathBase,
+                                                             PathID pathBasePacked,
                                                              GLenum fillMode,
                                                              GLuint mask,
                                                              GLenum coverMode,
@@ -3174,11 +3176,11 @@
     ParamCapture pathsParam("paths", ParamType::TvoidConstPointer);
     InitParamValue(ParamType::TvoidConstPointer, paths, &pathsParam.value);
     CaptureStencilThenCoverFillPathInstancedCHROMIUM_paths(
-        context, isCallValid, numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode,
-        transformType, transformValues, &pathsParam);
+        context, isCallValid, numPaths, pathNameType, paths, pathBasePacked, fillMode, mask,
+        coverMode, transformType, transformValues, &pathsParam);
     paramBuffer.addParam(std::move(pathsParam));
 
-    paramBuffer.addValueParam("pathBase", ParamType::TGLuint, pathBase);
+    paramBuffer.addValueParam("pathBasePacked", ParamType::TPathID, pathBasePacked);
     paramBuffer.addEnumParam("fillMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, fillMode);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
@@ -3188,8 +3190,8 @@
     ParamCapture transformValuesParam("transformValues", ParamType::TGLfloatConstPointer);
     InitParamValue(ParamType::TGLfloatConstPointer, transformValues, &transformValuesParam.value);
     CaptureStencilThenCoverFillPathInstancedCHROMIUM_transformValues(
-        context, isCallValid, numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode,
-        transformType, transformValues, &transformValuesParam);
+        context, isCallValid, numPaths, pathNameType, paths, pathBasePacked, fillMode, mask,
+        coverMode, transformType, transformValues, &transformValuesParam);
     paramBuffer.addParam(std::move(transformValuesParam));
 
     return CallCapture(gl::EntryPoint::StencilThenCoverFillPathInstancedCHROMIUM,
@@ -3201,7 +3203,7 @@
                                                                GLsizei numPaths,
                                                                GLenum pathNameType,
                                                                const void *paths,
-                                                               GLuint pathBase,
+                                                               PathID pathBasePacked,
                                                                GLint reference,
                                                                GLuint mask,
                                                                GLenum coverMode,
@@ -3217,11 +3219,11 @@
     ParamCapture pathsParam("paths", ParamType::TvoidConstPointer);
     InitParamValue(ParamType::TvoidConstPointer, paths, &pathsParam.value);
     CaptureStencilThenCoverStrokePathInstancedCHROMIUM_paths(
-        context, isCallValid, numPaths, pathNameType, paths, pathBase, reference, mask, coverMode,
-        transformType, transformValues, &pathsParam);
+        context, isCallValid, numPaths, pathNameType, paths, pathBasePacked, reference, mask,
+        coverMode, transformType, transformValues, &pathsParam);
     paramBuffer.addParam(std::move(pathsParam));
 
-    paramBuffer.addValueParam("pathBase", ParamType::TGLuint, pathBase);
+    paramBuffer.addValueParam("pathBasePacked", ParamType::TPathID, pathBasePacked);
     paramBuffer.addValueParam("reference", ParamType::TGLint, reference);
     paramBuffer.addValueParam("mask", ParamType::TGLuint, mask);
     paramBuffer.addEnumParam("coverMode", GLenumGroup::DefaultGroup, ParamType::TGLenum, coverMode);
@@ -3231,8 +3233,8 @@
     ParamCapture transformValuesParam("transformValues", ParamType::TGLfloatConstPointer);
     InitParamValue(ParamType::TGLfloatConstPointer, transformValues, &transformValuesParam.value);
     CaptureStencilThenCoverStrokePathInstancedCHROMIUM_transformValues(
-        context, isCallValid, numPaths, pathNameType, paths, pathBase, reference, mask, coverMode,
-        transformType, transformValues, &transformValuesParam);
+        context, isCallValid, numPaths, pathNameType, paths, pathBasePacked, reference, mask,
+        coverMode, transformType, transformValues, &transformValuesParam);
     paramBuffer.addParam(std::move(transformValuesParam));
 
     return CallCapture(gl::EntryPoint::StencilThenCoverStrokePathInstancedCHROMIUM,
diff --git a/src/libANGLE/capture_gles_ext_autogen.h b/src/libANGLE/capture_gles_ext_autogen.h
index f49ef38..90b6291 100644
--- a/src/libANGLE/capture_gles_ext_autogen.h
+++ b/src/libANGLE/capture_gles_ext_autogen.h
@@ -794,15 +794,15 @@
                                            GLuint returnValue);
 angle::CallCapture CaptureDeletePathsCHROMIUM(const Context *context,
                                               bool isCallValid,
-                                              GLuint first,
+                                              PathID firstPacked,
                                               GLsizei range);
 angle::CallCapture CaptureIsPathCHROMIUM(const Context *context,
                                          bool isCallValid,
-                                         GLuint path,
+                                         PathID pathPacked,
                                          GLboolean returnValue);
 angle::CallCapture CapturePathCommandsCHROMIUM(const Context *context,
                                                bool isCallValid,
-                                               GLuint path,
+                                               PathID pathPacked,
                                                GLsizei numCommands,
                                                const GLubyte *commands,
                                                GLsizei numCoords,
@@ -810,22 +810,22 @@
                                                const void *coords);
 angle::CallCapture CapturePathParameterfCHROMIUM(const Context *context,
                                                  bool isCallValid,
-                                                 GLuint path,
+                                                 PathID pathPacked,
                                                  GLenum pname,
                                                  GLfloat value);
 angle::CallCapture CapturePathParameteriCHROMIUM(const Context *context,
                                                  bool isCallValid,
-                                                 GLuint path,
+                                                 PathID pathPacked,
                                                  GLenum pname,
                                                  GLint value);
 angle::CallCapture CaptureGetPathParameterfvCHROMIUM(const Context *context,
                                                      bool isCallValid,
-                                                     GLuint path,
+                                                     PathID pathPacked,
                                                      GLenum pname,
                                                      GLfloat *value);
 angle::CallCapture CaptureGetPathParameterivCHROMIUM(const Context *context,
                                                      bool isCallValid,
-                                                     GLuint path,
+                                                     PathID pathPacked,
                                                      GLenum pname,
                                                      GLint *value);
 angle::CallCapture CapturePathStencilFuncCHROMIUM(const Context *context,
@@ -835,31 +835,31 @@
                                                   GLuint mask);
 angle::CallCapture CaptureStencilFillPathCHROMIUM(const Context *context,
                                                   bool isCallValid,
-                                                  GLuint path,
+                                                  PathID pathPacked,
                                                   GLenum fillMode,
                                                   GLuint mask);
 angle::CallCapture CaptureStencilStrokePathCHROMIUM(const Context *context,
                                                     bool isCallValid,
-                                                    GLuint path,
+                                                    PathID pathPacked,
                                                     GLint reference,
                                                     GLuint mask);
 angle::CallCapture CaptureCoverFillPathCHROMIUM(const Context *context,
                                                 bool isCallValid,
-                                                GLuint path,
+                                                PathID pathPacked,
                                                 GLenum coverMode);
 angle::CallCapture CaptureCoverStrokePathCHROMIUM(const Context *context,
                                                   bool isCallValid,
-                                                  GLuint path,
+                                                  PathID pathPacked,
                                                   GLenum coverMode);
 angle::CallCapture CaptureStencilThenCoverFillPathCHROMIUM(const Context *context,
                                                            bool isCallValid,
-                                                           GLuint path,
+                                                           PathID pathPacked,
                                                            GLenum fillMode,
                                                            GLuint mask,
                                                            GLenum coverMode);
 angle::CallCapture CaptureStencilThenCoverStrokePathCHROMIUM(const Context *context,
                                                              bool isCallValid,
-                                                             GLuint path,
+                                                             PathID pathPacked,
                                                              GLint reference,
                                                              GLuint mask,
                                                              GLenum coverMode);
@@ -868,7 +868,7 @@
                                                          GLsizei numPath,
                                                          GLenum pathNameType,
                                                          const void *paths,
-                                                         GLuint pathBase,
+                                                         PathID pathBasePacked,
                                                          GLenum coverMode,
                                                          GLenum transformType,
                                                          const GLfloat *transformValues);
@@ -877,7 +877,7 @@
                                                            GLsizei numPath,
                                                            GLenum pathNameType,
                                                            const void *paths,
-                                                           GLuint pathBase,
+                                                           PathID pathBasePacked,
                                                            GLenum coverMode,
                                                            GLenum transformType,
                                                            const GLfloat *transformValues);
@@ -886,7 +886,7 @@
                                                              GLsizei numPath,
                                                              GLenum pathNameType,
                                                              const void *paths,
-                                                             GLuint pathBase,
+                                                             PathID pathBasePacked,
                                                              GLint reference,
                                                              GLuint mask,
                                                              GLenum transformType,
@@ -896,7 +896,7 @@
                                                            GLsizei numPaths,
                                                            GLenum pathNameType,
                                                            const void *paths,
-                                                           GLuint pathBase,
+                                                           PathID pathBasePacked,
                                                            GLenum fillMode,
                                                            GLuint mask,
                                                            GLenum transformType,
@@ -906,7 +906,7 @@
                                                                     GLsizei numPaths,
                                                                     GLenum pathNameType,
                                                                     const void *paths,
-                                                                    GLuint pathBase,
+                                                                    PathID pathBasePacked,
                                                                     GLenum fillMode,
                                                                     GLuint mask,
                                                                     GLenum coverMode,
@@ -918,7 +918,7 @@
     GLsizei numPaths,
     GLenum pathNameType,
     const void *paths,
-    GLuint pathBase,
+    PathID pathBasePacked,
     GLint reference,
     GLuint mask,
     GLenum coverMode,
@@ -3018,7 +3018,7 @@
                                        angle::ParamCapture *paramCapture);
 void CapturePathCommandsCHROMIUM_commands(const Context *context,
                                           bool isCallValid,
-                                          GLuint path,
+                                          PathID pathPacked,
                                           GLsizei numCommands,
                                           const GLubyte *commands,
                                           GLsizei numCoords,
@@ -3027,7 +3027,7 @@
                                           angle::ParamCapture *paramCapture);
 void CapturePathCommandsCHROMIUM_coords(const Context *context,
                                         bool isCallValid,
-                                        GLuint path,
+                                        PathID pathPacked,
                                         GLsizei numCommands,
                                         const GLubyte *commands,
                                         GLsizei numCoords,
@@ -3036,13 +3036,13 @@
                                         angle::ParamCapture *paramCapture);
 void CaptureGetPathParameterfvCHROMIUM_value(const Context *context,
                                              bool isCallValid,
-                                             GLuint path,
+                                             PathID pathPacked,
                                              GLenum pname,
                                              GLfloat *value,
                                              angle::ParamCapture *paramCapture);
 void CaptureGetPathParameterivCHROMIUM_value(const Context *context,
                                              bool isCallValid,
-                                             GLuint path,
+                                             PathID pathPacked,
                                              GLenum pname,
                                              GLint *value,
                                              angle::ParamCapture *paramCapture);
@@ -3051,7 +3051,7 @@
                                                  GLsizei numPath,
                                                  GLenum pathNameType,
                                                  const void *paths,
-                                                 GLuint pathBase,
+                                                 PathID pathBasePacked,
                                                  GLenum coverMode,
                                                  GLenum transformType,
                                                  const GLfloat *transformValues,
@@ -3061,7 +3061,7 @@
                                                            GLsizei numPath,
                                                            GLenum pathNameType,
                                                            const void *paths,
-                                                           GLuint pathBase,
+                                                           PathID pathBasePacked,
                                                            GLenum coverMode,
                                                            GLenum transformType,
                                                            const GLfloat *transformValues,
@@ -3071,7 +3071,7 @@
                                                    GLsizei numPath,
                                                    GLenum pathNameType,
                                                    const void *paths,
-                                                   GLuint pathBase,
+                                                   PathID pathBasePacked,
                                                    GLenum coverMode,
                                                    GLenum transformType,
                                                    const GLfloat *transformValues,
@@ -3081,7 +3081,7 @@
                                                              GLsizei numPath,
                                                              GLenum pathNameType,
                                                              const void *paths,
-                                                             GLuint pathBase,
+                                                             PathID pathBasePacked,
                                                              GLenum coverMode,
                                                              GLenum transformType,
                                                              const GLfloat *transformValues,
@@ -3091,7 +3091,7 @@
                                                      GLsizei numPath,
                                                      GLenum pathNameType,
                                                      const void *paths,
-                                                     GLuint pathBase,
+                                                     PathID pathBasePacked,
                                                      GLint reference,
                                                      GLuint mask,
                                                      GLenum transformType,
@@ -3102,7 +3102,7 @@
                                                                GLsizei numPath,
                                                                GLenum pathNameType,
                                                                const void *paths,
-                                                               GLuint pathBase,
+                                                               PathID pathBasePacked,
                                                                GLint reference,
                                                                GLuint mask,
                                                                GLenum transformType,
@@ -3113,7 +3113,7 @@
                                                    GLsizei numPaths,
                                                    GLenum pathNameType,
                                                    const void *paths,
-                                                   GLuint pathBase,
+                                                   PathID pathBasePacked,
                                                    GLenum fillMode,
                                                    GLuint mask,
                                                    GLenum transformType,
@@ -3124,7 +3124,7 @@
                                                              GLsizei numPaths,
                                                              GLenum pathNameType,
                                                              const void *paths,
-                                                             GLuint pathBase,
+                                                             PathID pathBasePacked,
                                                              GLenum fillMode,
                                                              GLuint mask,
                                                              GLenum transformType,
@@ -3135,7 +3135,7 @@
                                                             GLsizei numPaths,
                                                             GLenum pathNameType,
                                                             const void *paths,
-                                                            GLuint pathBase,
+                                                            PathID pathBasePacked,
                                                             GLenum fillMode,
                                                             GLuint mask,
                                                             GLenum coverMode,
@@ -3148,7 +3148,7 @@
     GLsizei numPaths,
     GLenum pathNameType,
     const void *paths,
-    GLuint pathBase,
+    PathID pathBasePacked,
     GLenum fillMode,
     GLuint mask,
     GLenum coverMode,
@@ -3160,7 +3160,7 @@
                                                               GLsizei numPaths,
                                                               GLenum pathNameType,
                                                               const void *paths,
-                                                              GLuint pathBase,
+                                                              PathID pathBasePacked,
                                                               GLint reference,
                                                               GLuint mask,
                                                               GLenum coverMode,
@@ -3173,7 +3173,7 @@
     GLsizei numPaths,
     GLenum pathNameType,
     const void *paths,
-    GLuint pathBase,
+    PathID pathBasePacked,
     GLint reference,
     GLuint mask,
     GLenum coverMode,
diff --git a/src/libANGLE/capture_gles_ext_params.cpp b/src/libANGLE/capture_gles_ext_params.cpp
index ba15ab2..81689fa 100644
--- a/src/libANGLE/capture_gles_ext_params.cpp
+++ b/src/libANGLE/capture_gles_ext_params.cpp
@@ -1855,7 +1855,7 @@
 
 void CapturePathCommandsCHROMIUM_commands(const Context *context,
                                           bool isCallValid,
-                                          GLuint path,
+                                          PathID path,
                                           GLsizei numCommands,
                                           const GLubyte *commands,
                                           GLsizei numCoords,
@@ -1868,7 +1868,7 @@
 
 void CapturePathCommandsCHROMIUM_coords(const Context *context,
                                         bool isCallValid,
-                                        GLuint path,
+                                        PathID path,
                                         GLsizei numCommands,
                                         const GLubyte *commands,
                                         GLsizei numCoords,
@@ -1881,7 +1881,7 @@
 
 void CaptureGetPathParameterfvCHROMIUM_value(const Context *context,
                                              bool isCallValid,
-                                             GLuint path,
+                                             PathID path,
                                              GLenum pname,
                                              GLfloat *value,
                                              ParamCapture *paramCapture)
@@ -1891,7 +1891,7 @@
 
 void CaptureGetPathParameterivCHROMIUM_value(const Context *context,
                                              bool isCallValid,
-                                             GLuint path,
+                                             PathID path,
                                              GLenum pname,
                                              GLint *value,
                                              ParamCapture *paramCapture)
@@ -1904,7 +1904,7 @@
                                                  GLsizei numPath,
                                                  GLenum pathNameType,
                                                  const void *paths,
-                                                 GLuint pathBase,
+                                                 PathID pathBase,
                                                  GLenum coverMode,
                                                  GLenum transformType,
                                                  const GLfloat *transformValues,
@@ -1918,7 +1918,7 @@
                                                            GLsizei numPath,
                                                            GLenum pathNameType,
                                                            const void *paths,
-                                                           GLuint pathBase,
+                                                           PathID pathBase,
                                                            GLenum coverMode,
                                                            GLenum transformType,
                                                            const GLfloat *transformValues,
@@ -1932,7 +1932,7 @@
                                                    GLsizei numPath,
                                                    GLenum pathNameType,
                                                    const void *paths,
-                                                   GLuint pathBase,
+                                                   PathID pathBase,
                                                    GLenum coverMode,
                                                    GLenum transformType,
                                                    const GLfloat *transformValues,
@@ -1946,7 +1946,7 @@
                                                              GLsizei numPath,
                                                              GLenum pathNameType,
                                                              const void *paths,
-                                                             GLuint pathBase,
+                                                             PathID pathBase,
                                                              GLenum coverMode,
                                                              GLenum transformType,
                                                              const GLfloat *transformValues,
@@ -1960,7 +1960,7 @@
                                                      GLsizei numPath,
                                                      GLenum pathNameType,
                                                      const void *paths,
-                                                     GLuint pathBase,
+                                                     PathID pathBase,
                                                      GLint reference,
                                                      GLuint mask,
                                                      GLenum transformType,
@@ -1975,7 +1975,7 @@
                                                                GLsizei numPath,
                                                                GLenum pathNameType,
                                                                const void *paths,
-                                                               GLuint pathBase,
+                                                               PathID pathBase,
                                                                GLint reference,
                                                                GLuint mask,
                                                                GLenum transformType,
@@ -1990,7 +1990,7 @@
                                                    GLsizei numPaths,
                                                    GLenum pathNameType,
                                                    const void *paths,
-                                                   GLuint pathBase,
+                                                   PathID pathBase,
                                                    GLenum fillMode,
                                                    GLuint mask,
                                                    GLenum transformType,
@@ -2005,7 +2005,7 @@
                                                              GLsizei numPaths,
                                                              GLenum pathNameType,
                                                              const void *paths,
-                                                             GLuint pathBase,
+                                                             PathID pathBase,
                                                              GLenum fillMode,
                                                              GLuint mask,
                                                              GLenum transformType,
@@ -2020,7 +2020,7 @@
                                                             GLsizei numPaths,
                                                             GLenum pathNameType,
                                                             const void *paths,
-                                                            GLuint pathBase,
+                                                            PathID pathBase,
                                                             GLenum fillMode,
                                                             GLuint mask,
                                                             GLenum coverMode,
@@ -2037,7 +2037,7 @@
     GLsizei numPaths,
     GLenum pathNameType,
     const void *paths,
-    GLuint pathBase,
+    PathID pathBase,
     GLenum fillMode,
     GLuint mask,
     GLenum coverMode,
@@ -2053,7 +2053,7 @@
                                                               GLsizei numPaths,
                                                               GLenum pathNameType,
                                                               const void *paths,
-                                                              GLuint pathBase,
+                                                              PathID pathBase,
                                                               GLint reference,
                                                               GLuint mask,
                                                               GLenum coverMode,
@@ -2070,7 +2070,7 @@
     GLsizei numPaths,
     GLenum pathNameType,
     const void *paths,
-    GLuint pathBase,
+    PathID pathBase,
     GLint reference,
     GLuint mask,
     GLenum coverMode,
diff --git a/src/libANGLE/frame_capture_utils_autogen.cpp b/src/libANGLE/frame_capture_utils_autogen.cpp
index f72c3e7..a866208 100644
--- a/src/libANGLE/frame_capture_utils_autogen.cpp
+++ b/src/libANGLE/frame_capture_utils_autogen.cpp
@@ -259,6 +259,9 @@
         case ParamType::TMatrixType:
             WriteParamValueToStream<ParamType::TMatrixType>(os, paramValue.MatrixTypeVal);
             break;
+        case ParamType::TPathID:
+            WriteParamValueToStream<ParamType::TPathID>(os, paramValue.PathIDVal);
+            break;
         case ParamType::TPointParameter:
             WriteParamValueToStream<ParamType::TPointParameter>(os, paramValue.PointParameterVal);
             break;
@@ -506,6 +509,8 @@
             return "GLenum";
         case ParamType::TMatrixType:
             return "GLenum";
+        case ParamType::TPathID:
+            return "GLuint";
         case ParamType::TPointParameter:
             return "GLenum";
         case ParamType::TPrimitiveMode:
diff --git a/src/libANGLE/frame_capture_utils_autogen.h b/src/libANGLE/frame_capture_utils_autogen.h
index 919cb8a..ae48e6d 100644
--- a/src/libANGLE/frame_capture_utils_autogen.h
+++ b/src/libANGLE/frame_capture_utils_autogen.h
@@ -88,6 +88,7 @@
     TLogicalOperation,
     TMaterialParameter,
     TMatrixType,
+    TPathID,
     TPointParameter,
     TPrimitiveMode,
     TProvokingVertexConvention,
@@ -190,6 +191,7 @@
     gl::LogicalOperation LogicalOperationVal;
     gl::MaterialParameter MaterialParameterVal;
     gl::MatrixType MatrixTypeVal;
+    gl::PathID PathIDVal;
     gl::PointParameter PointParameterVal;
     gl::PrimitiveMode PrimitiveModeVal;
     gl::ProvokingVertexConvention ProvokingVertexConventionVal;
@@ -683,6 +685,12 @@
 }
 
 template <>
+inline gl::PathID GetParamVal<ParamType::TPathID, gl::PathID>(const ParamValue &value)
+{
+    return value.PathIDVal;
+}
+
+template <>
 inline gl::PointParameter GetParamVal<ParamType::TPointParameter, gl::PointParameter>(
     const ParamValue &value)
 {
@@ -1017,6 +1025,8 @@
             return GetParamVal<ParamType::TMaterialParameter, T>(value);
         case ParamType::TMatrixType:
             return GetParamVal<ParamType::TMatrixType, T>(value);
+        case ParamType::TPathID:
+            return GetParamVal<ParamType::TPathID, T>(value);
         case ParamType::TPointParameter:
             return GetParamVal<ParamType::TPointParameter, T>(value);
         case ParamType::TPrimitiveMode:
@@ -1525,6 +1535,12 @@
 }
 
 template <>
+inline void SetParamVal<ParamType::TPathID>(gl::PathID valueIn, ParamValue *valueOut)
+{
+    valueOut->PathIDVal = valueIn;
+}
+
+template <>
 inline void SetParamVal<ParamType::TPointParameter>(gl::PointParameter valueIn,
                                                     ParamValue *valueOut)
 {
@@ -1923,6 +1939,9 @@
         case ParamType::TMatrixType:
             SetParamVal<ParamType::TMatrixType>(valueIn, valueOut);
             break;
+        case ParamType::TPathID:
+            SetParamVal<ParamType::TPathID>(valueIn, valueOut);
+            break;
         case ParamType::TPointParameter:
             SetParamVal<ParamType::TPointParameter>(valueIn, valueOut);
             break;
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index 1b16173..edef271 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -70,14 +70,14 @@
 bool ValidatePathInstances(gl::Context *context,
                            GLsizei numPaths,
                            const void *paths,
-                           GLuint pathBase)
+                           PathID pathBase)
 {
     const auto *array = static_cast<const T *>(paths);
 
     for (GLsizei i = 0; i < numPaths; ++i)
     {
-        const GLuint pathName = array[i] + pathBase;
-        if (context->isPathGenerated(pathName) && !context->isPath(pathName))
+        const GLuint pathName = array[i] + pathBase.value;
+        if (context->isPathGenerated({pathName}) && !context->isPath({pathName}))
         {
             context->validationError(GL_INVALID_OPERATION, kNoSuchPath);
             return false;
@@ -90,7 +90,7 @@
                                      GLsizei numPaths,
                                      GLenum pathNameType,
                                      const void *paths,
-                                     GLuint pathBase,
+                                     PathID pathBase,
                                      GLenum transformType,
                                      const GLfloat *transformValues)
 {
@@ -3700,7 +3700,7 @@
     return true;
 }
 
-bool ValidateDeletePathsCHROMIUM(Context *context, GLuint path, GLsizei range)
+bool ValidateDeletePathsCHROMIUM(Context *context, PathID path, GLsizei range)
 {
     if (!context->getExtensions().pathRendering)
     {
@@ -3716,7 +3716,7 @@
         return false;
     }
 
-    angle::CheckedNumeric<std::uint32_t> checkedRange(path);
+    angle::CheckedNumeric<std::uint32_t> checkedRange(path.value);
     checkedRange += range;
 
     if (!angle::IsValueInRangeForNumericType<std::uint32_t>(range) || !checkedRange.IsValid())
@@ -3728,7 +3728,7 @@
 }
 
 bool ValidatePathCommandsCHROMIUM(Context *context,
-                                  GLuint path,
+                                  PathID path,
                                   GLsizei numCommands,
                                   const GLubyte *commands,
                                   GLsizei numCoords,
@@ -3849,7 +3849,7 @@
     return true;
 }
 
-bool ValidatePathParameterfCHROMIUM(Context *context, GLuint path, GLenum pname, GLfloat value)
+bool ValidatePathParameterfCHROMIUM(Context *context, PathID path, GLenum pname, GLfloat value)
 {
     if (!context->getExtensions().pathRendering)
     {
@@ -3914,13 +3914,13 @@
     return true;
 }
 
-bool ValidatePathParameteriCHROMIUM(Context *context, GLuint path, GLenum pname, GLint value)
+bool ValidatePathParameteriCHROMIUM(Context *context, PathID path, GLenum pname, GLint value)
 {
     // TODO(jmadill): Use proper clamping cast.
     return ValidatePathParameterfCHROMIUM(context, path, pname, static_cast<GLfloat>(value));
 }
 
-bool ValidateGetPathParameterfvCHROMIUM(Context *context, GLuint path, GLenum pname, GLfloat *value)
+bool ValidateGetPathParameterfvCHROMIUM(Context *context, PathID path, GLenum pname, GLfloat *value)
 {
     if (!context->getExtensions().pathRendering)
     {
@@ -3957,7 +3957,7 @@
     return true;
 }
 
-bool ValidateGetPathParameterivCHROMIUM(Context *context, GLuint path, GLenum pname, GLint *value)
+bool ValidateGetPathParameterivCHROMIUM(Context *context, PathID path, GLenum pname, GLint *value)
 {
     return ValidateGetPathParameterfvCHROMIUM(context, path, pname,
                                               reinterpret_cast<GLfloat *>(value));
@@ -3996,7 +3996,7 @@
 // However if the path object exists but has not been specified any
 // commands then an error is generated.
 
-bool ValidateStencilFillPathCHROMIUM(Context *context, GLuint path, GLenum fillMode, GLuint mask)
+bool ValidateStencilFillPathCHROMIUM(Context *context, PathID path, GLenum fillMode, GLuint mask)
 {
     if (!context->getExtensions().pathRendering)
     {
@@ -4029,7 +4029,7 @@
     return true;
 }
 
-bool ValidateStencilStrokePathCHROMIUM(Context *context, GLuint path, GLint reference, GLuint mask)
+bool ValidateStencilStrokePathCHROMIUM(Context *context, PathID path, GLint reference, GLuint mask)
 {
     if (!context->getExtensions().pathRendering)
     {
@@ -4046,7 +4046,7 @@
     return true;
 }
 
-bool ValidateCoverPathCHROMIUM(Context *context, GLuint path, GLenum coverMode)
+bool ValidateCoverPathCHROMIUM(Context *context, PathID path, GLenum coverMode)
 {
     if (!context->getExtensions().pathRendering)
     {
@@ -4071,18 +4071,18 @@
     return true;
 }
 
-bool ValidateCoverFillPathCHROMIUM(Context *context, GLuint path, GLenum coverMode)
+bool ValidateCoverFillPathCHROMIUM(Context *context, PathID path, GLenum coverMode)
 {
     return ValidateCoverPathCHROMIUM(context, path, coverMode);
 }
 
-bool ValidateCoverStrokePathCHROMIUM(Context *context, GLuint path, GLenum coverMode)
+bool ValidateCoverStrokePathCHROMIUM(Context *context, PathID path, GLenum coverMode)
 {
     return ValidateCoverPathCHROMIUM(context, path, coverMode);
 }
 
 bool ValidateStencilThenCoverFillPathCHROMIUM(Context *context,
-                                              GLuint path,
+                                              PathID path,
                                               GLenum fillMode,
                                               GLuint mask,
                                               GLenum coverMode)
@@ -4092,7 +4092,7 @@
 }
 
 bool ValidateStencilThenCoverStrokePathCHROMIUM(Context *context,
-                                                GLuint path,
+                                                PathID path,
                                                 GLint reference,
                                                 GLuint mask,
                                                 GLenum coverMode)
@@ -4101,7 +4101,7 @@
            ValidateCoverPathCHROMIUM(context, path, coverMode);
 }
 
-bool ValidateIsPathCHROMIUM(Context *context, GLuint path)
+bool ValidateIsPathCHROMIUM(Context *context, PathID path)
 {
     if (!context->getExtensions().pathRendering)
     {
@@ -4115,7 +4115,7 @@
                                             GLsizei numPaths,
                                             GLenum pathNameType,
                                             const void *paths,
-                                            GLuint pathBase,
+                                            PathID pathBase,
                                             GLenum coverMode,
                                             GLenum transformType,
                                             const GLfloat *transformValues)
@@ -4142,7 +4142,7 @@
                                               GLsizei numPaths,
                                               GLenum pathNameType,
                                               const void *paths,
-                                              GLuint pathBase,
+                                              PathID pathBase,
                                               GLenum coverMode,
                                               GLenum transformType,
                                               const GLfloat *transformValues)
@@ -4169,7 +4169,7 @@
                                               GLsizei numPaths,
                                               GLenum pathNameType,
                                               const void *paths,
-                                              GLuint pathBase,
+                                              PathID pathBase,
                                               GLenum fillMode,
                                               GLuint mask,
                                               GLenum transformType,
@@ -4202,7 +4202,7 @@
                                                 GLsizei numPaths,
                                                 GLenum pathNameType,
                                                 const void *paths,
-                                                GLuint pathBase,
+                                                PathID pathBase,
                                                 GLint reference,
                                                 GLuint mask,
                                                 GLenum transformType,
@@ -4221,7 +4221,7 @@
                                                        GLsizei numPaths,
                                                        GLenum pathNameType,
                                                        const void *paths,
-                                                       GLuint pathBase,
+                                                       PathID pathBase,
                                                        GLenum fillMode,
                                                        GLuint mask,
                                                        GLenum coverMode,
@@ -4266,7 +4266,7 @@
                                                          GLsizei numPaths,
                                                          GLenum pathNameType,
                                                          const void *paths,
-                                                         GLuint pathBase,
+                                                         PathID pathBase,
                                                          GLint reference,
                                                          GLuint mask,
                                                          GLenum coverMode,
diff --git a/src/libANGLE/validationESEXT_autogen.h b/src/libANGLE/validationESEXT_autogen.h
index 46c7bcd..70b0382 100644
--- a/src/libANGLE/validationESEXT_autogen.h
+++ b/src/libANGLE/validationESEXT_autogen.h
@@ -673,34 +673,46 @@
 
 // GL_CHROMIUM_path_rendering
 bool ValidateGenPathsCHROMIUM(Context *context, GLsizei range);
-bool ValidateDeletePathsCHROMIUM(Context *context, GLuint first, GLsizei range);
-bool ValidateIsPathCHROMIUM(Context *context, GLuint path);
+bool ValidateDeletePathsCHROMIUM(Context *context, PathID firstPacked, GLsizei range);
+bool ValidateIsPathCHROMIUM(Context *context, PathID pathPacked);
 bool ValidatePathCommandsCHROMIUM(Context *context,
-                                  GLuint path,
+                                  PathID pathPacked,
                                   GLsizei numCommands,
                                   const GLubyte *commands,
                                   GLsizei numCoords,
                                   GLenum coordType,
                                   const void *coords);
-bool ValidatePathParameterfCHROMIUM(Context *context, GLuint path, GLenum pname, GLfloat value);
-bool ValidatePathParameteriCHROMIUM(Context *context, GLuint path, GLenum pname, GLint value);
+bool ValidatePathParameterfCHROMIUM(Context *context,
+                                    PathID pathPacked,
+                                    GLenum pname,
+                                    GLfloat value);
+bool ValidatePathParameteriCHROMIUM(Context *context, PathID pathPacked, GLenum pname, GLint value);
 bool ValidateGetPathParameterfvCHROMIUM(Context *context,
-                                        GLuint path,
+                                        PathID pathPacked,
                                         GLenum pname,
                                         GLfloat *value);
-bool ValidateGetPathParameterivCHROMIUM(Context *context, GLuint path, GLenum pname, GLint *value);
+bool ValidateGetPathParameterivCHROMIUM(Context *context,
+                                        PathID pathPacked,
+                                        GLenum pname,
+                                        GLint *value);
 bool ValidatePathStencilFuncCHROMIUM(Context *context, GLenum func, GLint ref, GLuint mask);
-bool ValidateStencilFillPathCHROMIUM(Context *context, GLuint path, GLenum fillMode, GLuint mask);
-bool ValidateStencilStrokePathCHROMIUM(Context *context, GLuint path, GLint reference, GLuint mask);
-bool ValidateCoverFillPathCHROMIUM(Context *context, GLuint path, GLenum coverMode);
-bool ValidateCoverStrokePathCHROMIUM(Context *context, GLuint path, GLenum coverMode);
+bool ValidateStencilFillPathCHROMIUM(Context *context,
+                                     PathID pathPacked,
+                                     GLenum fillMode,
+                                     GLuint mask);
+bool ValidateStencilStrokePathCHROMIUM(Context *context,
+                                       PathID pathPacked,
+                                       GLint reference,
+                                       GLuint mask);
+bool ValidateCoverFillPathCHROMIUM(Context *context, PathID pathPacked, GLenum coverMode);
+bool ValidateCoverStrokePathCHROMIUM(Context *context, PathID pathPacked, GLenum coverMode);
 bool ValidateStencilThenCoverFillPathCHROMIUM(Context *context,
-                                              GLuint path,
+                                              PathID pathPacked,
                                               GLenum fillMode,
                                               GLuint mask,
                                               GLenum coverMode);
 bool ValidateStencilThenCoverStrokePathCHROMIUM(Context *context,
-                                                GLuint path,
+                                                PathID pathPacked,
                                                 GLint reference,
                                                 GLuint mask,
                                                 GLenum coverMode);
@@ -708,7 +720,7 @@
                                             GLsizei numPath,
                                             GLenum pathNameType,
                                             const void *paths,
-                                            GLuint pathBase,
+                                            PathID pathBasePacked,
                                             GLenum coverMode,
                                             GLenum transformType,
                                             const GLfloat *transformValues);
@@ -716,7 +728,7 @@
                                               GLsizei numPath,
                                               GLenum pathNameType,
                                               const void *paths,
-                                              GLuint pathBase,
+                                              PathID pathBasePacked,
                                               GLenum coverMode,
                                               GLenum transformType,
                                               const GLfloat *transformValues);
@@ -724,7 +736,7 @@
                                                 GLsizei numPath,
                                                 GLenum pathNameType,
                                                 const void *paths,
-                                                GLuint pathBase,
+                                                PathID pathBasePacked,
                                                 GLint reference,
                                                 GLuint mask,
                                                 GLenum transformType,
@@ -733,7 +745,7 @@
                                               GLsizei numPaths,
                                               GLenum pathNameType,
                                               const void *paths,
-                                              GLuint pathBase,
+                                              PathID pathBasePacked,
                                               GLenum fillMode,
                                               GLuint mask,
                                               GLenum transformType,
@@ -742,7 +754,7 @@
                                                        GLsizei numPaths,
                                                        GLenum pathNameType,
                                                        const void *paths,
-                                                       GLuint pathBase,
+                                                       PathID pathBasePacked,
                                                        GLenum fillMode,
                                                        GLuint mask,
                                                        GLenum coverMode,
@@ -752,7 +764,7 @@
                                                          GLsizei numPaths,
                                                          GLenum pathNameType,
                                                          const void *paths,
-                                                         GLuint pathBase,
+                                                         PathID pathBasePacked,
                                                          GLint reference,
                                                          GLuint mask,
                                                          GLenum coverMode,
diff --git a/src/libGLESv2/entry_points_gles_ext_autogen.cpp b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
index 1039ad8..5c98e62 100644
--- a/src/libGLESv2/entry_points_gles_ext_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
@@ -2986,14 +2986,15 @@
 
     if (context)
     {
+        PathID firstPacked                            = FromGL<PathID>(first);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() || ValidateDeletePathsCHROMIUM(context, first, range));
+            (context->skipValidation() || ValidateDeletePathsCHROMIUM(context, firstPacked, range));
         if (isCallValid)
         {
-            context->deletePaths(first, range);
+            context->deletePaths(firstPacked, range);
         }
-        ANGLE_CAPTURE(DeletePathsCHROMIUM, isCallValid, context, first, range);
+        ANGLE_CAPTURE(DeletePathsCHROMIUM, isCallValid, context, firstPacked, range);
     }
 }
 
@@ -3005,17 +3006,19 @@
     GLboolean returnValue;
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid = (context->skipValidation() || ValidateIsPathCHROMIUM(context, path));
+        bool isCallValid =
+            (context->skipValidation() || ValidateIsPathCHROMIUM(context, pathPacked));
         if (isCallValid)
         {
-            returnValue = context->isPath(path);
+            returnValue = context->isPath(pathPacked);
         }
         else
         {
             returnValue = GetDefaultReturnValue<EntryPoint::IsPathCHROMIUM, GLboolean>();
         }
-        ANGLE_CAPTURE(IsPathCHROMIUM, isCallValid, context, path, returnValue);
+        ANGLE_CAPTURE(IsPathCHROMIUM, isCallValid, context, pathPacked, returnValue);
     }
     else
     {
@@ -3041,15 +3044,16 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidatePathCommandsCHROMIUM(context, path, numCommands, commands,
+                            ValidatePathCommandsCHROMIUM(context, pathPacked, numCommands, commands,
                                                          numCoords, coordType, coords));
         if (isCallValid)
         {
-            context->pathCommands(path, numCommands, commands, numCoords, coordType, coords);
+            context->pathCommands(pathPacked, numCommands, commands, numCoords, coordType, coords);
         }
-        ANGLE_CAPTURE(PathCommandsCHROMIUM, isCallValid, context, path, numCommands, commands,
+        ANGLE_CAPTURE(PathCommandsCHROMIUM, isCallValid, context, pathPacked, numCommands, commands,
                       numCoords, coordType, coords);
     }
 }
@@ -3063,14 +3067,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidatePathParameterfCHROMIUM(context, path, pname, value));
+                            ValidatePathParameterfCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->pathParameterf(path, pname, value);
+            context->pathParameterf(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(PathParameterfCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(PathParameterfCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -3083,14 +3088,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidatePathParameteriCHROMIUM(context, path, pname, value));
+                            ValidatePathParameteriCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->pathParameteri(path, pname, value);
+            context->pathParameteri(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(PathParameteriCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(PathParameteriCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -3103,14 +3109,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateGetPathParameterfvCHROMIUM(context, path, pname, value));
+                            ValidateGetPathParameterfvCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->getPathParameterfv(path, pname, value);
+            context->getPathParameterfv(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(GetPathParameterfvCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(GetPathParameterfvCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -3123,14 +3130,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateGetPathParameterivCHROMIUM(context, path, pname, value));
+                            ValidateGetPathParameterivCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->getPathParameteriv(path, pname, value);
+            context->getPathParameteriv(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(GetPathParameterivCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(GetPathParameterivCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -3163,14 +3171,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateStencilFillPathCHROMIUM(context, path, fillMode, mask));
+                            ValidateStencilFillPathCHROMIUM(context, pathPacked, fillMode, mask));
         if (isCallValid)
         {
-            context->stencilFillPath(path, fillMode, mask);
+            context->stencilFillPath(pathPacked, fillMode, mask);
         }
-        ANGLE_CAPTURE(StencilFillPathCHROMIUM, isCallValid, context, path, fillMode, mask);
+        ANGLE_CAPTURE(StencilFillPathCHROMIUM, isCallValid, context, pathPacked, fillMode, mask);
     }
 }
 
@@ -3183,14 +3192,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid                              = (context->skipValidation() ||
-                            ValidateStencilStrokePathCHROMIUM(context, path, reference, mask));
+        bool isCallValid = (context->skipValidation() || ValidateStencilStrokePathCHROMIUM(
+                                                             context, pathPacked, reference, mask));
         if (isCallValid)
         {
-            context->stencilStrokePath(path, reference, mask);
+            context->stencilStrokePath(pathPacked, reference, mask);
         }
-        ANGLE_CAPTURE(StencilStrokePathCHROMIUM, isCallValid, context, path, reference, mask);
+        ANGLE_CAPTURE(StencilStrokePathCHROMIUM, isCallValid, context, pathPacked, reference, mask);
     }
 }
 
@@ -3202,14 +3212,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid =
-            (context->skipValidation() || ValidateCoverFillPathCHROMIUM(context, path, coverMode));
+        bool isCallValid                              = (context->skipValidation() ||
+                            ValidateCoverFillPathCHROMIUM(context, pathPacked, coverMode));
         if (isCallValid)
         {
-            context->coverFillPath(path, coverMode);
+            context->coverFillPath(pathPacked, coverMode);
         }
-        ANGLE_CAPTURE(CoverFillPathCHROMIUM, isCallValid, context, path, coverMode);
+        ANGLE_CAPTURE(CoverFillPathCHROMIUM, isCallValid, context, pathPacked, coverMode);
     }
 }
 
@@ -3221,14 +3232,15 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateCoverStrokePathCHROMIUM(context, path, coverMode));
+                            ValidateCoverStrokePathCHROMIUM(context, pathPacked, coverMode));
         if (isCallValid)
         {
-            context->coverStrokePath(path, coverMode);
+            context->coverStrokePath(pathPacked, coverMode);
         }
-        ANGLE_CAPTURE(CoverStrokePathCHROMIUM, isCallValid, context, path, coverMode);
+        ANGLE_CAPTURE(CoverStrokePathCHROMIUM, isCallValid, context, pathPacked, coverMode);
     }
 }
 
@@ -3246,16 +3258,17 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() ||
-             ValidateStencilThenCoverFillPathCHROMIUM(context, path, fillMode, mask, coverMode));
+            (context->skipValidation() || ValidateStencilThenCoverFillPathCHROMIUM(
+                                              context, pathPacked, fillMode, mask, coverMode));
         if (isCallValid)
         {
-            context->stencilThenCoverFillPath(path, fillMode, mask, coverMode);
+            context->stencilThenCoverFillPath(pathPacked, fillMode, mask, coverMode);
         }
-        ANGLE_CAPTURE(StencilThenCoverFillPathCHROMIUM, isCallValid, context, path, fillMode, mask,
-                      coverMode);
+        ANGLE_CAPTURE(StencilThenCoverFillPathCHROMIUM, isCallValid, context, pathPacked, fillMode,
+                      mask, coverMode);
     }
 }
 
@@ -3273,16 +3286,17 @@
 
     if (context)
     {
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() ||
-             ValidateStencilThenCoverStrokePathCHROMIUM(context, path, reference, mask, coverMode));
+            (context->skipValidation() || ValidateStencilThenCoverStrokePathCHROMIUM(
+                                              context, pathPacked, reference, mask, coverMode));
         if (isCallValid)
         {
-            context->stencilThenCoverStrokePath(path, reference, mask, coverMode);
+            context->stencilThenCoverStrokePath(pathPacked, reference, mask, coverMode);
         }
-        ANGLE_CAPTURE(StencilThenCoverStrokePathCHROMIUM, isCallValid, context, path, reference,
-                      mask, coverMode);
+        ANGLE_CAPTURE(StencilThenCoverStrokePathCHROMIUM, isCallValid, context, pathPacked,
+                      reference, mask, coverMode);
     }
 }
 
@@ -3306,18 +3320,19 @@
 
     if (context)
     {
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() ||
-             ValidateCoverFillPathInstancedCHROMIUM(context, numPath, pathNameType, paths, pathBase,
-                                                    coverMode, transformType, transformValues));
+            (context->skipValidation() || ValidateCoverFillPathInstancedCHROMIUM(
+                                              context, numPath, pathNameType, paths, pathBasePacked,
+                                              coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->coverFillPathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
+            context->coverFillPathInstanced(numPath, pathNameType, paths, pathBasePacked, coverMode,
                                             transformType, transformValues);
         }
         ANGLE_CAPTURE(CoverFillPathInstancedCHROMIUM, isCallValid, context, numPath, pathNameType,
-                      paths, pathBase, coverMode, transformType, transformValues);
+                      paths, pathBasePacked, coverMode, transformType, transformValues);
     }
 }
 
@@ -3341,18 +3356,19 @@
 
     if (context)
     {
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
             (context->skipValidation() || ValidateCoverStrokePathInstancedCHROMIUM(
-                                              context, numPath, pathNameType, paths, pathBase,
+                                              context, numPath, pathNameType, paths, pathBasePacked,
                                               coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->coverStrokePathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
-                                              transformType, transformValues);
+            context->coverStrokePathInstanced(numPath, pathNameType, paths, pathBasePacked,
+                                              coverMode, transformType, transformValues);
         }
         ANGLE_CAPTURE(CoverStrokePathInstancedCHROMIUM, isCallValid, context, numPath, pathNameType,
-                      paths, pathBase, coverMode, transformType, transformValues);
+                      paths, pathBasePacked, coverMode, transformType, transformValues);
     }
 }
 
@@ -3377,18 +3393,19 @@
 
     if (context)
     {
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
             (context->skipValidation() || ValidateStencilStrokePathInstancedCHROMIUM(
-                                              context, numPath, pathNameType, paths, pathBase,
+                                              context, numPath, pathNameType, paths, pathBasePacked,
                                               reference, mask, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilStrokePathInstanced(numPath, pathNameType, paths, pathBase, reference,
-                                                mask, transformType, transformValues);
+            context->stencilStrokePathInstanced(numPath, pathNameType, paths, pathBasePacked,
+                                                reference, mask, transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilStrokePathInstancedCHROMIUM, isCallValid, context, numPath,
-                      pathNameType, paths, pathBase, reference, mask, transformType,
+                      pathNameType, paths, pathBasePacked, reference, mask, transformType,
                       transformValues);
     }
 }
@@ -3414,18 +3431,19 @@
 
     if (context)
     {
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid =
-            (context->skipValidation() || ValidateStencilFillPathInstancedCHROMIUM(
-                                              context, numPaths, pathNameType, paths, pathBase,
-                                              fillMode, mask, transformType, transformValues));
+        bool isCallValid                              = (context->skipValidation() ||
+                            ValidateStencilFillPathInstancedCHROMIUM(
+                                context, numPaths, pathNameType, paths, pathBasePacked, fillMode,
+                                mask, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBase, fillMode,
-                                              mask, transformType, transformValues);
+            context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBasePacked,
+                                              fillMode, mask, transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilFillPathInstancedCHROMIUM, isCallValid, context, numPaths,
-                      pathNameType, paths, pathBase, fillMode, mask, transformType,
+                      pathNameType, paths, pathBasePacked, fillMode, mask, transformType,
                       transformValues);
     }
 }
@@ -3453,19 +3471,20 @@
 
     if (context)
     {
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
                             ValidateStencilThenCoverFillPathInstancedCHROMIUM(
-                                context, numPaths, pathNameType, paths, pathBase, fillMode, mask,
-                                coverMode, transformType, transformValues));
+                                context, numPaths, pathNameType, paths, pathBasePacked, fillMode,
+                                mask, coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths, pathBase,
-                                                       fillMode, mask, coverMode, transformType,
-                                                       transformValues);
+            context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths,
+                                                       pathBasePacked, fillMode, mask, coverMode,
+                                                       transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilThenCoverFillPathInstancedCHROMIUM, isCallValid, context, numPaths,
-                      pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType,
+                      pathNameType, paths, pathBasePacked, fillMode, mask, coverMode, transformType,
                       transformValues);
     }
 }
@@ -3493,20 +3512,21 @@
 
     if (context)
     {
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
                             ValidateStencilThenCoverStrokePathInstancedCHROMIUM(
-                                context, numPaths, pathNameType, paths, pathBase, reference, mask,
-                                coverMode, transformType, transformValues));
+                                context, numPaths, pathNameType, paths, pathBasePacked, reference,
+                                mask, coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
-                                                         reference, mask, coverMode, transformType,
-                                                         transformValues);
+            context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths,
+                                                         pathBasePacked, reference, mask, coverMode,
+                                                         transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilThenCoverStrokePathInstancedCHROMIUM, isCallValid, context, numPaths,
-                      pathNameType, paths, pathBase, reference, mask, coverMode, transformType,
-                      transformValues);
+                      pathNameType, paths, pathBasePacked, reference, mask, coverMode,
+                      transformType, transformValues);
     }
 }
 
@@ -21091,14 +21111,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID firstPacked                            = FromGL<PathID>(first);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() || ValidateDeletePathsCHROMIUM(context, first, range));
+            (context->skipValidation() || ValidateDeletePathsCHROMIUM(context, firstPacked, range));
         if (isCallValid)
         {
-            context->deletePaths(first, range);
+            context->deletePaths(firstPacked, range);
         }
-        ANGLE_CAPTURE(DeletePathsCHROMIUM, isCallValid, context, first, range);
+        ANGLE_CAPTURE(DeletePathsCHROMIUM, isCallValid, context, firstPacked, range);
     }
 }
 
@@ -21111,17 +21132,19 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid = (context->skipValidation() || ValidateIsPathCHROMIUM(context, path));
+        bool isCallValid =
+            (context->skipValidation() || ValidateIsPathCHROMIUM(context, pathPacked));
         if (isCallValid)
         {
-            returnValue = context->isPath(path);
+            returnValue = context->isPath(pathPacked);
         }
         else
         {
             returnValue = GetDefaultReturnValue<EntryPoint::IsPathCHROMIUM, GLboolean>();
         }
-        ANGLE_CAPTURE(IsPathCHROMIUM, isCallValid, context, path, returnValue);
+        ANGLE_CAPTURE(IsPathCHROMIUM, isCallValid, context, pathPacked, returnValue);
     }
     else
     {
@@ -21149,15 +21172,16 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidatePathCommandsCHROMIUM(context, path, numCommands, commands,
+                            ValidatePathCommandsCHROMIUM(context, pathPacked, numCommands, commands,
                                                          numCoords, coordType, coords));
         if (isCallValid)
         {
-            context->pathCommands(path, numCommands, commands, numCoords, coordType, coords);
+            context->pathCommands(pathPacked, numCommands, commands, numCoords, coordType, coords);
         }
-        ANGLE_CAPTURE(PathCommandsCHROMIUM, isCallValid, context, path, numCommands, commands,
+        ANGLE_CAPTURE(PathCommandsCHROMIUM, isCallValid, context, pathPacked, numCommands, commands,
                       numCoords, coordType, coords);
     }
 }
@@ -21175,14 +21199,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidatePathParameterfCHROMIUM(context, path, pname, value));
+                            ValidatePathParameterfCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->pathParameterf(path, pname, value);
+            context->pathParameterf(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(PathParameterfCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(PathParameterfCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -21199,14 +21224,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidatePathParameteriCHROMIUM(context, path, pname, value));
+                            ValidatePathParameteriCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->pathParameteri(path, pname, value);
+            context->pathParameteri(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(PathParameteriCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(PathParameteriCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -21223,14 +21249,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateGetPathParameterfvCHROMIUM(context, path, pname, value));
+                            ValidateGetPathParameterfvCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->getPathParameterfv(path, pname, value);
+            context->getPathParameterfv(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(GetPathParameterfvCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(GetPathParameterfvCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -21247,14 +21274,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateGetPathParameterivCHROMIUM(context, path, pname, value));
+                            ValidateGetPathParameterivCHROMIUM(context, pathPacked, pname, value));
         if (isCallValid)
         {
-            context->getPathParameteriv(path, pname, value);
+            context->getPathParameteriv(pathPacked, pname, value);
         }
-        ANGLE_CAPTURE(GetPathParameterivCHROMIUM, isCallValid, context, path, pname, value);
+        ANGLE_CAPTURE(GetPathParameterivCHROMIUM, isCallValid, context, pathPacked, pname, value);
     }
 }
 
@@ -21295,14 +21323,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateStencilFillPathCHROMIUM(context, path, fillMode, mask));
+                            ValidateStencilFillPathCHROMIUM(context, pathPacked, fillMode, mask));
         if (isCallValid)
         {
-            context->stencilFillPath(path, fillMode, mask);
+            context->stencilFillPath(pathPacked, fillMode, mask);
         }
-        ANGLE_CAPTURE(StencilFillPathCHROMIUM, isCallValid, context, path, fillMode, mask);
+        ANGLE_CAPTURE(StencilFillPathCHROMIUM, isCallValid, context, pathPacked, fillMode, mask);
     }
 }
 
@@ -21319,14 +21348,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid                              = (context->skipValidation() ||
-                            ValidateStencilStrokePathCHROMIUM(context, path, reference, mask));
+        bool isCallValid = (context->skipValidation() || ValidateStencilStrokePathCHROMIUM(
+                                                             context, pathPacked, reference, mask));
         if (isCallValid)
         {
-            context->stencilStrokePath(path, reference, mask);
+            context->stencilStrokePath(pathPacked, reference, mask);
         }
-        ANGLE_CAPTURE(StencilStrokePathCHROMIUM, isCallValid, context, path, reference, mask);
+        ANGLE_CAPTURE(StencilStrokePathCHROMIUM, isCallValid, context, pathPacked, reference, mask);
     }
 }
 
@@ -21339,14 +21369,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid =
-            (context->skipValidation() || ValidateCoverFillPathCHROMIUM(context, path, coverMode));
+        bool isCallValid                              = (context->skipValidation() ||
+                            ValidateCoverFillPathCHROMIUM(context, pathPacked, coverMode));
         if (isCallValid)
         {
-            context->coverFillPath(path, coverMode);
+            context->coverFillPath(pathPacked, coverMode);
         }
-        ANGLE_CAPTURE(CoverFillPathCHROMIUM, isCallValid, context, path, coverMode);
+        ANGLE_CAPTURE(CoverFillPathCHROMIUM, isCallValid, context, pathPacked, coverMode);
     }
 }
 
@@ -21361,14 +21392,15 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
-                            ValidateCoverStrokePathCHROMIUM(context, path, coverMode));
+                            ValidateCoverStrokePathCHROMIUM(context, pathPacked, coverMode));
         if (isCallValid)
         {
-            context->coverStrokePath(path, coverMode);
+            context->coverStrokePath(pathPacked, coverMode);
         }
-        ANGLE_CAPTURE(CoverStrokePathCHROMIUM, isCallValid, context, path, coverMode);
+        ANGLE_CAPTURE(CoverStrokePathCHROMIUM, isCallValid, context, pathPacked, coverMode);
     }
 }
 
@@ -21388,16 +21420,17 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() ||
-             ValidateStencilThenCoverFillPathCHROMIUM(context, path, fillMode, mask, coverMode));
+            (context->skipValidation() || ValidateStencilThenCoverFillPathCHROMIUM(
+                                              context, pathPacked, fillMode, mask, coverMode));
         if (isCallValid)
         {
-            context->stencilThenCoverFillPath(path, fillMode, mask, coverMode);
+            context->stencilThenCoverFillPath(pathPacked, fillMode, mask, coverMode);
         }
-        ANGLE_CAPTURE(StencilThenCoverFillPathCHROMIUM, isCallValid, context, path, fillMode, mask,
-                      coverMode);
+        ANGLE_CAPTURE(StencilThenCoverFillPathCHROMIUM, isCallValid, context, pathPacked, fillMode,
+                      mask, coverMode);
     }
 }
 
@@ -21417,16 +21450,17 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathPacked                             = FromGL<PathID>(path);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() ||
-             ValidateStencilThenCoverStrokePathCHROMIUM(context, path, reference, mask, coverMode));
+            (context->skipValidation() || ValidateStencilThenCoverStrokePathCHROMIUM(
+                                              context, pathPacked, reference, mask, coverMode));
         if (isCallValid)
         {
-            context->stencilThenCoverStrokePath(path, reference, mask, coverMode);
+            context->stencilThenCoverStrokePath(pathPacked, reference, mask, coverMode);
         }
-        ANGLE_CAPTURE(StencilThenCoverStrokePathCHROMIUM, isCallValid, context, path, reference,
-                      mask, coverMode);
+        ANGLE_CAPTURE(StencilThenCoverStrokePathCHROMIUM, isCallValid, context, pathPacked,
+                      reference, mask, coverMode);
     }
 }
 
@@ -21452,18 +21486,19 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
-            (context->skipValidation() ||
-             ValidateCoverFillPathInstancedCHROMIUM(context, numPath, pathNameType, paths, pathBase,
-                                                    coverMode, transformType, transformValues));
+            (context->skipValidation() || ValidateCoverFillPathInstancedCHROMIUM(
+                                              context, numPath, pathNameType, paths, pathBasePacked,
+                                              coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->coverFillPathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
+            context->coverFillPathInstanced(numPath, pathNameType, paths, pathBasePacked, coverMode,
                                             transformType, transformValues);
         }
         ANGLE_CAPTURE(CoverFillPathInstancedCHROMIUM, isCallValid, context, numPath, pathNameType,
-                      paths, pathBase, coverMode, transformType, transformValues);
+                      paths, pathBasePacked, coverMode, transformType, transformValues);
     }
 }
 
@@ -21489,18 +21524,19 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
             (context->skipValidation() || ValidateCoverStrokePathInstancedCHROMIUM(
-                                              context, numPath, pathNameType, paths, pathBase,
+                                              context, numPath, pathNameType, paths, pathBasePacked,
                                               coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->coverStrokePathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
-                                              transformType, transformValues);
+            context->coverStrokePathInstanced(numPath, pathNameType, paths, pathBasePacked,
+                                              coverMode, transformType, transformValues);
         }
         ANGLE_CAPTURE(CoverStrokePathInstancedCHROMIUM, isCallValid, context, numPath, pathNameType,
-                      paths, pathBase, coverMode, transformType, transformValues);
+                      paths, pathBasePacked, coverMode, transformType, transformValues);
     }
 }
 
@@ -21527,18 +21563,19 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid =
             (context->skipValidation() || ValidateStencilStrokePathInstancedCHROMIUM(
-                                              context, numPath, pathNameType, paths, pathBase,
+                                              context, numPath, pathNameType, paths, pathBasePacked,
                                               reference, mask, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilStrokePathInstanced(numPath, pathNameType, paths, pathBase, reference,
-                                                mask, transformType, transformValues);
+            context->stencilStrokePathInstanced(numPath, pathNameType, paths, pathBasePacked,
+                                                reference, mask, transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilStrokePathInstancedCHROMIUM, isCallValid, context, numPath,
-                      pathNameType, paths, pathBase, reference, mask, transformType,
+                      pathNameType, paths, pathBasePacked, reference, mask, transformType,
                       transformValues);
     }
 }
@@ -21566,18 +21603,19 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
-        bool isCallValid =
-            (context->skipValidation() || ValidateStencilFillPathInstancedCHROMIUM(
-                                              context, numPaths, pathNameType, paths, pathBase,
-                                              fillMode, mask, transformType, transformValues));
+        bool isCallValid                              = (context->skipValidation() ||
+                            ValidateStencilFillPathInstancedCHROMIUM(
+                                context, numPaths, pathNameType, paths, pathBasePacked, fillMode,
+                                mask, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBase, fillMode,
-                                              mask, transformType, transformValues);
+            context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBasePacked,
+                                              fillMode, mask, transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilFillPathInstancedCHROMIUM, isCallValid, context, numPaths,
-                      pathNameType, paths, pathBase, fillMode, mask, transformType,
+                      pathNameType, paths, pathBasePacked, fillMode, mask, transformType,
                       transformValues);
     }
 }
@@ -21608,19 +21646,20 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
                             ValidateStencilThenCoverFillPathInstancedCHROMIUM(
-                                context, numPaths, pathNameType, paths, pathBase, fillMode, mask,
-                                coverMode, transformType, transformValues));
+                                context, numPaths, pathNameType, paths, pathBasePacked, fillMode,
+                                mask, coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths, pathBase,
-                                                       fillMode, mask, coverMode, transformType,
-                                                       transformValues);
+            context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths,
+                                                       pathBasePacked, fillMode, mask, coverMode,
+                                                       transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilThenCoverFillPathInstancedCHROMIUM, isCallValid, context, numPaths,
-                      pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType,
+                      pathNameType, paths, pathBasePacked, fillMode, mask, coverMode, transformType,
                       transformValues);
     }
 }
@@ -21651,20 +21690,21 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        PathID pathBasePacked                         = FromGL<PathID>(pathBase);
         std::unique_lock<std::mutex> shareContextLock = GetShareGroupLock(context);
         bool isCallValid                              = (context->skipValidation() ||
                             ValidateStencilThenCoverStrokePathInstancedCHROMIUM(
-                                context, numPaths, pathNameType, paths, pathBase, reference, mask,
-                                coverMode, transformType, transformValues));
+                                context, numPaths, pathNameType, paths, pathBasePacked, reference,
+                                mask, coverMode, transformType, transformValues));
         if (isCallValid)
         {
-            context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
-                                                         reference, mask, coverMode, transformType,
-                                                         transformValues);
+            context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths,
+                                                         pathBasePacked, reference, mask, coverMode,
+                                                         transformType, transformValues);
         }
         ANGLE_CAPTURE(StencilThenCoverStrokePathInstancedCHROMIUM, isCallValid, context, numPaths,
-                      pathNameType, paths, pathBase, reference, mask, coverMode, transformType,
-                      transformValues);
+                      pathNameType, paths, pathBasePacked, reference, mask, coverMode,
+                      transformType, transformValues);
     }
 }