Pack handle type enum for glImportMemoryFd & glImportSemaphoreFd

Bug: angleproject:3289

Change-Id: Ic20b1d55641494b46622e1e28d93e2ca30655ea6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1566143
Commit-Queue: Michael Spang <spang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/scripts/entry_point_packed_gl_enums.json b/scripts/entry_point_packed_gl_enums.json
index 4bd8d3c..be25af9 100644
--- a/scripts/entry_point_packed_gl_enums.json
+++ b/scripts/entry_point_packed_gl_enums.json
@@ -265,6 +265,12 @@
     "glGetTexParameterxv": {
         "target": "TextureType"
     },
+    "glImportMemoryFdEXT": {
+        "handleType": "HandleType"
+    },
+    "glImportSemaphoreFdEXT": {
+        "handleType": "HandleType"
+    },
     "glLightf" : {
         "pname" : "LightParameter"
     },
diff --git a/scripts/run_code_generation_hashes.json b/scripts/run_code_generation_hashes.json
index af76866..550354d 100644
--- a/scripts/run_code_generation_hashes.json
+++ b/scripts/run_code_generation_hashes.json
@@ -92,7 +92,7 @@
   "GL/EGL entry points:scripts/egl_angle_ext.xml":
     "745534010f31fbe8e1a1fcddce15ed2d",
   "GL/EGL entry points:scripts/entry_point_packed_gl_enums.json":
-    "263af9517ddb1c9f3ba83894fe837095",
+    "384494b3910e97cc05db34fa3cff54b8",
   "GL/EGL entry points:scripts/generate_entry_points.py":
     "70f826962543838df966ed8c7155d0dd",
   "GL/EGL entry points:scripts/gl.xml":
@@ -112,7 +112,7 @@
   "GL/EGL entry points:src/libANGLE/validationES3_autogen.h":
     "4617942e5bf67fa5e35675daf66afc5c",
   "GL/EGL entry points:src/libANGLE/validationESEXT_autogen.h":
-    "8e501839a051c0f1b646343b665369df",
+    "9401b0db013a8b95431ce2a4eb8a0405",
   "GL/EGL entry points:src/libGLESv2/entry_points_enum_autogen.h":
     "1c50aa0844ece3d673d563a8b23a7166",
   "GL/EGL entry points:src/libGLESv2/entry_points_gles_1_0_autogen.cpp":
@@ -132,7 +132,7 @@
   "GL/EGL entry points:src/libGLESv2/entry_points_gles_3_1_autogen.h":
     "043d09a964c740067bf4279e0b544aed",
   "GL/EGL entry points:src/libGLESv2/entry_points_gles_ext_autogen.cpp":
-    "9131b9e072a25e09f10cedaccfdd68f8",
+    "d4ef39b11966fa6a7aff057b8d67b679",
   "GL/EGL entry points:src/libGLESv2/entry_points_gles_ext_autogen.h":
     "2c746d064fe2d8ed4769dc9acbb9ad67",
   "GL/EGL entry points:src/libGLESv2/libGLESv2_autogen.cpp":
@@ -368,15 +368,15 @@
   "packed enum:src/common/PackedEGLEnums_autogen.h":
     "4073274726e0c926765c5ab8b21dc3de",
   "packed enum:src/common/PackedGLEnums_autogen.cpp":
-    "b64a7cadc5c8c054f788d1e0b58a11a1",
+    "e9ac6361c857133a2f1cea1c3eaabd7e",
   "packed enum:src/common/PackedGLEnums_autogen.h":
-    "80724ac8fc2cbdebee81fb43b4345c1a",
+    "0b43ae9a66b731dfbf30e7edf913973e",
   "packed enum:src/common/gen_packed_gl_enums.py":
     "0cd1a1cb6d5fde8cbac2994db24eb901",
   "packed enum:src/common/packed_egl_enums.json":
     "5f591d220ee53b6e54a27d1523a3ab79",
   "packed enum:src/common/packed_gl_enums.json":
-    "6e2e2845f96754509b8add1f77e203b3",
+    "b148c43156d73b60cbd936118beeeb41",
   "proc table:src/libGLESv2/gen_proc_table.py":
     "20ebe54894d613de42b0b15ca34078d9",
   "proc table:src/libGLESv2/proc_table_autogen.cpp":
diff --git a/src/common/PackedGLEnums_autogen.cpp b/src/common/PackedGLEnums_autogen.cpp
index 66fb926..916d84d 100644
--- a/src/common/PackedGLEnums_autogen.cpp
+++ b/src/common/PackedGLEnums_autogen.cpp
@@ -336,6 +336,30 @@
 }
 
 template <>
+HandleType FromGLenum<HandleType>(GLenum from)
+{
+    switch (from)
+    {
+        case GL_HANDLE_TYPE_OPAQUE_FD_EXT:
+            return HandleType::OpaqueFd;
+        default:
+            return HandleType::InvalidEnum;
+    }
+}
+
+GLenum ToGLenum(HandleType from)
+{
+    switch (from)
+    {
+        case HandleType::OpaqueFd:
+            return GL_HANDLE_TYPE_OPAQUE_FD_EXT;
+        default:
+            UNREACHABLE();
+            return 0;
+    }
+}
+
+template <>
 HintSetting FromGLenum<HintSetting>(GLenum from)
 {
     switch (from)
diff --git a/src/common/PackedGLEnums_autogen.h b/src/common/PackedGLEnums_autogen.h
index 7d8b4fb..295bb9e 100644
--- a/src/common/PackedGLEnums_autogen.h
+++ b/src/common/PackedGLEnums_autogen.h
@@ -146,6 +146,18 @@
 FogMode FromGLenum<FogMode>(GLenum from);
 GLenum ToGLenum(FogMode from);
 
+enum class HandleType : uint8_t
+{
+    OpaqueFd = 0,
+
+    InvalidEnum = 1,
+    EnumCount   = 1,
+};
+
+template <>
+HandleType FromGLenum<HandleType>(GLenum from);
+GLenum ToGLenum(HandleType from);
+
 enum class HintSetting : uint8_t
 {
     DontCare = 0,
diff --git a/src/common/packed_gl_enums.json b/src/common/packed_gl_enums.json
index 054e3c9..dc6eeaf 100644
--- a/src/common/packed_gl_enums.json
+++ b/src/common/packed_gl_enums.json
@@ -255,5 +255,9 @@
     {
         "FirstVertexConvention": "GL_FIRST_VERTEX_CONVENTION",
         "LastVertexConvention": "GL_LAST_VERTEX_CONVENTION"
+    },
+    "HandleType":
+    {
+        "OpaqueFd": "GL_HANDLE_TYPE_OPAQUE_FD_EXT"
     }
 }
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index bf06988..455e1de 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -7184,7 +7184,7 @@
     UNIMPLEMENTED();
 }
 
-void Context::importMemoryFd(GLuint memory, GLuint64 size, GLenum handleType, GLint fd)
+void Context::importMemoryFd(GLuint memory, GLuint64 size, HandleType handleType, GLint fd)
 {
     UNIMPLEMENTED();
 }
@@ -7235,7 +7235,7 @@
     UNIMPLEMENTED();
 }
 
-void Context::importSemaphoreFd(GLuint semaphore, GLenum handleType, GLint fd)
+void Context::importSemaphoreFd(GLuint semaphore, HandleType handleType, GLint fd)
 {
     UNIMPLEMENTED();
 }
diff --git a/src/libANGLE/Context.h b/src/libANGLE/Context.h
index 5a49a12..ddea5be 100644
--- a/src/libANGLE/Context.h
+++ b/src/libANGLE/Context.h
@@ -393,7 +393,7 @@
     void bufferStorageMem(TextureType target, GLsizeiptr size, GLuint memory, GLuint64 offset);
 
     // GL_EXT_memory_object_fd
-    void importMemoryFd(GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
+    void importMemoryFd(GLuint memory, GLuint64 size, HandleType handleType, GLint fd);
 
     // GL_EXT_semaphore
     void genSemaphores(GLsizei n, GLuint *semaphores);
@@ -415,7 +415,7 @@
                          const GLenum *dstLayouts);
 
     // GL_EXT_semaphore_fd
-    void importSemaphoreFd(GLuint semaphore, GLenum handleType, GLint fd);
+    void importSemaphoreFd(GLuint semaphore, HandleType handleType, GLint fd);
 
     // GLES1 emulation: Interface to entry points
     ANGLE_GLES1_CONTEXT_API
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index b65a1ba..b7143eb 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -3184,7 +3184,7 @@
 bool ValidateImportMemoryFdEXT(Context *context,
                                GLuint memory,
                                GLuint64 size,
-                               GLenum handleType,
+                               HandleType handleType,
                                GLint fd)
 {
     if (!context->getExtensions().memoryObjectFd)
@@ -3299,7 +3299,10 @@
     return false;
 }
 
-bool ValidateImportSemaphoreFdEXT(Context *context, GLuint semaphore, GLenum handleType, GLint fd)
+bool ValidateImportSemaphoreFdEXT(Context *context,
+                                  GLuint semaphore,
+                                  HandleType handleType,
+                                  GLint fd)
 {
     if (!context->getExtensions().semaphoreFd)
     {
diff --git a/src/libANGLE/validationESEXT_autogen.h b/src/libANGLE/validationESEXT_autogen.h
index 5d0d884..d604985 100644
--- a/src/libANGLE/validationESEXT_autogen.h
+++ b/src/libANGLE/validationESEXT_autogen.h
@@ -853,7 +853,7 @@
 bool ValidateImportMemoryFdEXT(Context *context,
                                GLuint memory,
                                GLuint64 size,
-                               GLenum handleType,
+                               HandleType handleTypePacked,
                                GLint fd);
 
 // GL_EXT_occlusion_query_boolean
@@ -908,7 +908,10 @@
                               const GLenum *srcLayouts);
 
 // GL_EXT_semaphore_fd
-bool ValidateImportSemaphoreFdEXT(Context *context, GLuint semaphore, GLenum handleType, GLint fd);
+bool ValidateImportSemaphoreFdEXT(Context *context,
+                                  GLuint semaphore,
+                                  HandleType handleTypePacked,
+                                  GLint fd);
 
 // GL_EXT_texture_storage
 bool ValidateTexStorage1DEXT(Context *context,
diff --git a/src/libGLESv2/entry_points_gles_ext_autogen.cpp b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
index 157ae98..1b42682 100644
--- a/src/libGLESv2/entry_points_gles_ext_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
@@ -3460,10 +3460,11 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
+        HandleType handleTypePacked = FromGLenum<HandleType>(handleType);
         if (context->skipValidation() ||
-            ValidateImportMemoryFdEXT(context, memory, size, handleType, fd))
+            ValidateImportMemoryFdEXT(context, memory, size, handleTypePacked, fd))
         {
-            context->importMemoryFd(memory, size, handleType, fd);
+            context->importMemoryFd(memory, size, handleTypePacked, fd);
         }
     }
 }
@@ -3719,10 +3720,11 @@
     Context *context = GetValidGlobalContext();
     if (context)
     {
+        HandleType handleTypePacked = FromGLenum<HandleType>(handleType);
         if (context->skipValidation() ||
-            ValidateImportSemaphoreFdEXT(context, semaphore, handleType, fd))
+            ValidateImportSemaphoreFdEXT(context, semaphore, handleTypePacked, fd))
         {
-            context->importSemaphoreFd(semaphore, handleType, fd);
+            context->importSemaphoreFd(semaphore, handleTypePacked, fd);
         }
     }
 }
@@ -10876,10 +10878,11 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        HandleType handleTypePacked = FromGLenum<HandleType>(handleType);
         if (context->skipValidation() ||
-            ValidateImportMemoryFdEXT(context, memory, size, handleType, fd))
+            ValidateImportMemoryFdEXT(context, memory, size, handleTypePacked, fd))
         {
-            context->importMemoryFd(memory, size, handleType, fd);
+            context->importMemoryFd(memory, size, handleTypePacked, fd);
         }
     }
 }
@@ -10897,10 +10900,11 @@
     if (context)
     {
         ASSERT(context == GetValidGlobalContext());
+        HandleType handleTypePacked = FromGLenum<HandleType>(handleType);
         if (context->skipValidation() ||
-            ValidateImportSemaphoreFdEXT(context, semaphore, handleType, fd))
+            ValidateImportSemaphoreFdEXT(context, semaphore, handleTypePacked, fd))
         {
-            context->importSemaphoreFd(semaphore, handleType, fd);
+            context->importSemaphoreFd(semaphore, handleTypePacked, fd);
         }
     }
 }